1. Trang chủ
  2. » Công Nghệ Thông Tin

Đánh giá hiệu năng phần mềm xử lý song song trên hệ thống kết hợp CPU và GPU

75 379 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 75
Dung lượng 2,66 MB

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

Nội dung

Lý do chọn đề tài Với sự phát triển của công nghệ được thách thức bởi lớp bài toán lớn cần giải quyết trong nhiều lĩnh vực của đời sống xã hội như: khai phá dữ liệu, mô phỏng các hiện t

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

-* -

ĐỀ TÀI TIỂU LUẬN

AN TOÀN CÁC HỆ THỐNG THÔNG TIN

Giảng viên hướng dẫn:

PGS.TS Nguyễn Linh Giang

LỜI NÓI ĐẦU

VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

-* -

NGUYỄN VĂN QUYẾT

ĐÁNH GIÁ HIỆU NĂNG PHẦN MỀM XỬ LÝ SONG SONG

TRÊN HỆ THỐNG KẾT HỢP CPU VÀ GPU

LUẬN VĂN THẠC SĨ KỸ THUẬT CÔNG NGHỆ THÔNG TIN

NGƯỜI HƯỚNG DẪN

PGS.TS HUỲNH QUYẾT THẮNG

Trang 2

LỜI CẢM ƠN

Để hoàn thành luận văn tốt nghiệp “Đánh giá hiệu năng phần mềm xử lý song song

trên hệ thống kết hợp CPU và GPU”, lời đầu tiên em xin gửi lời cảm ơn sâu sắc nhất tới

PGS.TS Huỳnh Quyết Thắng, người đã hướng dẫn và chỉ bảo em tận tình trong suốt thời gian làm khóa luận

Em xin chân thành cảm ơn TS Hồ Khánh Lâm, Trưởng bộ môn KTMT – Khoa CNTT – Trường ĐHSP Kỹ Thuật Hưng Yên, đã cung cấp cho em các kiến thức nền tảng để thực hiện đề tài

Em cũng xin gửi lời cảm ơn tới TS Nguyễn Hữu Đức và các cán bộ trong Trung tâm tính toán hiệu năng cao – Trường ĐHBK Hà Nội, đã dành thời gian hướng dẫn cho em cách thử nghiệm chương trình và đánh giá hiệu năng hệ thống xử lý song song

Cuối cùng, em xin gửi lời cảm ơn sâu sắc tới các thầy cô, đồng nghiệp và người thân trong gia đình đã động viên, khích lệ em trong quá trình thực hiện luận văn

Học viên

Nguyễn Văn Quyết

Trang 3

LỜI CAM ĐOAN

Với mục đích học tập, nghiên cứu để nâng cao trình độ chuyên môn nên tôi đã làm luận văn này một cách nghiêm túc và hoàn toàn trung thực

Trong luận văn, tôi có sử dụng tài liệu tham khảo của một số tác giả, tôi đã nêu trong phần tài liệu tham khảo ở cuối luận văn

Tôi xin cam đoan và chịu trách nhiệm về nội dung, sự trung thực trong luận văn tốt nghiệp Thạc sĩ của mình

Hà Nội, tháng 12 năm 2012

Học viên

Nguyễn Văn Quyết

Trang 4

MỤC LỤC

DANH MỤC CÁC KÝ HIỆU, CÁC TỪ VIẾT TẮT 6

DANH MỤC CÁC BẢNG 7

DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ 8

MỞ ĐẦU 10

1 Lý do chọn đề tài 10

2 Lịch sử nghiên cứu 10

3 Mục đích nghiên cứu 11

4 Đối tượng nghiên cứu 11

5 Phạm vi nghiên cứu 11

6 Phương pháp nghiên cứu 12

TỔNG QUAN VỀ HỆ THỐNG XỬ LÝ SONG SONG VÀ ĐÁNH CHƯƠNG 1: GIÁ HIỆU NĂNG 13

Tính toán song song 13

1.1 1.1.1 Khái niệm tính toán song song 13

1.1.2 Các hình thức song song 14

1.1.3 Tăng tốc tính toán song song sử dụng GPU 16

Máy tính song song 21

1.2 1.2.1 Mô hình máy tính song song 21

1.2.2 Phân loại máy tính song song 22

Lập trình song song với CUDA 26

1.3 1.3.1 Môi trường phát triển CUDA 26

1.3.2 Mô hình lập trình 30

1.3.3 Lập trình song song với CUDA C/C++ 37

1.3.4 Nguyên tắc tối ưu hóa hiệu năng 37

Vấn đề đánh giá hiệu năng phần mềm xử lý song song 39

1.4 1.4.1 Định nghĩa về đánh giá hiệu năng phần mềm 39

1.4.2 Mục đích của việc đánh giá hiệu năng phần mềm xử lý song song 40

1.4.3 Yêu cầu của bài toán đánh giá hiệu năng 40

GIẢI PHÁP KỸ THUẬT ĐÁNH GIÁ HIỆU NĂNG PHẦN MỀM CHƯƠNG 2: XỬ LÝ SONG SONG 42

Kỹ thuật phân tích mô hình bài toán 42 2.1

Trang 5

Kỹ thuật đo lường 44

2.3 2.3.1 Đo hiệu năng tính toán 44

2.3.2 Đo hiệu năng truy cập bộ nhớ 45

2.3.3 Đo hiệu năng truyền thông 46

Đánh giá kết quả đo hiệu năng 46

2.4 2.4.1 Đánh giá tốc độ xử lý 46

2.4.2 Đánh giá hiệu quả xử lý 48

