1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu công nghệ tính toán tổng quát trên các bộ xử lý đồ họa và ứng dụng trong bài toán mô phỏng N Body

93 26 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 93
Dung lượng 1,3 MB

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

Nội dung

Nghiên cứu công nghệ tính toán tổng quát trên các bộ xử lý đồ họa và ứng dụng trong bài toán mô phỏng N Body Nghiên cứu công nghệ tính toán tổng quát trên các bộ xử lý đồ họa và ứng dụng trong bài toán mô phỏng N Body luận văn tốt nghiệp thạc sĩ

Trang 2

-

luËn v¨n th¹c sÜ khoa häc

NGHI£N CøU C¤NG NGHÖ TÝNH TO¸N TæNG QU¸T TR£N C¸C Bé Xö Lý §å HäA Vµ øNG DôNG TRONG BµI TO¸N M¤ PHáNG N-BODY

Trang 3

sửa dưới mọi hình thức từ bất kỳ các đồ án nào đã có trước đó Các tài liệu tham khảo, thông tin tham khảo được lấy, trích dẫn từ các nguồn có thật, chính xác, không bịa đặt

Trang 4

T óm tắt

Bài toán N-Body là một bài toán kinh điển, ứng dụng trong nhiều lĩnh vực của khoa học như vật lý, y sinh, thiên văn học, Trong bài toán mô phỏng này, khi số lượng Body mô phỏng trong bài toán là một số rất lớn, việc tính toán

tương tác trên tất cả các cặp N-Body mất rất nhiều thời gian (độ phức tạp trong

trường hợp tồi nhất O(N2)) Vì vậy chúng ta cần nghiên cứu một phương pháp mới nhằm tăng tốc độ tính toán của bài toán mô phỏng N-Body, đó là tận dụng sức mạnh tính toán của các bộ xử lý đồ họa

Đề tài này nhằm tìm hiểu môi trường tính toán hiệu năng cao trên bộ xử lý

đồ họa sử dụng công nghệ CUDA của hãng nVidia, và bước đầu thử nghiệm thành công bài toán mô phỏng N-Body trên đơn GPU, cũng như đưa ra một số

đề xuất giải thuật trên GPU cluster

Trang 5

Abstract

N-body algorithms are applicable to a number of common problems in computational physics including gravitation, electrostatics, and fluid dynamics Fast algorithms (those with better than O(N2) performance) exist, but have not been successfully implemented on GPU hardware for practical problems In the present work, we introduce not only best-in-class performance for a all-pairs method, but a series of improvements that support implementation of this solver

on highly-data-parallel graphics processing units (GPUs) The greatly reduced computation times suggest that this problem is ideally suited for the current and next generations of single and cluster CPU-GPU architectures We believe that this is an ideal method for practical computation of large-scale turbulent flows

on future supercomputing hardware using parallel vortex particle methods

Trang 6

MỤC LỤC

LỜI MỞ ĐẦU 6

CHƯƠNG 1 TÍNH TOÁN HIỆU NĂNG CAO VỚI GPU 9

1.1 Tính toán hiệu năng cao và vai trò ứng dụng trong thực tiễn 9

1.1.1 Thách thức tính toán hiệu năng cao trong khoa học và công nghệ 10

1.1.2 Giải pháp 11

1.2 Một số tiếp cận trong tính toán hiệu năng cao 12

1.2.1 Các hệ thống máy tính đa vi xử lý với mô hình lập trình song song chia sẻ bộ nhớ chung 12

1.2.2 Cụm máy tính với mô hình lập trình song song truyền thông điệp 14

1.2.3 Các bộ xử lý đồ họa với mô hình lập trình song song dữ liệu 15

CHƯƠNG II GIỚI THIỆU KIẾN TRÚC TESLA VÀ MÔ HÌNH LẬP TRÌNH SONG SONG CUDA 20

2.1 Giới thiệu kiến trúc phần cứng Tesla của Nvidia (Tesla Architecture) 20

2.2 Kiến trúc tính toán trên GPU Tesla và mô hình lập trình song song CUDA 21

2.2.1 Kiến trúc tính toán trên GPU Tesla 22

2.2.2 Mô hình lập trình song song CUDA 26

2.2.3 Những mặt hạn chế của CUDA 35

2.3 Thiết lập môi trường tính toán CUDA 36

2.3.1 Môi trường phân cứng 37

2.3.2 Bộ công cụ phát triển phần mềm 37

2.3.3 Quy trình cài đặt 38

CHƯƠNG III BÀI TOÁN MÔ PHỎNG N-BODY 39

3.1 Giới thiệu bài toán 39

3.2 Ứng dụng của bài toán N-Body 40

3.3 Các giải thuật với bài toán mô phỏng N-Body 41

3.3.1 Giải thuật tương tác hạt-hạt (The Particle-Particle (PP) method) 41

Trang 7

3.3.2 Giải thuật Barnes-Hut (The Barnes-Hut Algorithm) 41

3.3.3 Phương pháp đa cực nhanh (The Fast Multipole Method – FMM) 42

3.3.4 Giải thuật cây đa cực song song (Parallel Multipole Tree Algorithm – PMTA) 43

3.4 Tổng kết các giải thuật 44

CHƯƠNG IV MÔ PHỎNG N-BODY VỚI ĐƠN GPU 45

4.1 Mục đích mô phỏng N-Body trên GPU 45

4.2 Tính toán lực tương tác các cặp N-Body 46

4.3 Sự thực thi CUDA của giải thuật tất cả các cặp N-Body 48

4.3.1 Tính toán lực body - body 49

4.3.2 Tính toán tile 51

4.3.3 Xếp nhóm các tile vào trong các Thread Block 52

4.3.4 Định nghĩa một Grid của các Thread Block 55

4.4 Môi trường thử nghiệm bài toán 56

4.5 Cách thử nghiệm bài toán N-Body trên hệ thống 58

4.6 Các kết quả thực hiện 59

4.7 Sự tối ưu hóa 63

4.7.1 Gia tăng hiệu năng với lặp không cuộn (loop unrolling) 63

4.7.2 Hiệu năng tăng khi kích thước Block thay đổi 65

4.7.3 Cải thiện hiệu năng khi N nhỏ 66

4.8 Phân tích các kết quả thực hiện 69

4.9 Các phương pháp trước đây sử dụng GPU mô phỏng N-Body 69

4.10 Các phương pháp N-Body phân cấp 71

4.11 Kết luận 72

CHƯƠNG V XÂY DỰNG GIẢI THUẬT MÔ PHỎNG N-BODY VỚI ĐA GPU 74

5.1 Tính chất của các hệ thống tính toán đa GPU 74

5.2 Kiến trúc hệ thống GPU cluster 74

Trang 8

5.2.1 Cấu hình CPU/GPU 74

