1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Nghiên cứu và thiết kế chip xử lý đa nhân sử dụng Multi2Sim

9 6 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 491,15 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài viết tập trung tìm hiểu và phân tích quá trình phân cấp này nhằm lý giải phần nào về sự cải thiện rõ rệt về mặt tốc độ xử lý của CMP. Mặt khác, hiệu suất của CMP chỉ đạt tối ưu khi sự phân cấp bộ nhớ là phù hợp với chương trình ứng dụng thực tế. Trong nghiên cứu này, chúng tôi trình bày mối liên hệ giữa cấu trúc bộ nhớ thứ bậc của chip CMP và những đặc tính chính của một chương trình ứng dụng chạy trên nó. Mời các bạn cùng tham khảo!

Trang 1

Nghiên cứu và thiết kế chip xử lý đa nhân sử dụng

Multi2Sim

Email : {vinh.ngoquang, hao.doduc}@icdrec.edu.vn Email: {hoangtrang, vdthanh}@hcmut.edu.vn

Tóm tắt nội dung—Chip đa nhân (CMP) ngày càng được

sử dụng rộng rãi nhờ vào năng lực tính toán được nâng

cao rõ rệt so với các thế hệ chip một nhân Tốc độ cũng

như hiệu quả của CMP chủ yếu đến từ quá trình phân

cấp bộ nhớ Tùy vào cách thiết kế mà các thành phần bộ

nhớ cùng nhau chia sẻ dữ liệu hay sử dụng một cách độc

quyền Điều đó làm cho khả năng lưu trữ của bộ nhớ vô

cùng linh hoạt và qua đó trực tiếp cải thiện tốc độ xử

lý Chúng tôi tập trung tìm hiểu và phân tích quá trình

phân cấp này nhằm lý giải phần nào về sự cải thiện rõ

rệt về mặt tốc độ xử lý của CMP Mặt khác, hiệu suất

của CMP chỉ đạt tối ưu khi sự phân cấp bộ nhớ là phù

hợp với chương trình ứng dụng thực tế Trong nghiên cứu

này, chúng tôi trình bày mối liên hệ giữa cấu trúc bộ nhớ

thứ bậc của chip CMP và những đặc tính chính của một

chương trình ứng dụng chạy trên nó Chúng tôi sử dụng

công cụ Multi2Sim để thiết kế và chạy mô phỏng CMP Bên

cạnh đó, chương trình ứng dụng được chon là benchmark

Splash-2, là benchmark được dùng phổ biến để ước lượng

hiệu suất của thiết kế CMP Kết quả thí nghiệm cho thấy

Splash-2 đạt được hiệu suất cao nhất khi dung lượng L1

là 64 KB.

Từ khóa—Phân cấp bộ nhớ, vi xử lý đa nhân, bộ nhớ

cache, Multi2Sim

I GIỚI THIỆU Ngày nay, khi mà máy tính càng ngày càng phổ biến

và tham gia vào nhiều mặt của cuộc sống con người, yêu

cầu về năng lực xử lý của một bộ vi xử lý dường như

là một điều tất yếu Kể từ năm 2001, khi IBM lần đầu

tiên giới thiệu chip đa nhân (CMP) ra thị trường, loại

chip này đã dần thống trị thị trường vi xử lý [?] Những

thế hệ chip một nhân vào hàng xa xỉ của vài chục năm

trước thì ngày nay vẫn không thể đáp ứng được nhu cầu

của một người dùng bình thường Cho dù được cải tiến

bằng cách tăng mật độ transitor hay tăng xung nhịp, các

loại chip này vẫn không thể chạy những phần mềm ứng

dụng, những trò chơi điện tử có đồ họa cao cấp một cách

mượt mà [?][?] Chip CMP ngoài khả năng xử lý mạnh

mẽ còn có độ bền cao, hoạt động ổn định và ít bị nóng

nhờ khả năng tản nhiệt tốt [?][?] Chính những lý do

đó đã làm cho CMP ngày càng phổ biến trên thị trường cũng như không ngừng được nghiên cứu, cải tiến nhằm nâng cao chất lượng

Để nhanh chóng và dễ dàng trong việc tìm hiểu, nghiên cứu cũng như thiết kế CMP thì một phần mềm

mô phỏng là không thể thiếu Phần mềm này sẽ giúp chúng ta thiết kế một CMP dễ dàng, mô phỏng về hiệu năng tính toán, từ đó so sánh các thiết kế khác nhau nhằm rút ra ưu nhược điểm của từng thiết kế Có rất nhiều phần mềm dạng này, trong đó đa phần là miễn phí như : Gem5, Multi2Sim, SimpleScalar [?][?][?],

Trải qua một quá trình tìm hiểu và sử dụng hầu hết các chương trình trên, chúng tôi nhận thấy Multi2Sim là một công cụ rất tốt để tìm hiểu và nghiên cứu về CMP cho nhiều đối tượng, từ người mới bắt đầu đến các chuyên gia

Bên cạnh đó, Multi2Sim cũng hỗ trợ các chương trình benchmark phổ biến nhất hiện nay cho chip CMP là Splash-2 và Parsec [?][?][1] Thông qua thực hiện thí

nghiệm trên những chương trình benchmark chuẩn này, chúng tôi phân tích và rút ra một số đặc tính chính của benchmark và từ đó đưa ra các thông số thiết kế bộ nhớ

có thứ bậc phù hợp nhằm tạo ra mô hình tối ưu nhất cho benchmark đó Trong nghiên cứu, này chúng tôi chọn sử dụng Splash-2 vì nó đã được phát triển khá lâu và có độ

ổn định cao [?] Splash-2 bao gồm nhiều bài toán ứng

dụng khác nhau về tính toán hiệu năng cao và về đồ hoạ Đặc biệt, Splash-2 là benchmark được thiết kế để đánh giá các kiến trúc xử lý song song đa luồng hoặc đa nhân [1][?].