ÁP DỤNG ĐÁNH GIÁ HIỆU NĂNG VÀO BÀI TOÁN N-BODY 49

CHƯƠNG 3: Mô tả bài toán N-Body 49

3.1 Phân tích mô hình bài toán N-Body 50

3.2 Song song hóa bài toán N-Body trên hệ thống kết hợp CPU và GPU 51

3.3 3.3.1 Tính lực giữa hạt-hạt (body-body) 51

3.3.2 Tính toán các lớp luồng (Tile Caculation) 53

3.3.3 Hợp nhất các lớp luồng vào các Thread Blocks 53

3.3.4 Định nghĩa một mạng lưới của khối luồng (Grid of Thread Block) 54

3.3.5 Mô phỏng bài toán với chế độ đồ họa 55

Thực hiện đo hiệu năng bài toán N-Body 58

3.4 3.4.1 Môi trường thử nghiệm 58

3.4.2 Đo hiệu năng tính toán với chế độ benchmark 59

3.4.3 Phân tích hiệu năng ứng dụng với Visual Profiler 61

ĐÁNH GIÁ KẾT QUẢ ĐO HIỆU NĂNG 66

CHƯƠNG 4: Đánh giá tốc độ xử lý 66

4.1 Đánh giá hiệu quả xử lý 67

4.2 Kết luận về hiệu năng 69

4.3 KẾT LUẬN 71

1 Kết quả đạt được của đề tài 71

2 Hạn chế của đề tài 71

3 Hướng phát triển của đề tài 71

PHỤ LỤC 73

TÀI LIỆU THAM KHẢO 75

Trang 6

DANH MỤC CÁC KÝ HIỆU, CÁC TỪ VIẾT TẮT

ALU Arithmetic Logic Unit Bộ xử lý số học logic

CPU Central Processing Unit Đươn vị xử lý trung tâm

CUDA Compute Unified Device

Architecture

Kiến trúc thiết bị tính toán hợp nhất

GPU Graphics Processing Unit Bộ xử lý đồ họa

SISD Single Instruction Stream,

Single Data Stream

Máy tính một dòng lệnh, một dòng số liệu

SIMD Single Instruction Stream,

Multiple Data Stream

Máy tính một dòng lệnh, nhiều dòng

số liệu MISD Multiple Instructions Stream,

Single Data Stream

Máy tính nhiều dòng lệnh, một dòng

số liệu

MIMD Multiple Instructions Stream,

Multiple Data Stream

Máy tính nhiều dòng lệnh, nhiều dòng số liệu

SM Streaming Multiprocessors Bộ đa xử lý luồng

Trang 7

DANH MỤC CÁC BẢNG

Bảng 1: So sánh một số đặc điểm của CPU và GPU 19

Bảng 2: Các đặc điểm của môi trường lập trình với CUDA 30

Bảng 3: Kết quả do thời gian xử lý của CPU và GPU trong bài toán N-Body 66

Bảng 4: Kết quả đo tốc độ tính toán trung bình trong chế độ xử lý đồ họa 68

Trang 8

DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ

Hình 1: Mô hình kiến trúc SISD 22

Hình 2: Mô hình kiến trúc SIMD 23

Hình 3: Mô hình kiến trúc MISD 23

Hình 4: Mô hình kiến trúc MIMD 24

Hình 5: Mô hình kiến trúc máy tính song song chia sẻ bộ nhớ 25

Hình 6: Mô hình kiến trúc máy tính song song phân tán 26

Hình 7: Mô hình kiến trúc Fermi 17

Hình 8: Minh họa số thanh ghi ALU trên GPU 18

Hình 9: So sánh sự tăng tốc về tốc độ xử lý CPU và GPU 20

Hình 10: Minh họa tăng tốc băng thông bộ nhớ của CPU và GPU 21

Hình 11: Mô hình kiến trúc CUDA 28

Hình 12: Môi trường phát triển phần mềm với CUDA 29

Hình 13: Grid of Thread Blocks 33

Hình 14: Mô hình phân cấp bộ nhớ 35

Hình 15: Mô hình lập trình không đồng nhất 36

Hình 16: Mô hình tương quan giữa tốc độ xử lý và số bộ xử lý 47

Hình 17: Minh họa hệ N-Body trong không gian 3D 49

Hình 18: Minh họa Grid of Thread Blocks 55

Hình 19: Minh họa bài toán N-Body trên CPU với độ chính xác đơn 56

Hình 20: Minh họa bài toán N-Body trên CPU với độ chính xác kép 56

Hình 21: Minh họa bài toán N-Body trên CPU&GPU với độ chính xác đơn 57

Hình 22: Minh họa bài toán N-Body trên CPU&GPU với độ chính xác kép 57

Trang 9

Hình 23: Visual Profiler - Công cụ phân tích hiệu năng phần mềm xử lý song song 62

Hình 24: Cấu hình tham số đầu vào cho phần mềm Visual Profiler 63

Hình 25: Giao diện kết quả chạy phân tích hiệu năng ứng dụngN-Body 63

Hình 26: Chi tiết phân tích kết quả xử lý của ứng dụng N-Body 64

Hình 27: Kết quả chi tiết xử lý song song với N=4096 của bài toán N-Body 65

Hình 28: Minh hoạ kết quả đo thời gian xử lý trên CPU & GPU 67

Hình 29: Minh họa kết quả đo hiệu quả xử lý ở chế độ đồ họa với GPU 68

Trang 10

MỞ ĐẦU

1 Lý do chọn đề tài