5.2.2 Cấu hình mạng 78

5.2.3 Phần mềm MPI 79

5.3 Thiết kế giải thuật mô phỏng N-Body trên hệ thống đa GPU 79

5.3.1 Sự thực thi song song đầu tiên 79

5.3.2 Giải thuật N-Body cho các hệ thống đa GPU 81

5.3.3 Tối ưu hóa giải thuật song song 82

5.4 Kết luận 84

CHƯƠNG VI KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 85

6.1 Kết luận 85

6.1.1 Những vấn đề đạt được 85

6.1.2 Những vấn đề chưa đạt được 85

6.2 Hướng phát triển 86

DANH SÁC H TÀI LIỆU THAM KHẢO 87

PHỤ LỤC 89

Trang 9

LỜI MỞ ĐẦU

Trong vài năm gần đây, khái niệm tính toán thông dụng trên các bộ xử lý

đồ họa (GPGPU – General-Purpose Computing on Graphics Processing Units) thu hút được nhiều sự quan tâm từ các nhà nghiên cứu phương pháp tính toán khoa học Những lý do căn bản cho mối quan tâm này là:

• Hiệu năng tính toán của các bộ xử lý đồ họa (GPU) ngày càng vượt trội so với các bộ xử lý trung tâm truyền thống

• Các hãng sản xuất bộ xử lý đồ họa như nVidia, AMD liên tục đưa ra

những hệ thống phần mềm trung gian (middleware) và môi trường phát triển ứng dụng (trình dịch, trình gỡ rối,…) cho phép người phát triển dễ dàng xây dựng các ứng dụng phi đồ họa trên các bộ xử lý đồ họa này

• Giá thành cũng như các chi phí năng lượng cho hoạt động của các bộ xử lý

đồ họa thấp hơn nhiều so với các hệ thống máy tính cùng chỉ số hiệu năng

lý thuyết

Các GPU có khả năng Tính toán thông dụng như vậy có mặt ở khắp nơi, từ máy tính cơ quan cho tới trường học, đến máy tính nhà riêng của mọi người Sự phát triển rộng rãi về mặt số lượng của các GPU này dẫn đến một yêu cầu hết sức cấp bách và đầy thách thức đối với cộng đồng phát triển phần mềm (đặc biệt

là các phần mềm tính toán khoa học), đó là làm thế nào tận dụng được sức mạnh song song của các GPU đối với những phần mềm ứng dụng đang và sẽ được phát triển trong một vài năm nữa

Trong bối cảnh đó, tôi đã lựa chọn đề tài: “Nghiên cứu công nghệ Tính toán

Trang 10

N-Body” để làm đồ án tốt nghiệp cao học của mình Bài toán N-Body là một bài toán kinh điển, ứng dụng trong nhiều lĩnh vực của khoa học như vật lý, y sinh, thiên văn học, Trong bài toán mô phỏng này, khi số lượng Body mô phỏng trong bài toán là một số rất lớn, việc tính toán tương tác trên tất cả các cặp N-Body mất rất nhiều thời gian (O(N2)) Vì vậy chúng ta cần nghiên cứu một

phương pháp mới nhằm tăng tốc độ tính toán của bài toán mô phỏng N-Body, đó

là tận dụng sức mạnh tính toán của các bộ xử lý đồ họa

Qua đề tài này, tôi đã tìm hiểu được môi trường tính toán hiệu năng cao trên

bộ xử lý đồ họa sử dụng công nghệ CUDA của hãng nVidia, và bước đầu thử nghiệm thành công bài toán mô phỏng N-Body

Nội dung luận văn bao gồm có 6 chương chính:

Ch ương 1: Tính toán hiệu năng cao với các bộ xử lý đồ họa

Ch ương 2: Kiến trúc Tesla và Môi trường lập trình song song CUDA

Ch ương 3: Bài toán mô phỏng N-Body

Ch ương 4: Mô phỏng N-Body với đơn GPU

Ch ương 5: Xây dựng giải thuật mô phỏng N-Body với đa GPU

Ch ương 6: Kết luận và hướng phát triển

Để hoàn thành đồ án tốt nghiệp “Nghiên cứu công nghệ Tính toán thông

dụng trên các bộ xử lý đồ họa và ứng dụng trong bài toán mô phỏng N-Body”,

tôi xin chân thành cảm ơn tới Tiến sỹ Nguyễn Hữu Đức – Thầy đã là người trực tiếp hướng dẫn và giúp đỡ tôi Tôi cũng xin gửi lời cảm ơn tới các thầy cô, các anh chị quản lý tại Trung tâm Tính toán hiệu năng cao, trường Đại học Bách

Trang 11

Khoa Hà Nội, đã giúp đỡ và tạo điều kiện cho tôi rất nhiều trong thời gian tôi làm đồ án

Trang 12

CH ƯƠNG I TÍNH TOÁN HIỆU NĂNG CAO VỚI GPU

Chương này nhằm mục đích giới thiệu về vai trò, mô hình tiếp cận, và các công nghệ trong tính toán hiệu năng cao, giải pháp và ứng dụng của chúng vào trong thực tiễn

1.1 Tính toán hiệu năng cao và vai trò ứng dụng trong thực tiễn

Trong các ngành khoa học như hóa học, vật lý hạt nhân, vũ trụ học, động học chất lỏng, sinh học, y học… những bài toán phức tạp đòi hỏi sự tính toán lớn luôn luôn được đặt ra Một số bài toán có độ phức tạp khá lớn tới mức khó có thể giải được trong một khoảng thời gian chấp nhận với các loại máy tính thông dụng ngày nay Vấn đề càng phức tạp khi các bài toán này đòi hỏi việc mô phỏng và hiển thị mô hình đồ họa Mặt khác yêu cầu về thời gian xử lý của bài toán cũng quan trọng không kém Ví dụ một bài toán dự báo thời tiết được giải trong hai ngày để có thể cho kết quả dự báo thời tiết trong một ngày là không có

ý nghĩa Chính yêu cầu về tính toán phức tạp này đã thúc đẩy các siêu máy tính

có khả năng tính toán mạnh ra đời và đi kèm với đó là các phương pháp giải

quyết các bài toán này trên các hệ thống siêu máy tính

Tính toán hiệu năng cao (High Performance Computing) là phương cách

giải quyết các bài toán lớn dùng các máy tính hiệu năng cao (siêu máy tính) Đây

là một hướng nghiên cứu cho cả các tổ chức nghiên cứu, các trường đại học và

cả các công ty vì nó đòi hỏi không chỉ ở giải pháp phần cứng mà cả ở phần mềm

để vận hành và khai thác hệ thống máy tính một cách hiệu quả cao, với chi phí thấp

Trang 13

1.1.1 Thách th ức tính toán hiệu năng cao trong khoa học và công nghệ