Kết quả thí nghiệm cho thấy benchmark Splash-2 có

sự phân bổ các tác vụ vào các nhân một cách cân bằng thể hiện ở tỷ lệ số lượng truy xuất bộ nhớ cache và thể hiện ở tỷ lệ hit giữa các nhân Tỷ lệ hit ở cache đạt được mức trung bình cao nhất lên tới 99.3% tương ứng với dung lượng L1 và L2 tương ứng là 64 KB và 512 KB Trong phần II, chúng tôi trình bày về kiến trúc tổ chức bộ nhớ có phân cấp của một chip xử lý đa nhân Phần giới thiệu về Multi2Sim được trình bày ở mục III Trong phần này, chúng tôi đi sâu vào những phần liên

Trang 2

quan đến phần phân cấp bộ nhớ để minh họa một cách

trực quan cho nội dung của phần trước Phần IV giới

thiệu một quá trình xuyên suốt của việc thiết kế CMP,

từ khâu hình thành ý tưởng, triển khai, cấu hình, chạy mô

phỏng cho đến khâu thống kê và đánh giá Cuối cùng,

phần V là những nhận định và đánh giá của chúng tôi

về Multi2Sim đối với việc nghiên cứu và thiết kế chip

vi xử lý đa nhân

II PHÂN CẤP BỘ NHỚ TRÊNCMP

Như đã trình bày trong phần I, một CMP xét về bản

chất là sự ghép nối của nhiều chip một nhân tạo thành

Tương tự như chip một nhân, CMP khi vận hành cũng

nhận mã lệnh (Inst) và dữ liệu (Data) từ bộ nhớ để tiến

hành xử lý Các nhân trong chip gần như không thể cải

tiến gì thêm, mật độ các đơn vị xử lý gần như đã bão

hòa Mặt khác việc nâng cao hiệu năng hoạt động của

nhân thông qua việc tăng tần số hoạt động đã gặp giới

hạn rõ ràng là công suất tiêu thu của chip và mức toả

nhiệt cao [?].

Do đó, mọi sự thay đổi hay tác động lên chip với

mong muốn cải thiện hiệu năng đều được thực hiên tại

các thành phần bộ nhớ, từ kiến trúc cho đến mạng nội

bộ giữa chúng với nhau

A Phân cấp bộ nhớ

Chip và bộ nhớ chính của máy tính là hai bộ phận

riêng biệt, tách rời nhau và được liên kết với nhau bởi

một mạng nội bộ [?] Rõ ràng, khi chip yêu cầu một

Inst hay Data thì không thể có ngay được, phải chờ tín

hiệu yêu cầu đi từ chip đến bộ nhớ chính, rồi thông tin

cần thiết sẽ đi từ bộ nhớ chính về lại chip Nếu bộ nhớ

càng gần chip thì quãng đường đi lại càng ngắn, thời

gian thực thi càng ít, và ngược lại Nhưng mặc khác,

chip được cấu thành từ các mạch bán dẫn cực nhỏ, và

phải được nuôi bởi những nguồn điện tương ứng và thật

sự ổn định Nếu ta thiết kế một bộ nhớ chính với dung

lượng lớn đặt ngay bên trong chip hay quá gần chip đều

có thể làm hư hỏng chip, thậm chí gây cháy nổ Qua

đó, chúng ta nhận thấy rằng, khoảng cách từ bộ nhớ đến

chip tỉ lệ thuận với thời gian truy xuất thông tin và tỉ

lệ nghịch với dung lượng bộ nhớ Bộ nhớ càng gần chip

thì truy xuất càng nhanh nhưng dung lượng sẽ giảm đi,

và ngược lại, những bộ nhớ với dung lượng lưu trữ lớn

phải được đặt xa chip [?] Hình 1 cho ta một cái nhìn

trực quan về phân cấp bộ nhớ

Nhưng những nhu cầu ứng dụng của người dùng cuối

thường rất ngặt nghèo: phần mềm ứng dụng lớn, nhưng

yêu cầu xử lý phải nhanh Đó là thách thức, nhưng cũng

là động lực để bộ nhớ máy tính được phát triển đến một

mức độ cao hơn: phân cấp bộ nhớ [2][?][?] Quá trình

Hình 1: Phân cấp bộ nhớ

này, thực chất là sự kết hợp giữa các ưu điểm của các cách bố trí bộ nhớ: bộ nhớ chính, dung lượng lớn sẽ chứa toàn bộ nội dung chương trình, và dĩ nhiên nằm xa chip; một bộ nhớ nhỏ hơn nhiều, được thiết kế nằm trong chip, có nhiệm vụ lưu trữ những Inst và Data thường dùng nhất, nhằm tiết kiệm thời gian truy xuất đến bộ nhớ chính, bộ nhớ như vậy được biết đến với tên gọi

bộ nhớ truy cập nhanh hay bộ nhớ đêm (cache) [?] Sự

khác nhau giữa cache trong chip đơn nhân và CMP được trình bày rõ hơn trong hai mục II-A1 và II-A2

1) Cache của chip một nhân: Như đã trình bày, bộ

nhớ được đặt càng gần chip thì truy xuất càng nhanh, dung lượng phải càng nhỏ Người ta thường chia cache thành các mức : L1, L2, L3, L1 là cache nhỏ nhất,

có tốc độ truy xuất nhanh nhất, L2 có sức chứa lớn hơn L1 và truy xuất chậm hơn L1, tương tự cho các mức cao hơn [2][?] Chip một nhân chỉ có một bộ nhớ cache cho

mỗi mức, và do đó, mạng nội bộ nối từ chip, qua các mức cache, đến bộ nhớ chính rất đơn giản, đó chỉ là một đường thẳng

2) Cache của CMP: CMP là nhiều nhân hợp lại mà

thành Mỗi nhân đều có cache riêng, tùy theo cách chúng