Với sự phát triển của công nghệ được thách thức bởi lớp bài toán lớn cần giải quyết trong nhiều lĩnh vực của đời sống xã hội như: khai phá dữ liệu, mô phỏng các hiện tượng trong khoa học vũ trụ, Các lớp bài toán này vừa đòi hỏi đáp ứng thời gian thực vừa yêu cầu xử lý trên khối dữ liệu lớn Để giải quyết bài toán đó đòi hỏi các bộ xử lý phải có hiệu năng cao Và hệ thống máy tính song song ra đời với mục đích làm tăng khả năng tính toán của máy tính bằng cách kết hợp nhiều bộ xử lý tham gia đồng thời vào quá trình xử

lý Đó là sự kết hợp giữa các bộ xử lý của CPU và GPU

Hiện nay, việc xử lý song song không những chỉ thực hiện trên những siêu máy tính

mà có thể được thực hiện trên các trạm làm việc, máy tính cá nhân, mạng máy tính Nhưng hầu hết các phần mềm chạy trên máy tính này là những phần mềm xử lý tuần tự Bởi vậy cần xây dựng những phần mềm, cấu trúc dữ liệu cho phép xử lý một cách song song Để sử dụng một cách hiệu quả các ứng dụng phần mềm này, cần có giải pháp đánh giá hiệu năng của chúng trên các hệ thống máy tính song song

Trong khuôn khổ của khóa luận, áp dụng xử lý song song vào việc giảm thời gian tính lực tương tác giữa các body trong hệ mô phỏng N-body và thực hiện đánh giá hiệu năng của bài toán trên

2 Lịch sử nghiên cứu

Hiện nay trên thế giới, với sự phát triển mạnh mẽ của công nghệ cao, đã xây dựng được những hệ thống máy tính có khả năng tính toán rất lớn như siêu máy tính (xem phụ lục 1), tính toán lưới phục vụ cho việc nghiên cứu khoa học và các ứng dụng thực tế Bên cạnh đó các nhà sản xuất máy tính cũng luôn thay đổi công nghệ, cho ra những thế hệ máy tính có khả năng tính toán với tốc độ nhanh Hệ thống máy tính với chip đa lõi ngày càng nhiều, kết hợp với sự ra đời của thiết bị GPU đã hỗ trợ trong xử lý đồ họa và tính toán song song Để khai thác và sử dụng một cách hiệu quả các phần mềm xử lý song song trên hệ thống đó cần phải có các giải pháp nhằm đánh giá hiệu năng hệ thống Từ

Trang 11

cứu và đưa ra nhiều giải pháp cũng như công cụ để đánh giá hiệu năng phần mềm nói chung và phần mềm xử lý song song nói riêng

Tuy nhiên ở Việt Nam, thời điểm đầu khi máy tính song song ra đời, với thực tại các trung tâm nghiên cứu chưa đủ tiền để mua những máy tính lớn, trong khi đó nhu cầu có

hệ thống tính toán lớn lại rất cần thiết Một giải pháp là xây dựng hệ thống tính toán song song từ các máy tính hiện có và liên kết chúng lại tạo ra hệ thống tính toán lớn Khi đó, các bài toán xử lý bắt đầu được đưa vào thử nghiệm như: thám mã, xử lý dữ liệu khí tượng thủy văn…và nhiều công trình, bài báo khoa học đề cập đến vấn đề này đã được công bố Một trong những nới đầu tiên tại Việt Nam triển khai bài các dự án liên quan đến tính toán song song là Trung Tâm tính toán hiệu năng cao – Đại Học Bách Khoa Hà Nội (10/2001)

Vấn đề đánh giá hiệu năng phần mềm xử lý song song tuy không phải là mới nhưng việc ứng dụng các kết quả của nó vào trong thực tế hiện nay còn nhiều vấn đề để nghiên cứu

 Áp dụng đánh giá hiệu năng vào bài toán mô phỏng

4 Đối tƣợng nghiên cứu

Nghiên cứu tìm hiểu lý thuyết về máy tính song song, tính toán song song và lập trình

xử lý song song Nghiên cứu các giải pháp kỹ thuật đo hiệu năng Áp dụng đánh giá hiệu năng phần mềm xử lý song song qua bài toán mô phỏng N-Body

5 Phạm vi nghiên cứu

 Tổng quan về hệ thống xử lý song song và lập trình song song với CUDA C

Trang 12

 Xây dựng giải pháp kỹ thuật đánh giá hiệu năng phần mềm xử lý song song

 Sử dụng bài toán N-Body để mô phỏng và đánh giá hiệu năng

6 Phương pháp nghiên cứu

 Nghiên cứu tài liệu khoa học về hệ thống máy tính song song

 Nghiên cứu kỹ thuật lập trình song song với CUDA

 Nghiên cứu lý thuyết về đánh giá hiệu năng của phần mềm

 Mô phỏng xử lý song song trên bài toán N-Body

 Xây dựng giải pháp đánh giá hiệu năng của bài toán mô phỏng

Trang 13

TỔNG QUAN VỀ HỆ THỐNG XỬ LÝ SONG SONG VÀ ĐÁNH CHƯƠNG 1:

GIÁ HIỆU NĂNG

Tính toán song song

1.1

Tính toán song song thường được dùng để giải quyết các vấn đề hết sức phức tạp yêu cầu thời gian tính toán lớn hoặc làm việc với khối dữ liệu lớn như các bài toán dự báo thời tiết, mô phỏng tai nạn xe hơi, xây dựng các mô hình thương mại và các vấn đề khoa học như khai phá dữ liệu, trí tuệ nhân tạo, an toàn dữ liệu…Để giải quyết các bài toán trên, người ta đã nghiên cứu và đưa ra các phương pháp sau:

Phương pháp 1: Tăng tốc phần cứng bằng cách tăng tốc các bộ vi xử lý và kết hợp

nhiều bộ xử lý với nhau Tuy nhiên phương pháp này tốn nhiều thời gian, tiền bạc và tốc

độ cũng chỉ cải tiến đến một giới hạn nhất định

Phương pháp 2: Chia bài toán thành các công việc nhỏ để có thể chạy song song trên

nhiều bộ xử lý

Sự kết hợp của hai phương pháp trên là lựa chọn giải pháp công nghệ nhằm tăng tốc tính toán, nó là nền tảng của tính toán song song cũng như các sự ra đời của máy tính song song và lập trình song song

1.1.1 Khái niệm tính toán song song

Tính toán song song là một hình thức tính toán trong đó nhiều phép tính được thực hiện đồng thời, hoạt động trên nguyên tắc là những vấn đề lớn đều có thể chia thành nhiều phần nhỏ hơn, sau đó được giải quyết tương tranh (trong lĩnh vực tính toán)

Có nhiều hình thức khác nhau của tính toán song song: cấp bit, cấp lệnh, dữ liệu, và tác vụ Song song đã được sử dụng từ nhiều năm qua, chủ yếu là trong lĩnh vực tính toán hiệu năng cao, tuy nhiên gần đây công nghệ này đã nhận được nhiều sự quan tâm hơn Nó trở thành mô hình thống trị trong lĩnh vực kiến trúc máy tính, phần lớn là dưới dạng bộ xử

lý đa nhân

Các máy tính song song có thể được phân loại tùy theo cấp độ hỗ trợ cho song song của phần cứng, với những chiếc máy tính đa nhân và đa xử lý có bộ phận đa xử lý trong

Trang 14

một máy đơn lẻ, trong song song phân cụm, và mạng lưới sử dụng nhiều máy tính để xử

lý cùng một công việc Những kiến trúc máy tính song song chuyên dụng thỉnh thoảng cũng sử dụng các bộ xử lý truyền thống nhằm tăng tốc độ cho những công việc đặc trưng Chương trình máy tính song song khó viết hơn so với những chương trình tuần tự, vì

sự tương tranh tạo ra nhiều lớp mới tiềm tàng các lỗi phần mềm Sự kết nối và đồng bộ giữa các phần việc nhỏ là một trong những trở ngại lớn nhất để tạo ra một chương trình song song tốt

1.1.2 Các hình thức song song

a Song song cấp bit

Từ sự ra đời của công nghệ chế tạo chip máy tính very-large-scale integration (VLSI)

từ những năm 1970 cho đến năm 1986, tăng tốc trong kiến trúc máy tính được điều khiển bằng cách tăng gấp đôi kích cỡ từ máy tính về khối lượng thông tin bộ xử lý có thể thao tác trên một chu kỳ Tăng kích thước từ làm giảm số lượng chỉ lệnh các bộ xử lý phải thực thi để thực hiện một hoạt động trên các biến có kích cỡ lớn hơn độ dài của từ Ví dụ, khi một bộ xử lý 8-bit phải tạo thêm 2 nguyên số 16-bit, trước tiên bộ xử lý phải thêm vào các bit bậc thấp hơn 8 từ mỗi số nguyên bằng cách sử dụng lệnh cộng tiêu chuẩn, sau đó thêm vào các bit bậc cao hơn 8 bằng cách sử dụng lệnh cộng có nhớ và bit nhớ lấy từ việc thêm vào bậc thấp; do đó, bộ xử lý 8-bit cần đến hai câu lệnh để hoàn thành một thao tác, trong khi bộ xử lý 16-bit có thể làm xong công việc này chỉ với một câu lệnh duy nhất Trong lịch sử, các vi xử lý 4-bit đã từng được thay thế bằng 8-bit, 16-bit, sau đó là 32-bit Xu hướng này đã kết thúc với sự ra đời của bộ vi xử lý 32-bit, đã trở thành tiêu chuẩn cho các tính toán chung trong hai thập kỷ Cho đến gần đây (khoảng 2003–2004), với sự

ra đời của kiến trúc x86-64, bộ xử lý 64-bit đã trở nên phổ biến

Trang 15

là song song cấp câu lệnh Những ưu điểm của song song cấp câu lệnh đã thống trị kiến trúc máy tính từ giữa những năm 1980 cho đến giữa thập niên 1990

Các bộ xử lý hiện đại có những đường liên kết câu lệnh đa công đoạn Mỗi giai đoạn trong đường liên kết tương ứng với mỗi hành động khác nhau mà bộ xử lý thực hiện với câu lệnh trong giai đoạn đó; bộ xử lý với một đường liên kết N giai đoạn có thể có đến N câu lệnh ở những giai đoạn khác nhau Ví dụ tiêu chuẩn của một bộ xử lý đường liên kết

là bộ xử lý RISC, với 5 công đoạn: nạp lệnh, giải mã, thực thi, truy cập bộ nhớ, và write back Bộ xử lý Pentium 4 có một đường liên kết 35 giai đoạn

c Song song dữ liệu

Song song dữ liệu là tập trung vào phân phối dữ liệu qua các nút tính toán khác nhau

để được xử lý song song Vòng song song thường dẫn đến những chuỗi hoạt động tương

tự (không nhất thiết phải giống nhau) hoặc các chức năng được thực hiện trên các yếu tố của một cấu trúc dữ liệu lớn Nhiều ứng dụng khoa học và kỹ thuật áp dụng song song dữ liệu Một phụ thuộc loop-carried là sự phụ thuộc của một vòng lặp vào kết quả đầu ra của một hoặc nhiều lần lặp lại trước Phụ thuộc loop-carried ngăn chặn sự song song hóa của các vòng Ví dụ, xem xét giả mã sau khi tính một vài số Fibonacci đầu tiên:

Trang 16

hệ thống nhúng, điện thoại di động, máy tính cá nhân, máy trạm, và điều khiển game Bộ

xử lý đồ họa ngày nay rất hiệu quả trong các thao tác đồ họa máy tính, và cấu trúc song song cao cấp làm cho chúng có năng lực xử lý tốt hơn nhiều so với bộ vi xử lý thông thường trong các thuật toán phức tạp Trong máy tính cá nhân, một GPU được biết tới như một card màn hình (video card) hoặc được tích hợp luôn trên bảng mạch chủ Hơn 90% các máy tính cá nhân hoặc máy tính xách tay hiện đại đã có tích hợp GPU nhưng thường yếu hơn nhiều so với GPU tích hợp trên các card màn hình chuyên dụng

Sự phát triển của card đồ họa kết hợp chặt chẽ với các chip vi xử lý Ban đầu GPU là

bộ xử lý gắn trên card đồ họa phục vụ việc tính toán cho các phép toán dấu phảy động Bộ gia tốc đồ họa kết hợp với các vi mạch siêu nhỏ tùy chọn chứa một số phép toán đặc biệt được sử dụng phổ biến trong biến đổi thành đồ họa ba chiều (graphic rendering) Khả năng của các vi mạch từ đó xác định khả năng của bộ gia tốc đồ họa Chúng được sử dụng chủ yếu trong các trò chơi 3D, hoặc biến đổi thành đầu ra 3D

GPU thực thi một số phép toán đồ họa nguyên thủy làm chúng chạy nhanh hơn rất nhiều so với việc vẽ trực tiếp trên màn hình với CPU

Ngày nay, GPU đã bắt đầu thực hiện xâm nhập máy tính và cạnh tranh với CPU, và theo một vài kết quả nghiên cứu cho thấy việc sử dụng GPGPU cho tính toán chung (General Purpose Computing) trên GPU, đã tìm thấy con đường của mình ứng dụng vào các lĩnh vực khác nhau như thăm dò dầu, xử lý hình ảnh khoa học, đại số tuyến tính, tái tạo 3D và hỗ trợ lựa chọn giá cổ phiếu Điều này tăng áp lực lên các nhà sản xuất GPU

Trang 17

từ "người dùng GPGPU" để cải tiến thiết kế phần cứng, thường tập trung vào việc thêm tính linh hoạt hơn cho mô hình lập trình

b Kiến trúc của GPU

Thế hệ GPU mới dựa trên kiến trúc Fermi [1] đã mang lại nhiều giá trị thực tiễn: nâng cao chất lượng, tốc độ dựng hình, giả lập, mô phỏng 3D trên máy tính; tăng tốc tính toán song song cho siêu máy tính; và tạo hạ tầng sẵn sàng cho dịch vụ web 3D

Kiến trúc Fermi vượt nhiều lần về độ chính xác dấu phảy động so với kiến trúc hiện tại nhằm đáp ứng siêu máy tính (HPC) chuyên xử lý đại số tuyến tính, mô phỏng, lượng tử; và lần đầu tiên đưa vào GPU bộ đệm dữ liệu song song Parallel DataCache Kiến trúc Fermi cũng được quan tâm bởi Bloomberg, Cray, Dell, HP, IBM và Microsoft

Hình 1: Mô hình kiến trúc Fermi

Trang 18

Kiến trúc Fermi đầu tiên dựa trên GPU được triển khai thực hiện với 3,0 tỷ transistor,

và 512 CUDA core Các CUDA core được tổ chức trong 16 SM với 32 lõi GPU có sáu phân vùng bộ nhớ 64-bit Giao diện kết nối GPU với CPU thông qua PCI-Express

c Tính toán trên GPU

Với mong muốn ban đầu GPU thiết kế ra nhằm hỗ trợ xử lý đồ họa, tuy nhiên sau này người ta đã tận dụng nó vào tính toán xử lý dữ liệu lớn Trên GPU được thiết kế rất nhiều thanh ghi ALU, gấp nhiều lần so với CPU bởi vậy nó có thể tính toán với tốc độ nhanh gấp trăm, nghìn lần so với tốc độ tính toán của CPU Mô hình dưới đây sẽ minh họa cho điều đó:

Hình 2: Minh họa số thanh ghi ALU trên GPU

Để thấy rõ được những ưu điểm của GPU trong việc ứng dụng xử lý song song, phần này sẽ thực hiện so sánh GPU và CPU ở một số khía cạnh, cụ thể trong bảng sau:

1 Mục đích sử dụng

Dành cho việc xử lý các tính toán thông

thường, làm bộ đệm và điều khiển

Nhu cầu hiển thị đồ họa 3D, thời gian thực,

độ phân giải cao -> cần có GPU nhiều nhân, chạy song song, đa luồng, băng thông

bộ nhớ rất lớn

Trang 19

GPU dùng trong xử lý dữ liệu lớn

2 Kiến trúc

Số lượng ALU ít Số lượng ALU nhiều  Tăng khả năng

tính toán

3 Tối ƣu phần cứng

Các ALU chạy những lệnh riêng

Tiểu trình của CPU cần hàng trăm chu kì

đồng hồ để tạo và lập lịch

Các ALU cùng chạy chung một lệnh Tiểu trình của GPU chỉ tốn vài chu kì đồng

hồ để tạo và lập lịch  GPU có xử lý với

số lượng tiểu trình lớn và nhanh chóng

4 Tốc độ phát triển