Sự đòi hỏi về sức mạnh tính toán của máy tính không ngừng tăng lên nhằm

để giải quyết các bài toán trong lĩnh vực khoa học và công nghệ Các vấn đề trong nhiều lĩnh vực đa số đều đưa về mô hình số và mô phỏng Tùy theo độ lớn

của bài toán cần giải quyết hay độ chính xác của kết quả bài toán mà khối lượng tính toán sẽ lớn đến mức nào Ví dụ như trong bài toán dự báo thời tiết bằng phương pháp số, để có kết quả dự báo chính xác thì ta phải giải bài toán trên một không gian rộng hơn và như thế số lượng phép tính cũng nhiều hơn

Trong thực tế còn nhiều bài toán có độ phức tạp rất lớn mà sức mạnh siêu máy tính hiện tại cũng chưa giải quyết được, vì vậy người ta gọi đây là các bài toán thách đố Hiện nay có rất nhiều lĩnh vực khoa học cần khoa học tính toán như hóa học, vật lý hạt nhân, khoa học vũ trụ, sinh học, y học… Khoa học tính toán giúp giải quyết nhiều vấn đề trên mô hình toán để tiên đoán trước kết quả

thử nghiệm và như vậy giúp rút ngắn quá trình thử nghiệm

Hình 1.1 Các ứng dụng tính toán hiệu năng cao

Trang 14

Hình 1.1 đưa ra kết thống kê những ứng dụng phổ biến của tính toán hiệu năng cao được thực hiện bởi top500 Số lượng bài toán cần giải quyết bằng môi trường tính toán hiệu năng cao càng cho thấy sự cần thiết của sức mạnh tính toán trong các lĩnh vực khoa học và công nghệ

1.1.2 Gi ải pháp:

Nhằm đáp ứng yêu cầu tính toán trong khoa học và công nghệ, ba giải pháp

đã được đề nghị: (1) Tăng tốc độ tính toán của bộ xử lý, (2) Tìm một giải thuật tốt hơn để giải quyết, và (3) Sử dụng kỹ thuật xử lý song song Giải pháp (1) và (2) đòi hỏi nhiều thời gian để có kết quả cũng như có nhiều hạn chế Để giải quyết các bài toán có khối lượng tính toán lớn đòi hỏi một giải pháp mới, đó chính là giải pháp (3) Chính động lực này đã thúc đẩy việc ra đời các hệ thống máy tính có khả năng tính toán song song mạnh

Máy tính song song có nhiều bộ xử lý và các bộ xử lý này sẽ tham gia giải quyết các phần khác nhau của bài toán cùng lúc Như vậy thời gian giải quyết cho vấn đề sẽ được giảm đi Theo lý thuyết, nếu có n bộ xử lý thì thời gian giải

quyết vấn đề sẽ giảm đi n lần so với dùng một bộ xử lý Tuy nhiên, thời gian dài giải quyết trong thực tế sẽ lớn hơn thời gian tính toán trong lý thuyết do nhiều nguyên do Thứ nhất là ngoài thời gian xử lý trong bài toán thì còn thời gian đồng bộ và giao tiếp giữa các tác vụ song song Thứ hai là không phải bài toán

nào cũng có thể chia thành n phần nhỏ bằng nhau để giao cho các bộ xử lý

Nguyên do thứ hai phải giải quyết bằng cách xây dựng các giải thuật hợp lý và

có thể thực thi song song được Để giải quyết nguyên do thứ nhất thì ngoài việc

phải chú ý đến giải thuật giải quyết vấn đề, ta nên chú ý đến khả năng truyền dữ

liệu trong hệ thống máy tính Vậy hiệu quả của việc xây dựng một ứng dụng

Trang 15

song song không chỉ phụ thuộc vào giải thuật giải quyết mà còn phụ thuộc nhiều vào hệ thống máy tính

1.2 Một số tiếp cận trong tính toán hiệu năng cao

1.2.1 Các h ệ thống máy tính đa vi xử lý với mô hình lập trình song song

chia s ẻ bộ nhớ chung

SMP (symmetric multiprocessor) là kiến trúc truyền thống trong việc xây dựng các hệ thống máy tính mạnh Kiến trúc này cho phép một hệ thống máy tính có thể chứa 2 hay nhiều bộ vi xử lý đồng nhất chia sẻ cùng một vùng bộ nhớ chung Các hệ thống SMP sử dụng một hệ điều hành duy nhất và lập trình viên thường sử dụng phương pháp lập trình đa luồng để tận dụng được tối đa sức

mạnh tính toán của hệ thống Ứng dụng được phân chia thành nhiều luồng công việc, mỗi luồng công việc này có thể được thực hiện trên một bộ xử lý và chúng

có thể trao đổi thông tin cho nhau thông qua một vùng bộ nhớ chia sẻ

Hai yếu tố cơ bản ảnh hưởng đến hiệu năng hoạt động của một hệ thống SMP: hiệu năng tính toán của các bộ xử lý, băng thông của bộ nhớ chia sẻ Hiệu năng tính toán của một hệ thống SMP được tính theo số lượng và hiệu năng tính toán của từng bộ xử lý đơn lẻ Thông số này đảm bảo năng lực tính toán tối đa

của hệ thống Tuy nhiên một ứng dụng hiếm khi tận dụng được tối đa năng lực tính toán của hệ thống Ngoài nguyên nhân liên quan tới thiết kế giải thuật song song (nguyên nhân khó có thể cải thiện bằng sự hỗ trợ kỹ thuật) thì độ trễ tính toán do băng thông truy nhập vào bộ nhớ chia sẻ thấp cũng là một lý do quan trọng ảnh hưởng tới hiệu năng ứng dụng trên các hệ thống SMP

Một ví dụ điển hình cho các hệ thống SMP chính là các máy tính cá nhân

với bộ vi xử lý đa lõi (Intel DualCore, Intel QuadCore,…) được sử dụng phổ

Trang 16

biến hiện nay Tuy nhiên năng lực tính toán của các hệ thống máy tính cá nhân như vây chưa thật sự cao để thỏa mãn các nhu cầu tính toán trong công nghệ do

số lượng (cũng như hiệu năng) của các bộ xử lý dành cho máy tính cá nhân còn thấp

Hình 1.2 Siêu máy tính NEC SX9

NEC SX9 (hình 1.2) là một ví dụ khác về một hệ thống SMP Hệ thống có thể được xây dựng từ nhiều nút, mỗi nút có thể có tối đa 16 bộ xử lý với hiệu năng tối đa lên tới 1.6Tflops Bộ nhớ dành cho mỗi nút có thể lên tới 1TB với băng thông lên tới 4TB/s