ta bố trí mà có được các kiến trúc khác nhau Thông thường, mỗi nhân đều có cache L1 riêng, còn ở các mức cao hơn thì có thể dùng chung hoặc riêng đều được Vì

ở cùng một mức cache, có nhiều module nên chúng ta

có thể cấu hình để thu được các đồ hình (topology) khác nhau, qua đó thời gian truy xuất và hiệu năng tính toán cũng khác nhau Giả sử CMP có 4 module L2, chúng ta

có thể cho chúng nối thẳng đến L3, hoặc cho chúng nối thành một vòng (ring network), rồi nối một nút trên vòng đến L3, hoặc nối chúng thành hình sao (star network), rồi nối đến L3 Qua đó, chúng ta có thể nhận thấy rằng phân cấp bộ nhớ của CMP phức tạp và đa dạng hơn nhiều so với chip một nhân [?][?] Khi số khả năng

Trang 3

phân cấp càng lớn, chúng ta càng có quyền hi vọng một

trong số chúng sẽ đem lại hiệu quả tính toán mong muốn

cho chúng ta

B Những thành phần chính của bộ nhớ Cache

Cache là một tập hợp các cache line [?] Cache line

là đơn vị cơ bản của cache, mỗi cache line chứa thông

tin đang được lưu trữ tại một địa chỉ nào đó trong bộ

nhớ Tùy theo các cách ánh xạ địa chỉ bộ nhớ lên cache

line mà ta có các kiểu cache khác nhau [3] [4] Hình 2

cho ta một minh họa trực quan

(a) Ánh xạ trực tiếp (b) ánh xạ 2-way (c) Hỗ trợ toàn phần

Hình 2: Các kiểu ánh xạ địa chỉ từ bộ nhớ vào cache

Trong hình 2a, mỗi địa chỉ trong bộ nhớ chỉ có thể

được chứa trong duy nhất một cache line Điều này sẽ

rất thuận lợi khi truy xuất vì cache line chứa địa chỉ cần

tìm, nếu có, là duy nhất Tuy nhiên, khi có nhiều địa

chỉ đáng lẽ ra được lưu trong cùng một cache line được

sử dụng thì chỉ có tối đa một địa chỉ được lưu lại trong

cache, điều này làm giảm hiệu quả của cache Để hạn

chế điều này, một giải pháp được đề nghị trong hình 2c,

mỗi địa chỉ có thể được lưu trong bất kỳ cache line nào,

miễn là cache line đó đang trống Điều này rất thuận

lợi trong lưu trữ nhưng lại tốn thời gian trong khâu tìm

kiếm Vì không biết địa chỉ mà CPU yêu cầu cầu đã có

trong cache hay chưa, nên ta phải duyệt toàn bộ cache

line để có câu trả lợi Qua đó, ta nhận thấy khả năng lưu

trữ và tốc độ truy xuất, một lần nữa, lại tỉ lệ nghịch với

nhau

Một giải pháp vừa đảm bảo tốc độ truy xuất và khả

năng lưu trữ được minh họa trong hình 2b Bộ nhớ cache

được chia làm đôi, khi đó, mỗi địa chỉ trong cache có

thể được chứa trong 2 cache line Ở một khía cạnh nào

đó, ta có thể nói điều này làm tăng sức chứa lên gấp đôi

so với trường hợp ánh xạ trực tiếp và giảm thời gian đi

một nửa khi so với trường hợp hỗ trợ toàn phần Tổng

quát, ta có thể chia cache thành k phần, mỗi phần chứa

m cache line Khi đó, ta gọi tập hợp m cache line trong

một phần là một way, nói cách khác, chúng ta có k way

Một địa chỉ trong bộ nhớ có thể thuộc vào một cache line

nào đó trong một way bất kỳ, chúng ta gọi một tập hợp

các khả năng như vậy là một cache set Do đó, chúng

ta có m cache set, bằng đúng số cache line trong một

way Khi muốn kiểm tra xem một địa chỉ đã có trong cache hay chưa, chúng ta chỉ cần tìm trong set tương ứng Đây cũng là cách tổ chức phổ biến nhất hiện nay bởi các hãng lơn như Intel hay AMD, trong đó k thường nhận giá trị 4 hoặc 8, nghĩa là tổ chức theo kiểu 4-way hoặc 8-way

Trong cache được tổ chức theo kiểu k-way, tuy kích thước của một set là không nhỏ, nhưng không chắc chứa

đủ tất cả các dữ liệu cần thiết cho CPU tại một khoảng thời gian xác định Một vấn đề rất tự nhiên nảy sinh, khi set đã chứa đầy dữ liệu nhưng chúng ta cần lưu thêm một địa chỉ nữa, vậy cần loại bỏ địa chỉ nào hiện tại Có rất nhiều chiến lược thay thế được dùng trong thực tế như: chọn ngẫu nhiên một địa chỉ để loại ra, dành chỗ cho địa chỉ mới; chọn địa chỉ có số lần sử dụng ít nhất để loại ra; First In First Out (FIFO) [?][?]; hay chọn địa chỉ ít

sử dụng nhất trong thời gian gần đây để loại bỏ (LRU) [?][?] Mỗi chiến lược đều có ưu điểm riêng, không

chiến lược nào là tốt toàn diện, và đây cũng chỉ là theo

dự đoán, không ai dám chắc địa chỉ vừa loại bỏ có được

sử dụng trong tương lai gần hay không Tuy nhiên, theo khảo sát của chúng tôi, chiến lược LRU được sử dụng khá phổ biến Đặc biệt là trong cache L2, ở đó dữ liệu Instr và data được lưu trữ chung Theo hoạt động căn bản nhất của vi xử lý thì CPU đọc Instr vào và có xu hướng không đọc hay ghi lên địa chỉ đó nữa mà có xu hướng đọc hoặc ghi lên các địa chỉ data Khi đó các địa chỉ chứa Instr sẽ có thể bị thay thế một cách thích đáng nếu sử dụng chiến lược LRU