Tốc độ tính toán tăng 1.4x mỗi năm Bộ xử lý mảnh: 1.7x mỗi năm

Bộ xử lý đỉnh: 2.3x mỗi năm

Bảng 1: So sánh một số đặc điểm của CPU và GPU

Hai mô hình sau đây được đưa ra bởi NVIDIA [9] vào tháng 8 năm 2012, mô tả sự khác biệt về tốc độ xử lý và băng thông bộ nhớ của một số loại GPU và CPU

Trang 20

Hình 3: So sánh sự tăng tốc về tốc độ xử lý CPU và GPU

Trang 21

Hình 4: Minh họa tăng tốc băng thông bộ nhớ của CPU và GPU

Máy tính song song

1.2

1.2.1 Mô hình máy tính song song

Một hệ thống máy tính song song là một máy tính với nhiều hơn một bộ xử lý cho phép xử lý song song Định nghĩa này có thể bao quát được tất cả các siêu máy tính với hàng trăm bộ xử lý, các mạng máy tính trạm, hay các hệ thống nhúng…Trong những năm gần đây các máy tính có vi xử lý áp dụng công nghệ mới multicore cho phép nhiều nhân trong một bộ xử lý cũng được coi là máy tính song song

Trang 22

1.2.2 Phân loại máy tính song song

d Phân loại dựa trên cơ chế điều khiển chung

Dựa vào cơ chế điều khiển chung Michael Flynn đã chia máy tính song song thành 4 loại sau:

 SISD (Single Instructions stream, Single Data stream - Máy tính một dòng

lệnh, một dòng số liệu): Máy chỉ có một CPU Ở mỗi thời điểm chỉ thực hiện

một lệnh và chỉ đọc/ghi; có một thanh ghi, gọi là bộ đếm chương trình (program counter), được sử dụng để nạp địa chỉ của lệnh tiếp theo khi xử lý tuần tự Các câu lệnh được thực hiện theo một thứ tự xác định Đây chính là mô hình máy tính truyền thống kiểu Von Neumann

Hình 5: Mô hình kiến trúc SISD

 SIMD (Single Instructions stream, Multiple Data stream - Máy tính một dòng

lệnh, nhiều dòng số liệu): Các máy SIMD có một số lớn các bộ xử lý giống

nhau, cùng thực hiện một lệnh giống nhau để xử lý nhiều dòng dữ liệu khác nhau Mỗi bộ xử lý có bộ nhớ dữ liệu riêng, nhưng chỉ có một bộ nhớ lệnh và một bộ xử lý điều khiển, bộ này đọc và thi hành các lệnh Tính song song dùng trong các máy SIMD là tính song song dữ liệu Nó chỉ có hiệu quả nếu cấu trúc các dữ liệu dễ dàng thích ứng với cấu trúc vật lý của các bộ xử lý thành viên

Các bài toán xử lý vector và mảng thuộc loại máy tính này

Trang 23

Hình 6: Mô hình kiến trúc SIMD

 MISD (Multiple Instructions stream, Single Data stream - Máy tính nhiều dòng

lệnh, một dòng số liệu): Các máy tính yêu cầu mỗi đơn vị xử lý nhận những lệnh khác nhau để thực hiện trên cùng một mục dữ liệu Các máy tính có các luồng dữ liệu được chuyển tuần tự theo dãy các CPU liên tiếp gọi là kiến trúc hình ống xử lý theo vector thông qua một dãy các bước Trong đó mỗi bước thực hiện một chức năng và sau đó chuyển kết quả cho PU thực hiện bước tiếp theo

Hình 7: Mô hình kiến trúc MISD

 MIMD (Multiple Instruction stream, Multiple Data stream - Máy tính nhiều

dòng lệnh, nhiều dòng số liệu): Mỗi bộ xử lý có thể thực hiện những luồng lệnh

(chương trình) khác nhau trên các luồng dữ liệu riêng Hầu hết các hệ thống MIMD đều có bộ nhớ riêng và cũng có thể truy cập vào được bộ nhớ chung

Trang 24

(global) khi cần, do vậy giảm thiểu được sự trao đổi giữa các bộ xử lý trong hệ thống

Hình 8: Mô hình kiến trúc MIMD

e Phân loại dựa trên sự tương tác giữa các bộ xử lý và bộ nhớ

 Máy tính song song có bộ nhớ chia sẻ

Máy có một bộ nhớ trung tâm duy nhất được phân chia cho các bộ xử lý và một hệ thống bus chia sẻ để nối các bộ xử lý và bộ nhớ Vì chỉ có một bộ nhớ trong nên hệ thống

bộ nhớ không đủ khả năng đáp ứng nhu cầu thâm nhập bộ nhớ của một số lớn các bộ xử

lý Kiểu kiến trúc bộ nhớ chia sẻ được dùng trong hệ thống SMP

Trang 25

Hình 9: Mô hình kiến trúc máy tính song song chia sẻ bộ nhớ

 Máy tính song song có bộ nhớ phân tán

Mỗi máy của nhóm này gồm có các nút, mỗi nút chứa một bộ xử lý, bộ nhớ, một vài ngã vào ra và một giao diện với hệ thống kết nối giữa các nút

Trang 26

Hình 10: Mô hình kiến trúc máy tính song song phân tán

Lập trình song song với CUDA

1.3

1.3.1 Môi trường phát triển CUDA