Mặc dù có năng lực tính toán lớn, phù hợp nhiều ứng dụng thực tiễn, nhưng các hệ thống SMP như SX9 không thực sự phổ biến do chi phí sản xuất

và vận hành của những hệ thống này quá lớn và quan trọng nhất là tính khả mở của những hệ thống SMP thường thấp Hiện tại các kiến trúc máy tính khác như

kiến trúc phân cụm được ưa chuộng hơn so với SMP (điều này thể hiện ở tỷ lệ 83.4%/16.2% về các số lượng hệ thống cluster/SMP được thống kê vào tháng 11/2009)

Trang 17

1.2.2 C ụm máy tính với mô hình lập trình song song truyền thông điệp

Hệ thống tính toán song song phân cụm (Cluster) là các hệ thống máy tính song song được xây dựng từ các nút tính toán và thiết bị mạng thông dụng, mỗi nút tính toán hay các nút đóng vai trò điều khiển vào/ra là một hệ thống hoàn

chỉnh, có khả năng làm việc độc lập Hệ thống tính toán song song phân cụm là

một máy tính song song, trong đó:

• Các tài nguyên tính toán là bộ vi xử lý và bộ nhớ trong tại mỗi máy tính

• Các tài nguyên tính toán này có khả năng truyền thông và kết hợp với nhau thông qua cáp mạng Thường thì quy mô của hệ thống chỉ giới hạn trong một mạng cục bộ (LAN), trong đó có một máy tính đóng vai trò máy

chủ (server), các máy tính còn lại đón vai trò nút tính toán (computing node)

Hình 1.3 Mô hình m ột Cluster

Một hệ thống tính toán song song phân cụm rẻ hơn nhiều so với một siêu máy tính SMP cùng sức mạnh, điều này làm cho các hệ thống tính toán song

Trang 18

song phân cụm ngày càng phổ biến và đặc biệt phù hợp cho các nước đang phát triển cũng như các trường đại học Tuy nhiên, các hệ thống tính toán song song phân cụm cũng có những hạn chế như: quá trình triển khai, cấu hình hệ thống tương đối phức tạp, hệ thống hoạt động không ổn định bằng các siêu máy tính,

và nhược điểm lớn nhất là vấn đề truyền thông giữa các nút tính toán Việc nghiên cứu nhằm nâng cao khả năng truyền thông là một trong những vấn đề quan trọng hàng đầu trong quá trình phát triển các cấu trúc, mô hình hệ thống phân cụm

Đối với các hệ thống tính toán phân cụm, phần mềm càng có vai trò quan

trọng hơn Chính các phần mềm đảm bảo cho hệ thống gồm nhiều máy tính riêng

lẻ có thể hoạt động ổn định và cộng tác hiệu quả

1.2.3 Các b ộ xử lý đồ họa với mô hình lập trình song song dữ liệu

Trong khi những nhà chế tạo CPU (bộ xử lý trung tâm) rất khó khăn trong

việc tìm ra giải pháp để nâng cao hiệu năng của CPU thì những nhà chế tạo GPU (bộ xử lý đồ họa) lại tiếp tục hưởng lợi từ định luật Moore Trong hình 1.4, sẽ

thể hiện sự gia tăng về số lượng phép tính dấu chấm động/giây và dải thông đạt được giữa các dòng card đồ họa của Nvidia và CPU Intel

Trang 19

Hình 1.4 Bi ểu đồ số phép tính dấu chấm động trên giây và dải thông bộ nhớ

• GPGPU (General-Purpose computation on GPUs – Tính toán thông dụng trên các bộ xử lý đồ họa)

Một câu hỏi được đặt ra, vậy tại sao không thiết kế CPU giống như GPU để đạt được cải thiện hiệu năng cao như vậy? Câu trả lời rất đơn giản: CPU được thiết kế để đạt được hiệu năng tối đa từ việc xử lý một dòng nhiều lệnh mà những lệnh đó vận hành trên những lọai dữ liệu khác nhau (chẳng hạn như những phép tính số nguyên và phép tính dấu chấm động) và thực hiện truy cập

bộ nhớ, tính toán rẽ nhánh Để thực hiện tất cả công việc đó, CPU phải làm việc bằng cách trích xuất ra nhiều lệnh song song Nhưng vấn đề phát sinh ở đây

là giới hạn của việc xử lý những lệnh song song đó và việc tăng các đơn vị xử lý những lệnh song song là không hữu ích [2]

Trang 20

Ngược lại, cách vận hành của GPU lại rất đơn giản Trước tiên là tập hợp các đa giác và điểm ảnh thành một nhóm, và sau đó các dữ liệu này sẽ được xử

lý hoàn toàn độc lập với nhau Điều này có nghĩa rằng GPU có thể dành hầu hết tài nguyên của nó để xử lý các dữ liệu này

Hình 1.5 GPU dành nhi ều transistor hơn để xử lý dữ liệu

Ngoài ra, GPU cũng khác CPU ở việc truy cập bộ nhớ Khi một điểm ảnh được đọc, ở những chu kỳ sau đó điểm ảnh láng giềng cũng sẽ được đọc, và khi một điểm ảnh được ghi thì ở những chu kỳ sau đó điểm ảnh láng giềng cũng được ghi Việc tổ chức bộ nhớ thông minh như vậy làm cho hiệu năng của bộ

nhớ cũng đạt gần như mức lý thuyết Điều này có nghĩa rằng đối với GPU không giống như CPU không cần phải có bộ nhớ đệm (cache) lớn, vì phần lớn bộ nhớ được sử dụng để tăng tốc xử lý texture (bề mặt) và một phần còn lại của bộ nhớ dùng để chứa những điểm ảnh sử dụng cho việc lọc

Trang 21

Trong một khoảng thời gian dài CPU và GPU được thiết kế để làm những công việc phù hợp với khả năng của nó, chẳng hạn như CPU dùng để gõ văn bản

và duyệt web thì GPU dùng để tăng tốc xử lý đồ họa cũng như các trò chơi Nhưng đến thời điểm xuất hiện GPU NV30 của NVIDIA (GeForce FX 5800), GPU bắt đầu tham dự vào những công việc khác ngoài đồ họa như :

- Hỗ trợ tính toán dấu chấm động đơn

- Hỗ trợ tính toán lên đến cả ngàn lệnh

Vì thế đã nảy ra ý tưởng dùng GPU để xử lý những chương trình không thuộc đồ họa Vào năm 2003 bắt đầu xuất hiện khái niệm GPGPU (viết tắt của từ General-Purpose computation on GPUs - Tính toán thông dụng trên các bộ xử lý

đồ họa)

SC08 đánh dấu sự ra đời của siêu máy tính đầu tiên trên thế giới sử dụng

GPU làm công cụ tính toán phức tạp và các bài toán kinh tế Siêu máy tính này đến từ Tokodai (TiTech, Tokyo Institute of Technology), với tên gọi Tsubame,