C Phân loại Cache theo cấu trúc

Qua phần II-A, chúng ta biết rằng cache có nhiều mức khác nhau, mức càng cao thì dung lượng càng lớn và tốc

độ truy xuất càng chậm Điều này có nghĩa L2 lớn hơn rất nhiều so với L1, và L3 lớn hơn hẳn so với L2 Một câu hỏi tự nhiên đặt ra là: liệu L2 có chứa L1 hay không?

Lý do là gì, và làm thế được lợi gì? Như đã trình bày ngay từ đầu, chúng tôi tập trung vào tìm hiểu và nghiên cứu về chip xử lý đa nhân, nên phần này chúng tôi sẽ bỏ qua việc phân tích cấu trúc cache trong chip một nhân Một phân cấp đơn giản được cho trong hình 3 Thông thường, khi có 2 mức cache, mỗi core có một module cache L1 riêng, và cùng nhau chia sẻ một module L2 Trong trường hợp này, chúng ta có 3 sự lựa chọn cho mối quan hệ giữa L1 và L2 [?] Cách thứ nhất: L2 bao

gồm L1, tất cả những địa chỉ có trong L1 đều phải có trong L2 [?] Điều này thật sự rất hữu ích, bởi vì L2

chứa cả L1-A và L1-B Khi CPU yêu cầu L1-A một địa chỉ mà L1-A không có địa chỉ này nhưng L1-B có, nếu L2 không chứa hai module L1 thì sẽ rất khó để L1-A lấy được thông tin mà CPU yêu cầu Ở đây, vì L2 chứa

Trang 4

Hình 3: Hai module cache L1 cùng chia sẻ một module

L2

cả L1-B nên sẽ chứa luôn dữ liệu mà L1-A đang cần

Tuy thuận lợi cho truy xuất là vậy, nhưng cách tổ chức

này có một nhược điểm rất lớn: tốn chi phí lưu trữ Mọi

dữ liệu lưu ở một mức cache nào đó đều được lưu lại

trong những mức cache cao hơn, đây thật sự là một lãng

phí lớn trong khi kích thước của các module cache rất

nhỏ Bên cạnh đó, cách làm này cần phải đảm bảo một

ràng buộc để tận dụng được ưu thế của mình, đó là dung

lượng L2 phải không được nhỏ hơn tổng dung lượng của

các module L1 Cách lưu trữ thứ hai khắc phục nhược

điểm của cách thứ nhất: Tất cả những gì được chứa trong

L1 thì không được chứa trong L2, và tương tự cho các

module cao hơn [?] Cách lưu trữ này tận dụng tối đa

không gian lưu trữ, nhưng sẽ rất tốn chi phí về băng

thông trên chip khi dữ liệu cần thiết đang chứa ở một

module cache cùng cấp Một cách tổng quan, cách thứ

nhất tận dụng tối đa thời gian truy xuất, và cách thứ hai

tận dụng tối đa không gian lưu trữ, ưu điểm của cách

làm này là nhược điểm của cách còn lại Trong thực tế,

ngoài hai cách này, người ta còn có cách thứ ba: dữ liệu

có ở L1 thì có thể có hoặc có thể không có ở L2 [?][?].

Tuy không có ưu điểm rõ ràng như hai cách trên, nhưng

giải pháp này cũng không vướng phải những nhược điểm

tương ứng

D Phân loại Cache theo chiến lược ghi

Mọi thao tác mà CPU tác động lên bộ nhớ chính đều

thông qua bộ nhớ cache với vai trò trung gian Khi CPU

muốn ghi vào bộ nhớ chính, dữ liệu sẽ được ghi tạm lên

cache, và cache sẽ chọn thời điểm tốt nhất để ghi vào

bộ nhớ chính Về cơ bản, có 2 thời điểm cache ghi dữ

liệu vào bộ nhớ chính, tương ứng với hai kiểu hoạt động

khác nhau [?] Kiểu thứ nhất tốn thời gian, ghi lại nhiều

lần nhưng rất an toàn, không lo có sai sót: ghi dữ liệu

xuống bộ nhớ chính ngay sau khi CPU ghi xuống cache

Trong trường hợp chúng ta cần ghi nhiều lần lên một địa

chỉ nào đó, phương pháp này tỏ ra kém hiệu quả vì tốn

băng thông hệ thống kết nối trên chip Trường hợp thư

hai tối ưu hơn, nhưng cũng phức tạp hơn: chờ đến khi

địa chỉ đang chứa dữ liệu ghi bị loại ra để lấy chỗ cho địa chỉ mới thì mới ghi vào bộ nhớ chính [?] Cho dù

được ghi chép nhiều lần lên cùng địa chỉ, nhưng vì địa chỉ được lưu trên cache nên việc ghi dữ liệu chiếm rất

ít thời gian Vấn đề nảy sinh khi nhiều chip xử lý cùng ghi, hoặc một số chip đọc và một số chip ghi, khi đó,

ta cần đến một cache coherency protocol [5], nghĩa là một cách thức để đảm bảo sự toàn vẹn và thống nhất dữ liệu Chi tiết về các giao thức này chúng tôi không trình bày ở đây, bạn đọc nếu muốn tìm hiểu có thể tham khảo trong [6], [7], [8]

III MÔ PHỎNGCMPBẰNGMULTI2SIM Multi2Sim (M2S) [?] là một công cụ rất linh hoạt để

người dùng tìm hiểu về CMP M2S là một phần mềm mã nguồn mở, cho phép người dùng tạo ra, thay đổi và can thiệp đến mức sâu nhất đối với CMP Tuy nhiên, chúng tôi không trình bày tất cả những gì M2S cung cấp mà chỉ giới hạn ở những phần thiết kế tổ chức bộ nhớ cache M2S thật sự là một môi trường bắt đầu không thể tốt hơn cho những ai có ý định tìm hiểu và nghiên cứu về CMP Chúng ta có thể giả lập một CMP rất đơn giản bằng các file INI dưới dạng text Một CMP gồm có nhiều nhân, nhiều cache ở các mức khác nhau, mạng nội bộ nối các module lại với nhau, và cuối cùng là bộ nhớ chính Tất cả những phần này được trình bày chi tiết trong những mục tiếp theo