CUDA [9] (Compute Unified Device Architecture - Kiến trúc thiết bị tính toán hợp nhất) là một kiến trúc tính toán song song do NVIDIA phát triển Nói một cách ngắn gọn, CUDA là động cơ tính toán trong các GPU (Graphics Processing Unit - Đơn vị xử lý đồ họa) của NVIDIA, lập trình viên có thể sử dụng nó thông qua các ngôn ngữ lập trình phổ biến Lập trình viên dùng ngôn ngữ C for CUDA, dùng trình biên dịch PathScale Open64

C, để cài đặt các thuật toán chạy trên GPU Kiến trúc CUDA hỗ trợ mọi chức năng tính toán thông qua ngôn ngữ C Các bên thứ ba cũng đã phát triển để hỗ trợ CUDA trong Python, Fortran, Java và MATLAB

CUDA cho phép các nhà phát triển truy nhập vào tập các chỉ lệnh ảo và bộ nhớ của các phần tử tính toán song song trong đơn vị xử lý đồ họa của CUDA (CUDA GPU) Sử dụng CUDA, các GPU mới nhất do NVIDIA sản xuất có thể dễ dàng thực hiện các tính toán như những CPU Tuy nhiên, không giống như các CPU, các GPU có kiến trúc song

Trang 27

song trên toàn bộ giúp tập trung vào khả năng thực thi một cách chậm rãi nhiều luồng dữ liệu một lúc, hơn là thực thi rất nhanh một luồng dữ liệu Cách tiếp cận giải quyết các vấn

đề có mục đích tổng quát này trên các GPU được gọi là GPGPU

Trong công nghiệp trò chơi trên máy tính, ngoài nhiệm vụ làm trơn hình ảnh, GPU cũng được sử dụng để tính toán các hiệu ứng vật lý trong game (như mảnh vụn, khói, lửa, dòng chảy ); ví dụ các phần mềm đơn vị xử lý vật lý trong GPU bao gồm PhysX và Bullet CUDA cũng được sử dụng để gia tốc các ứng dụng ngoài đồ họa như sinh học tính toán, xử lý khối lượng dữ liệu lớn cùng với CPU, trong mật mã học và nhiều lĩnh vực khác Một ví dụ đó là hạ tầng tính toán phân tán BOINC

CUDA cung cấp cả giao diện chương trình ứng dụng (API) bậc thấp và bậc cao Kiến trúc CUDA SDK đầu tiên được phát hành vào ngày 15 tháng 2 năm 2007, cho cả hai hệ điều hành Microsoft Windows và Linux Nó hỗ trợ cho Mac OS X ở phiên bản thứ 2.0, thay thế cho phiên bản beta vào ngày 14 tháng 2, 2008 CUDA có trong mọi GPU NVIDIA bắt đầu từ seri G8X về sau, bao gồm các dòng sản phẩm GeForce, Quadro và Tesla Các chương trình phát triển cho seri GeForce 8 cũng sẽ vẫn chạy được mà không cần thay đổi trên mọi video card trong tương lai của NVIDIA, nhờ vào tính tương thích nhị phân

Kiến trúc CUDA bao gồm một số thành phần trong các hộp màu xanh bên dưới:

1 Các kỹ thuật tính toán song song bên trong GPU của NVIDIA

2 Hỗ trợ cho các hệ điều hành cấp hạt nhân khởi tạo phần cứng, cấu hình,…

3 Sử dụng chế độ điều khiển, cung cấp API cho các nhà phát triển

4 PTX Kiến trúc tập lệnh (ISA) cho hạt nhân và các chức năng tính toán song song

Trang 28

Hình 11: Mô hình kiến trúc CUDA

Môi trường phần mềm phát triển CUDA cung cấp tất cả các công cụ, ví dụ và tài liệu cần thiết để phát triển các ứng dụng tận dụng lợi thế của kiến trúc CUDA

Trang 29

Hình 12: Môi trường phát triển phần mềm với CUDA

Libraries Thư viện nâng cao bao gồm BLAS, FFT, và các chức năng khác

tối ưu hóa cho kiến trúc CUDA

CUDA Runtime Cung cấp hỗ trợ để thực hiện các hàm chuẩn trên GPU và cho

phép các cam kết ràng buộc mức cao với các ngôn ngữ bậc cao khác như Fortran, Java, và Python

CUDA Driver Bao gồm các công cụ hỗ trợ biên dịch NVIDIA C Compiler

(nvcc), gỡ rối với CUDA Debugger (cudagdb), theo rõi phân tích kết quả với CUDA Visual Profiler (cudaprof), và một số

Trang 30

công cụ khác Ngoài ra còn cung cấp hệ thống các tài liệu và ví

dụ mẫu là các bài hướng dẫn thực hành tốt nhất về GPU Computing

Bảng 2: Các đặc điểm của môi trường lập trình với CUDA

1.3.2 Mô hình lập trình

a Khái niệm Kernels

CUDA C cho phép các lập trình định nghĩa các hàm C, được gọi là hạt nhân (Kernels) Khi các Kernel được gọi, nó sẽ thực hiện N lần song song với N CUDA Thread khác nhau, điều này ngược lại với việc chỉ thực hiện một lần với các hàm C thông thường Hạt nhân được định nghĩa bằng cách sử dụng khai báo global và chỉ ra số lượng CUDA thread thực hiện mà hạt nhân cho một lời gọi hạt nhân nhất định được quy định cụ thể bằng cách sử dụng ký pháp mới là <<< >>> Mỗi thread thực hiện hạt nhân sẽ có một Thread ID duy nhất, điều đó cho phép truy cập hạt nhân thông qua xây dựng biến

Trang 31

// Kernel invocation with N threads

Để thuận tiện trong nhiều trường hợp, threadIdx là một vector 3-thành phần, vì vậy

các thread có thể được định nghĩa bằng cách sử dụng một chiều, hai chiều, hoặc ba chiều