hệ thống gồm 170 khối Tesla dạng 1U, với mỗi khối gồm 4 card Tesla, tổng cộng hệ thống có thêm 170 x 4 = 680 Tesla GPU, với cấu hình này Tsubame

Trang 22

được xếp vào vị trí 29 trong bảng tổng sắp LINPACK Benmark, với khả năng tính toán có độ chính xác kép trên số thực là 77.48 TFLOP Với một kinh phí khiêm tốn, ít hơn rất rất nhiều lần so với hệ thống ban đầu, và với thời gian lắp đặt kỷ lục, Tsubame với Tesla chứng tỏ khả năng sử dụng GPU trong các hệ thống HPC là hoàn toàn hiện thực

Chính vì vậy mà chỉ sau khi NVIDIA cho ra đời CUDA vào tháng 2 năm

2007 đến nay, lập trình viên trên khắp thế giới đã nhanh chóng phát triển các ứng dụng song song trong rất nhiều lĩnh vực khác nhau, từ điện toán hóa học đến sắp xếp, tìm kiếm, rồi mô phỏng các mô hình vật lý, hay chẩn đoán y khoa, thăm dò

dầu khí, v.v… Những ứng dụng này có một đặc thù gọi là “có thể mở rộng quy

mô thực thi một cách trong suốt” (tiếng Anh gọi là “scalable transparently“)[4], nghĩa là sẽ phát huy hiệu năng một cách phù hợp trên các GPU từ 8 lõi (thấp nhất) đến hàng trăm lõi, mà không cần phải viết lại chương trình (hay nói cách khác là trong suốt với số lượng lõi có trong GPU trên môi trường thực thi cụ thể) Điều này thực hiện được nhờ sự phối hợp nhịp nhàng của 2 yếu tố phần cứng và

phần mềm trong công nghệ CUDA, đó là:

• Mô hình lập trình song song CUDA

• Kiến trúc phần cứng Tesla

Trong chương II, chúng ta sẽ cùng tìm hiểu rõ hơn về kiến trúc phần cứng Tesla, GPU Tesla và mô hình lập trình song song CUDA, một công nghệ mới với khả năng ứng dụng rất lớn vào thực tiễn trong vòng vài năm sắp tới

Trang 23

CHƯƠNG II GIỚI THIỆU KIẾN TRÚC TESLA VÀ MÔ HÌNH

2.1 Gi ới thiệu kiến trúc phần cứng Tesla của Nvidia (Tesla Architecture)

Hiệu năng tính toán của những bộ vi xử lý

đồ hoạ (GPU) ngày càng tăng thậm chí vượt xa

so với các bộ xử lý CPU thông thường Để tận

dụng được khả năng tính toán này cho những

bài toán phi đồ họa, các nhà sản xuất cũng như

nghiên cứu đưa ra một khái niệm mới GPGPU

(General-Purpose Computation on GPUs –

Tính toán thông dụng trên các bộ xử lý đồ họa)

đó là việc sử dụng GPU để làm những công

việc trước kia là của CPU để tăng cường hiệu suất làm việc Làm thế nào để làm được việc đó? Làm thế nào để chương trình lập trình cho GPU có thể tương thích với nhiều bộ xử lý đồ họa khác nhau Để giải quyết vấn đề này, hãng NVIDIA phát triển một ngôn ngữ mới dựa trên C cho phép lập trình viên dễ dàng xây dựng ứng dụng tính toán thông dụng cho các GPU (mà ban đầu là các GPU dòng G80[8])

Để tiến thêm một bước xa hơn nữa, NVIDIA tung ra dòng sản phẩm có tên gọi Tesla (AMD/ATI cũng có dòng sản phẩm với khái niệm tương tự có tên gọi Stream) Tesla ban đầu dựa trên sức mạnh của GPU GeForce 8800 nhưng không tạo ra tín hiệu Video: chúng được dùng như các bộ xử lý chuyên dụng cho mục đích tính toán Các chương trình viết cho Tesla phải được dịch bằng CUDA, do

đó những người dùng thông thường không được hưởng những lợi ích từ công

Hình 2.1 Biểu tượng

Tesla

Trang 24

nghệ này (khi cài đặt Tesla vào máy tính, hiệu suất hệ thống sẽ không tự động tăng lên) Tesla chỉ phù hợp với những ứng dụng nặng về tính toán và những tính toán này có thể song song hóa được Ví dụ những chương trình trong lĩnh vực: Vật lý, Tài chính, Y tế, Sinh học và Hoá học

Lập trình viên cũng không nhất thiết phải có Tesla mới có thể sử dụng được CUDA Họ có thể sử dụng bất kỳ Card màn hình nào thuộc dòng GeForce

8800 trở lên (và GTX200 hiện nay) Nếu nó làm việc tốt thì những nhà lập trình

có thể nghĩ về việc mua những hệ thống mạnh hơn đó chính là giải pháp Tesla

2.2 Ki ến trúc tính toán trên GPU Tesla và mô hình lập trình song song CUDA

Trong kỹ thuật xử lý đồ họa 3D, quá trình chuyển đổi một hình ảnh dạng ba chiều sang dạng điểm ảnh đòi hỏi các thao tác xử lý đồ họa điểm và đồ họa véc-

tơ Xử lý đồ họa véc-tơ là các thao tác trên véc-tơ căn bản như các điểm, đường

thẳng, và các hình tam giác Các thao tác này sử dụng các mô hình hình học và

việc tô trát trên các mô hình đó để hiển thị đồ họa hay nói cách khác đó là các thao tác truyền tải các hệ thống tọa độ, thiết lập các tham số kết cấu và ánh sáng

để hiển thị hình ảnh Xử lý đồ họa điểm ảnh là thao tác chuyển đổi hình ảnh từ

mô hình hình học sang các điểm ảnh và thể hiện chúng trên các lưới điểm ảnh đầu ra, thao tác thường thấy là phủ đầy các điểm ảnh bên trong hình ảnh nguyên

Trang 25

hình học sang các điểm ảnh, sau đó mới được hiển thị ở đầu ra), bộ lọc kết cấu

có độ chính xác thấp hơn…Và bình thường GPU phải xử lý nhiều điểm ảnh hơn các véc-tơ (với tỷ lệ 3:1) Rồi khả năng tăng cường tính phổ biến của GPU như tăng cường các thiết kế phức hợp, vùng miền, giá thành của hai cách xử lý riêng

biệt Thêm đó là khả năng tính toán phức hợp (lập trình được), và GPU loại này đang được lựa chọn với tỷ lệ nhiều hơn so với lựa chọn các GPU có các bộ xử lý không lập trình được, chính những điều này là động cơ thúc đẩy của kiến trúc xử

lý Tesla