A Phần nhân

Cấu hình phần nhân là một phần quan trọng trong việc giả lập một CMP Những gì chúng ta cần làm là viết các dòng cấu hình vào tập tin mem-config Nội dung chúng

ta viết được cho trong bảng I

[Entry <Tên>] Tên của nhân Type Loại nhân (CPU hay GPU) Arch Kiến trúc tập lệnh Core Số thứ tự của nhân trong CMP Thread Số lượng tiểu trình chạy trên nhân ComputerUnit Số thứ tự của đơn vị tính toán trong GPU DataModule Nơi nhận lệnh

InstModule Nơi nhận dữ liệu Module Đơn vị phục vụ cho GPU Bảng I: Cấu hình cho một nhân CMP

Những thành phần bắt buộc phải có, nếu chúng ta không thực hiện cấu hình thì cấu hình mặc định sẽ được

sử dụng Do đó, trong các tập tin INI, chúng ta chỉ cấu hình những tham số thật cần thiết hoặc những phần chúng ta quan tâm mà không cần bận tâm quá nhiều về

hệ thống

Trang 5

B Phần bộ nhớ

Để cấu hình cho các module của bộ nhớ, chúng ta

cần hai bước : cấu hình hình dạng và cấu hình cho từng

module Trước hết là phần cấu hình hình dạng Bảng II

cho ta chi tiết cấu hình Cũng như cấu hình cho nhân,

phần này được thực hiện trong tập tin mem-config

[CacheGeometry <Tên>] Tên hình dạng

Set Số lượng set trong module đang xét

Assoc Số lượng Associative, hay số way

BlockSize Kích thước 1 block (line)

Policy Chính sách thay thế

MSHR Số lượng truy cập cache tối đa

tại một thời điểm Port số lượng cổng

Bảng II: Cấu hình hình dạng bộ nhớ

Phần hình dạng này cho phép chúng ta xác định những

tham số cơ bản nhất, chung nhất cho một mức cache hay

một loại module nào đó Ví dụ như dòng đầu tiên có nội

dung "CacheGeometry L1" thì đây là các tham số chung

cho tất cả các module trong CMP Khi đó, các module

L1 trong CMP có cùng số set, assoc, cùng kích thước,

cùng chính sách thay thế Một điều lưu ý là tham số

Policy chỉ được nhận một trong ba giá trị: LRU, FIFO

hoặc Random

Sau khi đã có những tham số chung cho các mức trong

bộ nhớ, bảng III cung cấp cho chúng ta các tham số cần

thiết để cấu hình hoàn chỉnh cho một module

Type Loại module (cache, bộ nhớ chính)

Geometry Hình dạng

LowNetwork Mạng bên dưới

LowNetworkNode Nút mạng bên dưới

HighNetwork Mạng bên trên

HighNetworkNode Nút mạng bên trên

LowModules Các module phía dưới

BlockSize Kích thước 1 block

Ports Số lượng cổng

DirectorySize Kích thước Directory

DirectoryAssoc Số way của Directory

AddressRange Khoảng địa chỉ có thể

lưu trong module đang xét Bảng III: Cấu hình các module của bộ nhớ

C Phần mạng nội bộ

Mạng nội bộ là mạng nối các module trong cùng một

mức cache hay giữa các mức cache với nhau Để cấu

hình một mạng, chúng ta làm việc trên hai tập tin:

mem-config chứa những thông tin cơ bản về mạng và tâp tin

net-config chứa nội cung chi tiết cho từng mạng Bảng

IV cung cấp các tham số cơ bản để cấu hình một mạng nội bộ trong tập tin mem-config

Tham số Ý nghĩa [Network <Tên>] Tên mạng DefaultInputBufferSize Kích thước vùng nhớ tạm

cho việc đọc dữ liệu DefaultOutputBufferSize Kích thước vùng nhớ tạm

cho việc ghi dữ liệu DefaultBandwidth Băng thông Bảng IV: Cấu hình cơ bản cho mạng

Để cấu hình chi tiết cho mạng, chúng ta can thiệp vào tập tin net-config Tập tin này gồm các lệnh trong bảng

IV và được bổ sung thêm các tham số trong bảng V trong trường hợp mạng phức tạp

[Network.<Tên mạng>.Node.<Tên>] Tên của nút

[Network.<Tên mạng>.Link.<Tên>] Tên của liên kết

Source Nút nguồn của liên kết Dest Nút đích của liên kết Type Loại liên kết

(một chiều hay hai chiều) Bảng V: Cấu hình chi tiết cho mạng

Như vậy, chúng ta đã có mọi tham số cần thiết để cấu hính ra một CMP cho riêng mình Phần tiếp theo

sẽ cung cấp cho chúng ta phương tiện để đánh giá một thiết kế CMP có hiệu quả hay không

D Đánh giá hiệu năng khi thực hiện mô phỏng bằng Multi2Sim

Để đánh giá hiệu quả của một chip nói chung và một CMP nói riêng, chúng ta cần chạy thử một số chương trình ứng dụng nào đó để có được kết quả thực tế nhất Trong nghiên cứu và cả trong công nghiệp, những chương trình chuyên dùng để kiểm tra hiệu quả của chip được gọi là benchmark Có rất nhiều benchmark khác nhau, phù hợp với các mục đích khác nhau Chúng tôi chọn benchmark Splash-2 để kiểm tra hiệu quả khi thiết

kế CMP trên M2S Splash-2 là một gói benchmark gồm

11 benchmark khác nhau Tất cả chúng đều là các tập tin thực thi nhằm giải quyết các vấn đề kinh điển trong lý thuyết tính toán song song như: N-Body, LU, Cholesky Factorization [1][?]