là chỉ số của thread, và một chiều, hai chiều, hoặc ba chiều với thread block Điều này cung cấp một cách dễ dàng để gọi tính toán trong một miền như một vector, ma trận Chỉ số của một thread và threadID nó liên quan đến nhau một cách đơn giản như sau: Với block một chiều, chúng là giống nhau; với block hai chiều kích thước (Dx, Dy) threadID của thread có chỉ mục (x, y) là (x, yDx); với block ba chiều kích thước (Dx, Dy,

Dz) threadID của thread có chỉ mục (x, y, z) là (x, yDx, zDxDy)

Ví dụ cộng hai ma trận A và B kích thước N*N và kết quả lưu ra ma trận C:

Trang 32

Tuy nhiên một nhân có thể có nhiều block, bở vậy tổng số thread sẽ là tổng thread trên trên tất cả các block

Các block được tổ chức dưới dạng mảng một chiều, hai chiều hoặc ba chiều Grid of

Thread Blocks được minh họa trong hình dưới đây Tổng số thread blocks bên trong một grid được quyết định bởi kích thước dữ liệu đang được xử lý hay số các bộ xử ý của hệ

thống

Trang 33

Hình 13: Grid of Thread Blocks

Số lượng các thread trên mỗi block và số block trên mỗi grid được quy định thông qua

ký pháp <<< >>> được khai báo kiểu dim3 Block hai chiều được chỉ ra trong ví dụ trên

Mỗi block trong grid được xác định bởi ID của nó và có thể truy xuất nó thông qua

biến blockIdx Số chiều của block có thể truy cập bên trong hạt nhân thông qua việc khai báo biến blockDim

Trở lại ví dụ trên viết theo cách sử dụng nhiều block như sau:

// Kernel definition

Trang 34

global void MatAdd(float A[N][N], float B[N][N], float C[N][N])

{

Int i = blockIdx.x * blockDim.x + threadIdx.x;

Int j = blockIdx.y * blockDim.y + threadIdx.y;

Các CUDA thread có thể truy cập từ nhiều không gian bộ nhớ trong khoảng thời gian

chúng thực thi, như trong hình dưới Mỗi thread sẽ có bộ nhớ cục bộ, mỗi thread block sẽ

có bộ nhớ chia sẻ cho phép tất cả các thread của block dùng chung trong thời gian thực thi Tất cả các thread có thể truy xuất đến cùng bộ nhớ toàn cục

Ngoài ra còn có thêm hai bộ nhớ cho phép truy xuất bởi tất cả các thread đó là: constant (hằng) và texture memory (bộ nhớ kết cấu) Bộ nhớ toàn cục, hằng và bộ nhớ kết cấu được tối ưu hóa trong từng trường hợp sử dụng khác nhau Chúng được duy trì qua

Trang 35

Mô hình lập trình CUDA cũng giả định các host và device duy trì không gian bộ nhớ

riêng biệt của chúng trong DRAM, được nhắc đến như là bộ nhớ host và bộ nhớ device

Vì vậy, một chương trình quản lý không gian bộ nhớ toàn cục, hằng, và kết cấu có thể

Trang 36

nhìn thấy hạt nhân thông qua các lời gọi đến trong thời gian thực thi CUDA (được mô tả trong giao diện lập trình) Điều này bao gồm cấp phát bộ nhớ và giải phóng bộ nhớ cũng

như việc truyền tải dữ liệu giữa bộ nhớ host và bộ nhớ device

Hình 15: Mô hình lập trình không đồng nhất

e Khả năng tính toán

Khả năng tính toán của một thiết bị được thể hiện trên số hiệu phiên bản chính và số hiệu phụ đi kèm Thiết bị với cùng một số phiên bản chính có cùng kiến trúc cốt lõi

Trang 37

GeForce 8 Series, Quadro FX 5600/4600, và Tesla là các giải pháp của năng lực tính toán 1.x (số hiệu phiên bản chính là 1) Số hiệu phụ tương ứng với một sự cải tiến để gia tăng các kiến trúc lõi, có thể bao gồm cả tính năng mới Các GeForce 8800 Series, Quadro FX 5600/4600, và Tesla là giải pháp được với khả năng tính toán 1.0 (số hiệu phụ là 0) và GeForce 8600 và 8500 Series có khả năng tính toán 1.1

1.3.3 Lập trình song song với CUDA C/C++

a Biên dịch chương trình với NVCC

Các Kernel (nhân) có thể được viết sử dụng kiến trúc tập lệnh của CUDA được gọi là PTX Nó thích hợp với các ngôn ngữ lập trình bậc cao như C/C++ Trong luận văn này,

mã nguồn được đưa ra và biên dịch bằng NVCC

NVCC là một trình điều khiển biên dịch bằng việc đơn giản hóa quá trình biên dịch

mã CUDA: Nó cung cấp các tùy chọn dòng lệnh đơn giản và quen thuộc thực hiện chúng bằng cách gọi tập hợp của các công cụ thực hiện các công đoạn biên dịch khác nhau Các tệp mã nguồn được biên dịch với NVCC bao gồm tập các mã nguồn thực hiện trên host hay trên device Công việc cơ bản của NVCC là tách riêng hai phần mã lệnh trên host và device và chuyển đổi chúng sang dạng các hàm thực thi

1.3.4 Nguyên tắc tối ưu hóa hiệu năng

a Chiến lược tối ưu hóa hiệu năng

Việc thực hiện tối ưu hóa hiệu năng gồm ba chiến lược cơ bản sau:

Ngày đăng: 25/07/2017, 21:35

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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