2.2.1 Ki ến trúc tính toán trên GPU Tesla

Được NVIDIA giới thiệu vào tháng 11 năm 2006, kiến trúc tính toán và đồ họa

hợp nhất Tesla đã phát triển, gia tăng đáng kể về số lượng so với các GPU đồ họa không lập trình được Khả năng xử lý đa luồng với số lượng luồng thực thi cực lớn khiến kiến trúc này trở nên một nền tảng hiệu quả cho cả những ứng

dụng tính toán đồ họa và ứng dụng tính toán song song thông thường trên GPU

Hình 2.2 Ki ến trúc của 1 card NVIDIA Tesla GPU với 112 lõi xử lý

Trang 26

Kiến trúc Tesla được xây dựng xung quanh một mảng có thể mở rộng của các SM (streaming multiprocessors – đa xử lý dòng lệnh) Mỗi SM chứa 8 lõi xử

lý vô hướng SP Những GPU theo kiến trúc này có thể thực hiện từ 768 cho tới

12288 luồng thực thi đồng thời Với sự hỗ trợ của môi trường phát triển ứng

dụng CUDA, các GPU này cho phép lập trình viên mở rộng quy mô thực thi song song một cách trong suốt (số luồng không phụ thuộc vào năng lực thực sự của GPU) [3]

Hình 2.2 trình bày một GPU với 14 SMs - tương đương với 112 lõi SP (streaming processor), kết nối liên thông với 4 mô đun bộ nhớ DRAM bên ngoài

Một chương trình CUDA chia ra hai phần riêng biệt, phần thực thi trên CPU, và

phần thực thi trên GPU Khi một chương trình CUDA trên CPU gọi một kernel (đơn vị chương trình được viết để thực thi trên GPU) kernel này sẽ được thực hiện N lần song song với nhau bởi N luồng CUDA khác nhau N luồng này được

tổ chức thành một lưới bao gồn nhiều khối (block), mỗi khối gồm nhiều luồng Khi kernel được gọi, đơn vị phân phát công việc tính toán, gọi tắt là CWD (Compute Work Distribution) sẽ liệt kê các khối của lưới và bắt đầu phân phối các khối này tới các SM sẵn sàng thực thi (sẵn sàng chạy) Các luồng trong một khối được thực hiện đồng thời trên một SM Khi các khối kết thúc, đơn vị CWD

sẽ thực thi các khối mới trên các bộ xử lý rảnh rỗi cho tới khi toàn bộ khối trong lưới được thực thi thành công

Một SM có chứa 8 lõi xử lý vô hướng SP – scalar processor (SP), 2 đơn vị chức năng đặc biệt – special function units (SFUs), dành cho tính toán siêu việt,

1 đơn vị điều hướng đa luồng – multithreaded instruction unit (MTIU), và 1 bộ nhớ chia sẻ trên nó (on-chip shared memory) SM đảm nhiệm việc tạo, quản lý,

và thực hiện tới 768 luồng đồng thời trên phần cứng mà không tốn kém chi phí

Trang 27

lập lịch Nó có thể thực thi 8 block CUDA nhiều lần trong cùng một thời điểm

SM còn cung cấp rào chắn CUDA syncthreads(), rào chắn này có tác dụng đồng bộ hóa các luồng bên trong SM với một lệnh đơn Chính xác hơn, khi một điểm đồng bộ hoá đặc biệt trong kernel gọi syncthreads(), syncthreads() hành động như một rào chắn, nó yêu cầu tất cả các luồng trong khối phải đợi trước khi nó được phép xử lý

Để quản lý hàng trăm luồng chạy trong nhiều

ứng dụng khác nhau, Tesla SM sử dụng một kiến trúc

mới gọi là “đơn dòng lệnh đa luồng” – SIMT

(Single-Instruction, Multiple-thread) SM ánh xạ mỗi luồng

tới một lõi vô hướng SP, và các luồng vô hướng sẽ

chạy độc lập với nhau với địa chỉ tập lệnh và trạng

thái thanh ghi riêng của nó Đơn vị SM SIMT tạo,

quản lý, sắp xếp và thi hành các luồng trong một

nhóm gồm 32 luồng song song được gọi là warps

Các luồng riêng lẻ săp xếp theo trật tự thành một tập

hợp warp khởi động cùng nhau tại cùng một địa chỉ chương trình nhưng tự do rẽ nhánh và thực thi một cách độc lập Mỗi SM quản lý một nhóm gồm 24 warp với

32 luồng trên mỗi warp, và tổng cộng có 768 luồng

Các lệnh được đưa ra cùng một thời điểm, đơn vị SIMT sẽ lựa chọn một warp đã sẵn sàng thực hiện và đưa ra lệnh tiếp theo tới các luồng đã được chuẩn

bị trong warp Một warp thực thi một lệnh chung tại một thời điểm, do vậy hiệu

quả cao nhất thu được khi cả 32 luồng trong một warp phù hợp với nhau về đường dẫn thực thi của chúng Nếu các luồng của một warp phân rẽ qua một dữ

liệu phụ thuộc điều kiện rẽ nhánh, thì warp sẽ thi hành từng nhánh đường dẫn lấy

Trang 28

được, vô hiệu hóa các luồng mà không ở trên đường dẫn đó, và khi tất cả các đường dẫn được hoàn thành, các luồng hội tụ trở lại để thực hiện trong cùng một đường dẫn Sự rẽ nhánh xảy ra chỉ trong một warp, các warp khác nhau thực thi độc lập với nhau và không chú ý tới chúng đang thực thi một đường dẫn chung

hoặc đường dẫn đoạn mã rời rạc Và như là một kết quả, kiến trúc GPU Tesla đột nhiên trở nên mềm dẻo và hiệu quả hơn trên các nhánh mã so với các GPU trước đây, như các warp 32 luồng của chúng bị hạn chế nhiều hơn so với độ rộng SIMD (Single-Instruction Multiple-Data) của các GPU trước kia

Kiến trúc SIMT gần giống như với cấu trúc véc-tơ SIMD mà trong đó một

lệnh điều khiển nhiều quá trình xử lý các phần tử Một điều then chốt khác là cấu trúc véc-tơ SIMD chỉ ra sự song song hóa ở mức dữ liệu trong chương trình, trong khi các lệnh SIMT định rõ việc thực thi và trạng thái phân nhánh của một luồng đơn Trái ngược với các véc-tơ SIMD, SIMT cho phép lập trình viên viết đoạn mã lệnh song song phân cấp các luồng một cách độc lập, các luồng vô hướng, cũng như là đoạn mã song song dữ liệu dành cho phối hợp các luồng