IV THỬ NGHIỆMMULTI2SIM VÀO THIẾT KẾCMP

A Thiết kế

Trước tiên, chúng ta cần một sơ đồ cấu trúc cho CMP Một thiết kế được đề nghị trong hình 4

Trang 6

Hình 4: Thiết kế CMP

CMP mà chúng tôi đề nghị có 8 nhân, tương ứng với

đó là 8 module data-L1 được ký hiệu d0 đến d7 và 8

module inst-L1 được ký hiệu i0 đến i7 Mỗi nhóm gồm

4 cặp module L1 data - inst cùng chia sẻ một module

L2 Bên canh đó, bộ nhớ chính được chia thành 4 phần

(4 banks) bằng phương pháp xen kẽ (interleave) Những

phần này được liên kết với các module L2 bởi một mạng

nội bộ dạng vòng

B Cấu hình

Trước tiên, chúng ta cấu hình phần hình dạng cho các

mức cache, chi tiết như trong hình 5

Hình 5: Cấu hình phần hình dạng cho các mức cache

Hình 6 cho chúng ta cấu hình của một cặp module

L1 data và L1 inst Bảy cặp còn lại cấu hính hoàn toán

tương tự

Hình 6: Cấu hình cho các module L1

Trong hình 7, các module L2 được cấu hình với dung

lượng lớn hơn nhiều so với các module L1

Hình 7: Cấu hình cho các module L2

Các module của bộ nhớ chính được cấu hình tương tự trong hình 8 Phần địa chỉ sử dụng phương pháp xen kẽ với kích thước các khoảng xen kẽ là 64 bytes, bằng với dung lượng của một blocksize trong bộ nhớ chính

Hình 8: Cấu hình cho các module bộ nhớ chính

Đến đây, phần cấu hình cho các module đã hoàn tất Tiếp theo là phần cấu hình cho các nhân Việc cấu hình các nhân là tương tự nhau nên chúng tôi chỉ trình bày cấu hình cho một nhân trong hình 9

Cuối cùng, phần cấu hình cho mạng nội bộ được trình bày trong hình 10 Cấu hình một mạng phải hoàn tất rất nhiều chi tiết nhỏ về nút mạng và các liên kết, do khuôn khổ bài báo có giới hạn nên chúng tôi chỉ trình bày tiêu

Trang 7

Hình 9: Cấu hình cho các nhân

biểu một số phần

(a) Tổng quan về mạng (b) Cấu hình nút

(c) cấu hình liên kết

Hình 10: Cấu hình cho mạng nội bộ

C Chạy mô phỏng và thống kê kết quả

Đầu tiên, chúng tôi muốn tìm một mức dung lượng

L1, và L2 tối ưu nhất cho Splash-2 Hình 11 cho ta

thấy thống kê về tỷ lệ cache miss ở L1 theo thay

đổi theo dung lượng cache L1 và L2 Dễ hiểu rằng

khi dung lượng cache L1 tăng lên thì tỷ lệ miss ở

L1 sẽ giảm Trục hoành là dung lượng của cache

L1/L2 tương ứng là: 8K/64K, 16K/128K, 32K/256K,

64K/512K, 128K/1024K, 256K/2048K Từ kết quả trên

hình 11, chúng ta thấy khi dung lượng L1 tăng lên đến

64K thì tỷ lệ cache miss không giảm nữa mà đạt tới mức

bão hoà Điều này chứng tỏ các ứng dụng trong Splash-2

có không gian địa chỉ làm việc nằm trong tầm 64 KB

Do đó trong các bước mô phỏng tiếp theo, chúng tôi

chọn sử dụng dung lượng cache L1 bằng 64 KB

Tiếp theo, chúng tôi chạy mô phỏng nhiều lần cho tất

cả 11 chương trình benchmark trong Splash-2 với thiết

kế đã trình bày ở phần trước Ứng với mỗi chương trình,

chúng tôi cho cả 8 nhân cùng chạy, mỗi nhân chạy một

tiểu trình giải quyết một phần của bài toán Với mục tiêu

xem xét hiệu quả của phân cấp bộ nhớ, chúng tôi quan

tâm đến các thông số HitRatio và MissRatio, chính là

tỉ lệ truy xuất dữ liệu thành công và thất bại ở bộ nhớ

Hình 11: Sự biến thiên của MissRatio khi thay đổi dung lượng cache

cache Đầu tiên, chúng ta cùng xem xét HitRatio trung bình tại các cache L1, ứng với 8 nhân của CMP

Hình 12: HitRatio ở mức L1 tại các cache tương ứng với

8 nhân của chip CMP Một cách trực quan, hình 13 cho chúng ta nhận thấy ngay HitRatio ở các cache Inst, hay các cache chứa lệnh, cao hơn hẳn so với ở các cache dữ liệu Điều này được

lý giải như sau: trong kiến trúc X86, mỗi lệnh đều có

ít nhất một đối số, trong đó chủ yếu là các lệnh có 2 đối số Do đó, số lượng lệnh trong một chương trình ít hơn nhiều, có khi chỉ bằng phân nửa số lượng địa chỉ

dữ liệu Điều này dẫn đến cache dữ liệu nhanh đầy hơn,

số địa chỉ bị loại ra cũng nhiều hơn dẫn đến nhân phải truy xuất xuống bộ nhớ chính để lấy dữ liệu tại địa chỉ

đó trong tương lai khi cần

Tiếp theo, chúng ta cùng xem xét MissRatio tại các mức cache theo các chương trình khác nhau Những chương trình khác nhau sẽ chứa những lệnh và dữ liệu khác nhau, do đó, kết quả sẽ rất khác nhau giữa các chương trình Chúng ta cùng xem hình 13 để thấy sự khác biệt này

Trong nhiều trường hợp, chúng ta có thể quan sát được

dễ dàng MissRatio ở L2 là cao nhất, và L1-Inst là thấp nhất Benchmark thứ 9 - Raytrace là một ngoại lệ khi MissRatio ở L1 rất cao Lý do là chương trình Raytrace làm việc trên một kích thước dữ liệu lớn và có mức

độ rời rạc cao hơn so với các chương trình khác trong Splash-2 Cache L2 có tỉ lệ MissRatio cao nhất cũng là

Trang 8

Hình 13: MissRatio ở các mức cache khi chạy 11

benchmark trong Splash-2

điều dễ hiểu khi L1 là nơi chứa các lệnh và dữ liệu phổ

biến nhất, những gì lưu ở L2 có mức độ phổ biến thấp

hơn nên khả năng tái truy xuất cũng thấp hơn, từ đó dẫn

đến MissRatio tăng

Để phân tích sự cân bằng của Splash-2 trong việc sử

dụng nguồn lực trên chip, chúng tôi thực hiện thí nghiệm

như trên hình 14 và 15 Hai hình này thể hiện tương ứng

phần trăm yêu cầu đọc và ghi từ các nhân trên chip Kết

quả trên cả 2 hình cho thấy các tác vụ thực thi được

phân chia một cách cân bằng giữa các nhân xử lý Riêng

nhân xử lý số 1 luôn có tỷ lệ truy xuất bộ nhớ cao vì

đây là nhân mặc định là nhân chủ, ngoài việc thực hiên

riêng tác vụ được phân, nhân này sẽ thực hiện việc quản

lý toàn bộ chương trình

Hình 14: Phân bố lệnh Read theo các nhân của CMP

Hình 15: Phân bố lệnh Write theo các nhân của CMP

D Thảo luận về kết quả

Phần IV-C chỉ trình bày các kết quả một cách trực quan, chúng ta sẽ thảo luận chi tiết hơn về kết quả Tính toán cụ thể cho ta các kết quả trong bảng VI

Cache HitRatio L1-Inst 98.5 % L1-Data 90.8 % L1-Average 94.7 % L2 86.6 % Bảng VI: HitRatio ở các mức cache

Từ bảng VI, chúng ta dễ dàng tính được tỉ lệ truy xuất thất bại ở cả 2 mức cache là 0.7%, nghĩa là cache đã

hỗ trợ CMP trong việc truy xuất bộ nhớ ở 99.3% trường hợp Đây thật sự là một con số rất ấn tượng

V KẾT LUẬN Nghiên cứu này đã trình bày có kết hợp thực nghiệm việc thiết kế vi xử lý đa nhân sử dụng Multi2Sim Chúng tôi cũng đã sử dụng benchmark chuẩn Splash-2 để đánh giá thiết kế CMP và từ đó đánh giá một số đặc tính của Splash-2 như dung lượng tối ưu của cache L1 và L2 để thực thi Splash-2, sự phân chia tác vụ của Splash-2 lên các nhân trong hệ thống Kết quả cho thấy sự phân bố tác vụ khá đều của Splash-2 lên 8 nhân của hệ thống

và hệ thống tối ưu về hiệu suất ở dung lượng cache L1 bằng 64 KB

VI CÁM ƠN Nghiên cứu này được tài trợ một phần kinh phí từ

đề tài cấp nhà nước theo hợp đồng số 01/2011/HD-KHCN/ICDREC

TÀI LIỆU [1] IBM Research Laboratoty “64-Bit CPUs: Alpha, SPARC, MIPS, and POWER,” PC Magazine February 21, 2002

[2] Sandeep Shukla et al "A Brief History of Multiprocessors and EDA" Design and Test of Computer Vol 28, issue 03, pp: 96 May/June 2011

[3] W Wolf, “The future of multiprocessor systems-on-chips” Proc 41st Annu Des Autom Conf pp 681–685 2004

[4] D E Culler, J P Singh, and A Gupta Parallel Computer Architecture: A Hardware/Software Approach San Francisco, CA: Morgan Kaufmann 1999

[5] Nathan Blinker et al The Gem5 Simulator ACM SIGARCH Computer Architecture News, 2011

[6] Rafael Ubal and David Kaeli et al “The Multi2Sim Simulation Framework: A CPU-GPU Model for Heterogeneous Computing” The 20st International Conference on Parallel Architectures and Compilation Techniques (PACT) 2011

[7] Doug Burger and Todd M Austin "The SimpleScalar Tool Set, Version 2.0" University of Wisconsin-Madison Computer Sciences Department Technical Report No 1342 June, 1997

Trang 9

[8] Christian Bienia, Sanjeev Kumar, Jaswidner Pal Singh and Kai

Li "The PARSEC Benchmark Suite: Characterization and

Ar-chitectural Implications" Technical Report TR-811-08, Princeton

University January 2008

[9] Major Bhadauria, Vince Weaver and Sally A McKee "A

Char-acterization of the PARSEC Benchmark Suite for CMP

De-sign" Technical Report CSL-TR-2008-1052, Cornell University.

September 2008

[10] Barrow-Williams, Nick, Christian Fensch, and Simon Moore.

"A communication characterisation of Splash-2 and Parsec."

Workload Characterization, 2009 IISWC 2009 IEEE

Interna-tional Symposium on IEEE, 2009

[11] Steven Cameron Woo et al "The SPLASH-2 Programs:

Char-acterization and Methodological Considerations" Proceedings

of the 22nd Annual International Symposium on Computer

Architecture June 1995

[12] Maurice V Wilkes "Moore’S law and the future" Technical

report 2002

[13] Clements, Alan "Principles of Computer Hardware" Oxford

University press 2006

[14] Toy, Wing and Zee, Benjamin "Computer Hardware/Software

Architecture" Prentice Hall 1986

[15] Hennessy, John and David A Patterson "Patterson, David.

Computer Architecture: A Quantitative Approach (Fifth ed.)".

Elsevier publishing house 2012

[16] Rajeev Balasubramonian et al "Memory Hierarchy