Lập trình viên có thể về căn bản bỏ qua động thái SIMT, tuy nhiên, chắc chắn hiệu năng có thể được nhận thấy bởi việc quan sát đoạn đoạn mã ít khi yêu cầu các luồng trong warp phân rẽ Trong thực tế, nó tương tự như vai trò của các dòng đệm trong các đoạn mã truyền thống: kích thước dòng đệm có thể bỏ qua

một cách an toàn khi thiết kế với tính đúng đắn nhưng phải được xem xét trong cấu trúc đoạn mã khi thiết kế cho hiệu năng tối đa Các kiến trúc véc-tơ, theo một hướng khác, yêu cầu phần mềm kết hợp một khối để load trong các véc-tơ

và điều khiển sự phân rẽ một cách thủ công

Một biến luồng thường lưu trú trong các thanh ghi đang sống Bộ nhớ chia

sẻ 16Kb SM có độ trễ truy cập thấp và dải thông cao tương tự như bộ nhớ đệm

Trang 29

L1, nó giữ các biến CUDA shared trên khối để dành cho việc kích hoạt các

khối luồng SM cung cấp việc nạp/lưu trữ các lệnh để truy cập biến CUDA device trên GPU có bộ nhớ DRAM gắn ngoài Nó kết hợp thành một khối truy cập riêng rẽ của các luồng song song trong cùng một warp và ở trong vài truy cập khối bộ nhớ khi các địa chỉ rơi vào trong cùng một bkhối và gặp các tiêu chuẩn liên kết Bởi vì độ trễ của bộ nhớ chung có thể tới hàng trăm xung nhịp xử

lý, để tối ưu, các chương trình CUDA thường copy dữ liệu tới bộ nhớ chia sẻ khi

dữ liệu này được truy cập nhiều lần bởi một khối luồng Tesla nạp/lưu trữ các lệnh bộ nhớ sử dụng địa chỉ là các byte số nguyên để thuận tiện cho trình biên

dịch chuyển đổi tối ưu các đoạn mã Luồng đếm trong mỗi SM, cũng như việc

hỗ trợ cho nhiều yêu cầu nạp còn tồn tại, giúp đỡ che phủ độ trễ trong việc nạp

và sử dụng tới các bộ nhớ DRAM gắn ngoài Kiến trúc GPU Tesla mới nhất cũng cung cấp các lệnh bộ nhớ đọc-sửa-ghi nguyên tố, thuận tiện cho sự giảm

bớt song song và quản lý cấu trúc song song dữ liệu

Các ứng dụng CUDA thực hiện tốt trên các GPU kiến trúc Tesla bởi vì mô hình song song CUDA, sự đồng bộ, các bộ nhớ chia sẻ, và phân cấp của các nhóm luồng ánh xạ hiệu quả tới các chức năng của kiến trúc GPU

2.2.2 Mô hình l ập trình song song CUDA

CUDA mở rộng từ ngôn ngữ lập trình C, cho phép các nhà lập trình định nghĩa các hàm trên C, được gọi là các kernel, chúng được thực thi song song tại cùng thời điểm bởi N tham chiếu tới các luồng CUDA, giống như các hàm C thông thường

Trang 30

Một kernel được định nghĩa sử dụng một tham số mô tả _global_ và số các luồng CUDA cho mỗi lời gọi chúng được chỉ rõ bằng việc sử dụng một cú pháp mới: <<< >>>

global void vecAdd(float* A, float* B, float* C)

Trang 31

Mỗi luồng thực thi hàm vecAdd() sẽ tính một phép cộng hai phần tử tại vị trí I tương ứng với chỉ số luồng threadIdx

Sự phân cấp luồng

Để thuận lợi, CUDA thiết kế threadIdx như là một vector 3 thành phần (.x,.y,.z), do đó người lập trình có thể quyết định xây dựng các luồng trong một khối như là các mảng 1 chiều, hai chiều hay ba chiều Trong ví dụ sau, đoạn mã thực hiện phép cộng 2 ma trận A và B có kích thước NxN và kết quả được lưu vào ma trận C:

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

Trang 32

Các luồng thuộc về một khối có thể cùng hợp tác tính toán bằng xử lý trên vùng dữ liệu chia sẻ tương ứng với chỉ số luồng, và khi cần truy đồng bộ hóa dữ liệu chúng có thể sử dụng hàm syncthreads() để đảm bảo các tác vụ trước rào chắn phải được hoàn tất trước khi tiếp tục xử lý

Số luồng mỗi khối bị hạn chế bởi giới hạn nguồn tài nguyên bộ nhớ của lõi bộ vi xử lý Với kiến trúc Tesla của NDIVIA, một khối có thể chứa tới 512 luồng Tuy nhiên, một kernel có thể được thực thi nhiều hơn số lượng luồng trong 1 khối bằng cách tổ chức các luồng thành nhiều khối Các khối có thể được

tổ chức vào trong lưới một chiều hoặc 2 chiều của một lưới, được minh hoạ như hình 2.3 dưới đây

Trang 33

Hình 2.3 Lưới các Luồng Blocks

Chiều của lưới được chỉ rõ bởi tham số đầu tiên của ký pháp <<<…>>>

Vị trí mỗi khối trong một lưới được quy định bởi chỉ số một chiều hoặc hai chiều blockIdx Chiều của block có thể truy cập thông qua biến blockDim Đoạn mã ví

dụ trước đây trở thành:

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