Reconfigu-ration for Energy and Performance in General Purpose Processor

Architectures" Proceeding MICRO 33 Proceedings of the 33rd

annual ACM/IEEE international symposium on

Microarchitec-ture Pages 245-257 2000

[17] Harvey G Cragon "Memory systems and pipelined processors,

Chapter 4.1: Cache Addressing, Virtual or Real" 1996

[18] Nader Khammassi and Jean-Christophe Le Lannn "Design and

implimentation of a cache hierachy aware task scheduling for

parallel loops on multicore architectures" Computer Science and

Information Technology, pp 427-439 2014

[19] Fang Zheng, Chitra Venkatramani, Rohit Wagle and Karsten

Schwan "Cache Topology Aware Mapping of Stream Processing

Applications onto CMPs" IEEE 33rd International Conference

on Distributed Computing Systems 2013

[20] Sukumar Ghosh "Cache memory" Lecture notes in Computer

Organization course 2015

[21] Mark D.Hill and Alan Jay Smith "Evaluating Associativity in

CPU Caches" IEEE Transactions on Computers Vol 38 1989

[22] Paul Genua "A Cache Primer" Freescale Secmiconductor 2004

[23] Sangyeun Cho and Lory Al Moakar "Augmented FIFO cache

replacement policies for low power embedded processor"

Jour-nal of Circuits, Systems, and Computers, Vol 18, No 6, pp

1081–1092 2009

[24] Nan Guan, Xinping Yang, Mingsong Lv and Wang Yi "FIFO

Cache Analysis for WCET Estimation: A Quantitative

Ap-proach" Proc of DATE 2013

[25] O’Neil, Elizabeth J O’Neil, Patrick E Weikum, Gerhard.

"The LRU-K Page Replacement Algorithm for Database Disk

Buffering" Proceedings of the ACM SIGMOD International

Conference on Management of Data, pp 297–306 1993

[26] Nimrod Megiddo and Dharmendra S Modha "Outperforming

LRU with an Adaptive Replacement Cache Algorithm"

Com-puter journal Published by the IEEE ComCom-puter Society 2004

[27] Natalie Enright and Dana Vantrease "To Include or Not To

Include: The CMP Cache Coherency Question" Final report

CS838

[28] Aamer Jaleel, Eric Borch, Malini Bhandaru, Simon C Steely

Jr, and Joel Emer "Achieving Non-Inclusive Cache Performance

With Inclusive Caches Temporal Locality Aware (TLA) Cache

Management Policies" In International Symposium on Microar-chitecture (MICRO), Atlanta, Georgia December 2010 [29] Ying Zheng, Brian T Davis and Matthew Jordan "Performance Evaluation of Exclusive Cache Hierarchies" Performance Anal-ysis of Systems and Software, IEEE International Symposium on

- ISPASS 2004 [30] Norman P Jouppi "Cache Write Policies and Performance" Proc 20th International Symposium on Computer Architecture (ACM Computer Architecture News), pp 191-201 1993 [31] Gernot Heiser "Cache write policy" Lecture notes in Advanced Operating Systems course UNSW 2002

[32] Daniel J Sorin, Mark D Hill, David A Wood "A Primer on Memory Consistency and Cache Coherence" Morgan Claypool Publishers 2011

[33] Hesham Altwaijry, Diyab S Alzahrani "Improved-MOESI Cache Coherence Protocol" Arabian Journal for Science and Engineering, Volume 39, Issue 4, pp 2739-2748 2014 [34] F J JIMÉNEZ et al "Teaching the cache memory coherence with the MESI protocol simulator" Spain.

[35] K Hwang and Z Xu "Scalable Parallel Computing: Tech-nology, Architecture, Programming" McGraw-Hill, New York 1998.

Ngày đăng: 27/04/2022, 10:18

HÌNH ẢNH LIÊN QUAN

Hình 1: Phân cấp bộ nhớ - Nghiên cứu và thiết kế chip xử lý đa nhân sử dụng Multi2Sim
Hình 1 Phân cấp bộ nhớ (Trang 2)
Trong hình 2a, mỗi địa chỉ trong bộ nhớ chỉ có thể được chứa trong duy nhất một cache line - Nghiên cứu và thiết kế chip xử lý đa nhân sử dụng Multi2Sim
rong hình 2a, mỗi địa chỉ trong bộ nhớ chỉ có thể được chứa trong duy nhất một cache line (Trang 3)
Hình 3: Hai module cache L1 cùng chia sẻ một module L2 - Nghiên cứu và thiết kế chip xử lý đa nhân sử dụng Multi2Sim
Hình 3 Hai module cache L1 cùng chia sẻ một module L2 (Trang 4)
Cấu hình phần nhân là một phần quan trọng trong việc giả lập một CMP. Những gì chúng ta cần làm là viết các dòng cấu hình vào tập tin mem-config - Nghiên cứu và thiết kế chip xử lý đa nhân sử dụng Multi2Sim
u hình phần nhân là một phần quan trọng trong việc giả lập một CMP. Những gì chúng ta cần làm là viết các dòng cấu hình vào tập tin mem-config (Trang 4)
Hình 13: MissRatio ở các mức cache khi chạy 11 benchmark trong Splash-2 - Nghiên cứu và thiết kế chip xử lý đa nhân sử dụng Multi2Sim
Hình 13 MissRatio ở các mức cache khi chạy 11 benchmark trong Splash-2 (Trang 8)
Hình 15: Phân bố lệnh Write theo các nhân của CMP - Nghiên cứu và thiết kế chip xử lý đa nhân sử dụng Multi2Sim
Hình 15 Phân bố lệnh Write theo các nhân của CMP (Trang 8)
Hình 14: Phân bố lệnh Read theo các nhân của CMP - Nghiên cứu và thiết kế chip xử lý đa nhân sử dụng Multi2Sim
Hình 14 Phân bố lệnh Read theo các nhân của CMP (Trang 8)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w