{

Trang 34

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

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

Trang 35

nhập được từ tất cả các luồng trong khối Cuối cùng, tất cả các luồng có thể cùng truy cập tới cùng bộ nhớ tổng thể

Ngoài các không gian nhớ kể trên, các GPU Tesla cũng có thêm hai dạng không gian nhớ chỉ đọc, có thể truy nhập được từ mọi luồng: bộ nhớ texture, và

bộ nhớ hằng số

Trang 36

Hình 2.4 Kiến trúc bộ nhớ

• Host và Device

Như được minh hoạ trong hình 2.5, CUDA giả thiết rằng các luồng CUDA được thực thi trên một thiết bị vật lý riêng biệt (device) song hành với chương trình chạy trên bộ xử lý trung tâm (CPU) Trong ví dụ, khi các kernel thực thi trên một GPU thì phần còn lại của chương trình C chạy trên CPU

CUDA cũng giả thiết rằng cả host và device có bộ nhớ DRAM riêng, được tham chiếu tới như bộ nhớ host và bộ nhớ device Các kernel chỉ được phép truy nhập trong vùng bộ nhớ device trong khi các đoạn mã thực thi trên CPU chỉ truy nhập được vùng bộ nhớ host CUDA cung cấp các phương tiện để chuyển dữ liệu qua lại giữa hai vùng bộ nhớ này

Trang 37

Hình 2.5 Chương trình không đồng nhất: mã thực thi trên host tuần tự trong khi

mã thực thi trên device song song

Trang 38

Xếp chồng phần mềm (Software Stack)

Các lớp phần mềm của CUDA được cấu thành từ một số thành phần như được minh hoạ bởi hình 2.6: một device driver, một giao diện lập trình ứng dụng (API) và thực thi, và các thư viện toán học mức cao dùng chung như CUFFT và CUBLAS

Hình 2.6 Kiến trúc phần mềm của CUDA

2.2.3 Nh ững mặt hạn chế của CUDA

Một vấn đề quan trọng đối với các lập trình viên CUDA là phải nắm vững được những hạn chế của kiến trúc này để có thể tối ưu hóa được ứng dụng

Trang 39

Trước tiên, các luồng và các khối được tạo bởi lời gọi tới một kernel duy

nhất, do đó song song hóa dữ liệu là mô hình thiết kế hiệu quả các ứng dụng trên GPU Các công việc được nhóm thành lưới của các khối luồng, và các khối luồng này độc lập với nhau Sự độc lập này cho phép CUDA xây dựng một bộ

lập lịch đơn giản mà không tạo ra các chi phí hiệu năng dư thừa Tuy nhiên cũng chính sự độc lập giữa các khối lại gây khó khăn đối với người lập trình vì các kernel không thể tạo ra được những rào chắn vượt qua biên giới của khối (ví dụ không đồng bộ được các luồng nằm trong các khối khác nhau) Trong trường hợp lập trình viên muốn tổng hợp các kết quả được tạo ra bởi nhiều khối, các

khối này nói chung phải được thực thi bằng cách chạy kernel trên các lưới khác nhau Nhiều khối có thể phối hợp công việc của chúng với nhau sử dụng các thao tác nguyên tử trên bộ nhớ dùng chung

Các kernel của CUDA không hỗ trợ lời gọi hàm đệ qui Đệ qui khó thực

hiện trong nhân song song bởi vì mỗi luồng có thể tạo ra một stack riêng và bộ

nhớ dành cho stack của hàng chục nghìn luồng trở nên qua lớn Lập trình viên do

vậy phải thay thế các giải thuật đệ quy bằng các mô hình song song lồng nhau

Để hỗ trợ một kiến trúc không đồng nhất bao gồm một CPU và một GPU, với mỗi hệ thống bộ nhớ riêng của chúng, các chương trình CUDA phải được copy dữ liệu và các kết quả giữa bộ nhớ host (CPU) và bộ nhớ thiết bị (GPU)

2.3 Thi ết lập môi trường tính toán CUDA

Để có thể chạy được các chương trình CUDA, chúng ta cần có một môi trường phù hợp, hỗ trợ cho CUDA cả về phần cứng và môi trường phần mềm

Trang 40

2.3.1 Môi trường phần cứng

Vì các ứng dụng CUDA được viết để chạy trên các GPU của Nvidia, nên điều kiện đầu tiên là phải có một GPU mà tính năng CUDA trên đó được thiết lập sẵn Hiện náy các dòng GPU thiết lập sẵn CUDA bao gồm các dòng[8]:

• GeForce 8, 9, 100, 200 Bộ nhớ nhỏ nhất trên các GPU này là 256Mb

• Các GPU Tesla như S870, D870, C870, C1060, C1070

• Các GPU Quadro FX

Các thành phần phần cứng còn lại cấu hình tối thiểu để chạy các ứng dụng CUDA có thể là như sau:

- 1.6 GHz Intel or AMD dual core CPU

- NVIDIA GeForce 8 series or later CUDA enabled GPU

- Windows XP/Vista 32-bit or 64-bit

- Linux 32 or 64-bit

2.3.2 B ộ công cụ phát triển phần mềm

Bộ công cụ phát triển CUDA của NVIDA gồm có 3 thành phần bao gồm[8]:

1 Driver CUDA mới nhất

2 Một bộ Toolkit CUDA bao gồm:

- nvcc C compiler

- CUDA FFT and BLAS libraries for the GPU

- Profiler

Ngày đăng: 12/02/2021, 11:59

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Tính toán hiệu năng cao: Thách Thức và Giải pháp - Kỷ yếu Hội nghị khoa học &amp; Công nghệ lần thứ 9, ban CNTT, ĐHBK TP Hồ Chí Minh Sách, tạp chí
Tiêu đề: Tính toán hiệu năng cao: Thách Thức và Giải pháp -
2. NVIDIA CUDA Programming Guide 2.1 – NVIDIA Corporation Sách, tạp chí
Tiêu đề: NVIDIA CUDA Programming Guide 2.1 –
3. Scalable Parallel Programming with CUDA - Ohn Nickolls, Ian Buck, and Michael Garlan, NVIDIA, Kenvin Skadron University of Virginia Sách, tạp chí
Tiêu đề: Scalable Parallel Programming with CUDA -
16. Graphic-Card Cluster for Astrophysics (GraCCA) --- Performance Tests, Hsi-Yu Schive, Chia-Hung Chien , Shing-Kwong Wong, Tzihong Chiueh Sách, tạp chí
Tiêu đề: Graphic-Card Cluster for Astrophysics (GraCCA) --- Performance Tests
18. Fast N-Body Simulation with CUDA, Lars Nyland - NVIDIA Corporation, Mark Harris - NVIDIA Corporation, Jan Prins - University of North Carolina at Chapel Hill Sách, tạp chí
Tiêu đề: Fast N-Body Simulation with CUDA
19. High Performance Computing on GPUs with CUDA: Data Parallel Algorithms, Vo Duc Khanh – NVIDIA Japan Sách, tạp chí
Tiêu đề: High Performance Computing on GPUs with CUDA: Data Parallel Algorithms
20. Computer Experiments on Classical Fluids - Verlet, J. 1967 - Physical Review, pp. 98–103 Sách, tạp chí
Tiêu đề: Computer Experiments on Classical Fluids -
21. A Hierarchical O(n log n) Force Calculation Algorithm - Barnes and P. Hut, 1986 - Nature324 Sách, tạp chí
Tiêu đề: A Hierarchical O(n log n) Force Calculation Algorithm -
22. Gravitational N-Body Simulations - Aarseth, S. 2003 - Cambridge University Press Sách, tạp chí
Tiêu đề: Gravitational N-Body Simulations -
23. The Rapid Evaluation of Potential Fields Using Programmable Graphics Hardware - Nyland, Lars, Mark Harris, and Jan Prins. 2004 Sách, tạp chí
Tiêu đề: The Rapid Evaluation of Potential Fields Using Programmable Graphics Hardware -
24. Brook for GPUs: Stream Computing on Graphics Hardware - Buck, I., T. Foley, D. Horn, J. Sugerman, K. Fatahalian, M. Houston, and P. Hanrahan Sách, tạp chí
Tiêu đề: Brook for GPUs: Stream Computing on Graphics Hardware -

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