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

Mô phỏng song song sử dụng khối xử lý đồ họa GPGPU

87 334 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 87
Dung lượng 2,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

3 - Cài đặt một số bài toán tính toán và mô phỏng tiêu biểu trên thiết bị xử lý đồ họa GPU bằng ngôn ngữ lập trình CUDA, qua đó đánh giá hiệu năng của các thiết bị này so với thuật toán

Trang 1

MỤC LỤC

DANH MỤC CHỮ VIẾT TẮT

DANH MỤC HÌNH VẼ

MỞ ĐẦU 1

CHƯƠNG 1 5

TỔNG QUAN VỀ GPGPU 5

1.1 Card đồ họa và các khối xử lý đồ họa 5

1.1.1 Sự phát triển của đồ họa và các loại card đồ họa 5

1.1.2 Đường ống biểu diễn đồ họa 11

1.1.3 Các loại card đồ họa GPGPU hiện đại 14

1.1.3.1 Cấu trúc của các card đồ họa GPGPU 15

1.1.3.2 Công nghệ NVidia CUDA 16

1.1.3.3 Công nghệ ATI Stream và OpenCL 18

1.2 Tính toán thông dụng trên khối xử lý đồ họa GPGPU [3] 20

1.2.1 Lập trình GPU cho đồ họa 21

1.2.2 Lập trình GPU cho mục đích tính toán thông dụng 21

1.2.3 Môi trường phần mềm 23

1.3 Một số bài toán phù hợp với GPGPU 25

1.3.1 Những bài toán cơ bản phù hợp cho GPU 25

1.3.2 Mô phỏng hệ thống phức 26

1.3.3 Khai phá dữ liệu và học máy với dữ liệu lớn 27

1.3.4 Xử lý ảnh và thị giác máy tính 28

1.3.5 Các thuật toán số học, các thuật toán và cấu trúc dữ liệu song song 29

CHƯƠNG 2 31

CÔNG NGHỆ NVIDIA CUDA 31

VÀ TÍNH TOÁN SONG SONG TRÊN BỘ XỬ LÝ ĐỒ HỌA GPGPU 31

2.1 Công nghệ NVIDIA CUDA 31

2.1.1 NVidia CUDA là gì? 31

2.1.2 Cấu trúc của CUDA 34

2.1.3 Xử lý trên GPU 36

2.1.4 Các loại bộ nhớ của GPU 37

2.1.5 Nâng cao hiệu năng tính toán 40

2.2 Lập trình song song với CUDA [8] 41

Trang 2

2.2.1 CUDA là mở rộng của ngôn ngữ lập trình C 41

2.2.2 Những mở rộng của CUDA so với ngôn ngữ lập trình C 42

2.2.3 Từ khóa phạm vi kiểu hàm 42

2.2.4 Từ khóa phạm vi kiểu biến 44

2.2.5 Cấu hình thực thi 45

2.2.6 Các biến Built-in 46

2.2.7 Các lệnh điều khiển 46

2.2.8 Các lệnh với bộ nhớ 47

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

2.3 Một số ví dụ tính toán song song với CUDA 53

2.3.1 Bài toán sắp xếp nhanh 53

2.3.2 Bài toán nhân ma trận 55

2.3.3 Bài toán chuyển đổi Fourier 57

2.3.4 Bài toán phân cụm K-Means 58

CHƯƠNG 3 62

MÔ PHỎNG SONG SONG SỬ DỤNG KHỐI ĐỒ HỌA GPGPU 62

3.1 Mô phỏng N-Body 62

3.1.1 Giới thiệu bài toán 62

3.1.2 Cài đặt và thử nghiệm 64

3.2 Mô phỏng chất lưu 65

3.2.1 Giới thiệu bài toán 65

3.2.2 Cài đặt và thử nghiệm 70

3.3 Mô phỏng hệ hạt [14, 20, 21] 71

3.3.1 Giới thiệu bài toán 71

3.3.2 Cài đặt và thử nghiệm 78

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 79

DANH MỤC TÀI LIỆU THAM KHẢO 80

Trang 3

DANH MỤC CHỮ VIẾT TẮT

GPGPU General Purpose computing on Graphics Processing Unit CUDA Compute Unified Device Architecture

DVST Direct View Storage Tube

GUI Graphical User Interface

ALU Arithmetic and Logic Unit

API Application Programming Interface

SIMT Single Instruction, Multiple Threads

SM Streaming Multi Processor

SPMD Single Program Multiple Data

FEA Finite Element Analys

ODE Ordinary Differential Equation

Trang 4

DANH MỤC HÌNH VẼ

Hình 1.1 Khung dây hình cầu .5

Hình 1.2 Đồ họa quét mành 7

Hình 1.3 Hình cầu được tô bóng theo Gouraud 8

Hình 1.4 Ấm trà Utah được tô bóng 8

Hình 1.5 Hình ảnh một ngôi nhà sử dụng Blender3D 9

Hình 1.6 So sánh GFlops giữa GPU và CPU 11

Hình 1.7 Lược đồ ống dẫn đồ họa 13

Hình 1.8 Sơ đồ cấu trúc của CPU và GPU 15

Hình 1.9 Sơ đồ kiến trúc thiết bị hơp nhất của một card đồ họa Nvidia 16

Hình 1.10 Sơ đồ cấu trúc OpenCL 19

Hình 1.11 Cấu trúc thiết bị Stream của ATI 20

Hình 2.1 Kiến trúc bộ phần mềm NVidia CUDA 35

Hình 2.2 Các thao tác thu hồi và cấp phát bộ nhớ với CUDA 36

Hình 2.3 Vùng nhớ dùng chung mang dữ liệu gần ALU hơn 36

Hình 2.4 Phân cấp luồng CUDA 39

Hình 2.5 Bộ đa xử lý dòng 40

Hình 2.6 Luồng làm việc SIMT 40

Hình 2.7 Cấu trúc bộ nhớ thiết bị GPU 41

Hình 2.8: Hiệu năng sắp xếp nhanh nhờ sử dụng GPU so với sử dụng CPU 58

Hình 2.9 Thời gian thực hiện nhân ma trận sử dụng CPU so với sử dụng GPU 60

Hình 2.10: Thời gian thực hiện chuyển đổi Fourier sử dụng GPU so với CPU 62

Hình 2.11 So sánh thời gian tính toán k-means giữa GPGPU và CPU 65

Hình 3.1 Hình ảnh mô phỏng N-body 71

Hình 3.2 So sánh hiệu năng mô phỏng N-Body giữa GPU và CPU 73

Trang 5

Hình 3.3 Lưới vận tốc của chất lưu (Mô phỏng trạng thái chất lưu được biểu

di ễn trên một lưới kích thước MxN Các mũi tên thể hiện vận tốc) 74

Hình 3.4 Sự di chuyển của chất lưu 77

Hình 3.5 Kết quả mô phỏng đám mây sử dụng động lực học chất lưu 78

Hình 3.6 Kết quả mô phỏng động lực học chất lưu 79

Hình 3.7 Mô phỏng hạt sử dụng GPU 79

Hình 3.8 Một hệ hạt được sử dụng để mô phỏng đám cháy 79

Hình 3.9 Một hệ hạt được sử dụng để mô phỏng thiên hà 83

Hình 3.10 Một hệ hạt được sử dụng để mô phỏng vụ nổ bom 84

Hình 3.11 Lưới đồng nhất sử dụng các phép toán nguyên tử 85

Trang 6

mô hình hóa, tự động, điều khiển học… và đặc biệt là công nghệ thông tin Công nghệ mô phỏng ngày càng được sử dụng rộng rãi trong mọi lĩnh vực hoạt động của con người từ mô phỏng các vụ nổ hạt nhân, phản ứng hóa học đến mô phỏng các cơn bão và thảm họa thiên nhiên như động đất, lũ lụt;

từ mô phỏng trong nghiên cứu, phát triển khoa học, công nghệ đến ứng dụng

mô phỏng trong lĩnh vực giáo dục, đào tạo Một chương trình máy tính có thể

mô phỏng diễn biến điều kiện thời tiết, các mạch điện tử, phản ứng hóa học,

cơ điện tử, hệ thống điều khiển tương tác, thậm chí cả các quá trình sinh học cực kỳ phức tạp Về lý thuyết, bất kỳ sự vật, hiện tượng nào có thể được mô

tả bằng dữ liệu và phương trình toán học đều có thể được mô phỏng trên máy tính Mô phỏng thường là rất khó khăn vì hầu hết các hiện tượng tự nhiên có

số lượng gần như vô hạn các tham số gây ảnh hưởng Vì vậy để phát triển các ứng dụng mô phỏng có hiệu quả cần xác định những yếu tố quan trọng nhất ảnh hưởng đến mục tiêu của nhiệm vụ mô phỏng

Tuy nhiên các bài toán mô phỏng trong thời gian thực thường rất phức tạp và luôn đòi hỏi một khối lượng tính toán vô cùng lớn Để giảm thời gian tính toán mô phỏng, ngoài việc cải tiến về mặt thuật toán thì việc tăng hiệu năng của các thiết bị tính toán cũng rất quan trọng

Hiện nay việc tăng tốc độ của CPU đã chạm tới ngưỡng tối đa vì ở tốc

độ cao, nhiệt độ CPU cũng tăng cao trong khi các giải pháp tản nhiệt đã đến mức giới hạn, không thể đáp ứng được khả năng làm mát CPU Trước tình

Trang 7

2

hình đó các nhà nghiên cứu vi xử lý đã chuyển hướng sang phát triển công nghệ đa lõi với cơ chế xử lý song song trong các máy tính Trong những năm gần đây, một trong những hướng nghiên cứu nhiều tiềm năng là sử dụng chip

đồ họa GPU và công nghệ xử lý song song CUDA do hãng NVIDIA phát triển nhằm tăng tốc độ xử lý, nâng cao hiệu quả của thuật toán

Việc tăng tốc trong quá trình tính toán không những đòi hỏi những thiết

bị GPU có khả năng xử lý tốc độ cao với dữ liệu khổng lồ mà cần phải có những giải thuật song song hữu hiệu

Xuất phát từ nhu cầu trên tôi chọn đề tài: “Mô phỏng song song sử dụng khối xử lý đồ họa GPGPU”

Mục đích của đề tài là nghiên cứu một số bài toán tính toán và mô phỏng song song trên khối xử lý đồ họa GPGPU:

- Tìm hiểu cơ sở lý thuyết về cấu trúc hệ thống xử lý đồ họa GPU và công nghệ NVIDIA CUDA

- Nghiên cứu, cài đặt thử nghiệm và đánh giá hiệu năng tính toán qua một số bài toán tính toán song song trên khối xử lý GPGPU

- Nghiên cứu và cài đặt thử nghiệm, đánh giá hiệu năng của một số bài toán mô phỏng trên khối xử lý đồ họa GPGPU

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

Trong khuôn khổ luận văn thuộc loại nghiên cứu và ứng dụng, tôi chỉ giới hạn nghiên cứu các vấn đề sau:

- Lý thuyết tính toán song song

- Kiến trúc GPU và công nghệ NVIDIA CUDA

Trang 8

3

- Cài đặt một số bài toán tính toán và mô phỏng tiêu biểu trên thiết bị xử

lý đồ họa GPU bằng ngôn ngữ lập trình CUDA, qua đó đánh giá hiệu năng của các thiết bị này so với thuật toán tương tự trên CPU

Nghiên cứu cơ sở toán học, bổ sung kiến thức cần thiết cho luận văn:

Lý thuyết về tính toán song song, một số bài toán nổi tiếng sử dụng tính toán song song, một số bài toán mô phỏng, lý thuyết và cơ chế hoạt động tính toán trong GPU và công nghệ CUDA

Tìm hiểu, nghiên cứu, phân tích các công trình liên quan đến đề tài luận văn: tài liệu, tạp chí, bài báo…

- Về thực nghiệm:

Cài đặt các chương trình tính toán và mô phỏng trên chip đồ họa GPGPU với công nghệ CUDA và đánh giá hiệu năng

4 Kết quả dự kiến

- Nghiên cứu được một số giải thuật tính toán song song

- Cài đặt các giải thuật tính toán song song chạy trên thiết bị đồ họa GPU

- Xây dựng một số chương trình mô phỏng trên thiết bị đồ họa GPGPU với công nghệ CUDA

 Về mặt lý thuyết

- Nắm được các giải thuật, các mẫu thiết kế tính toán song song

Trang 9

6 Bố cục luận văn

Nội dung chính của luận văn được chia thành 3 chương như sau:

Chương 1: Tổng quan về GPGPU

Trong chương này giới thiệu tổng quan về card đồ họa và các khối xử lý

đồ họa, việc tính toán với mục đích thông dụng trên khối xử lý đồ họa GPGPU và một số bài toán phù hợp với việc tính toán trên GPGPU

Chương 2: Công nghệ NVIDIA CUDA và lập trình song song trên khối xử lý đồ họa GPGPU

Chương này giới thiệu chi tiết về kiến trúc CUDA, trình bày ngôn ngữ lập trình song song CUDA trên thiết bị đồ họa GPU của hãng NVIDIA Áp dụng giải quyết một số bài toán sắp xếp nhanh, nhân ma trận, chuyển đổi Fourier, phân cụm K-Means, bài toán Người du lịch …bằng phương pháp song song dùng ngôn ngữ CUDA thực thi trên thiết bị đồ họa GPGPU và đánh giá hiệu quả của nó so với trên CPU

Chương 3: Mô phỏng song song sử dụng khối đồ họa GPGPU

Trong chương này tác giả sẽ trình bày khá chi tiết một số bài toán mô phỏng tiêu biểu như: mô phỏng N-Body, mô phỏng hạt (phân tử), mô phỏng động lực học chất lưu, mô phỏng sóng biển Tác giả cũng tiến hành cài đặt

và thử nghiệm các bài toán này trên khối xử lý đồ họa GPGPU của NVIDIA

để đánh giá hiệu năng mô phỏng của chúng so với trên CPU

Trang 10

5

CHƯƠNG 1 TỔNG QUAN VỀ GPGPU

Ý tưởng sử dụng các loại card đồ họa phục vụ cho mục đích tính toán ban đầu không được tính đến trong quá trình phát triển đồ họa máy tính Cùng với sự phát triển của xử lý đồ họa 3D và 2D cũng như sự tăng trưởng của năng lực phần cứng, ý tưởng này bắt đầu được quan tâm nhiều hơn Ngoài việc sử dụng các card đồ họa vào mục đích biểu diễn đồ họa thuần túy, người

ta đã bắt đầu quan tâm nhiều tới các sức mạnh tính toán song song trên card

đồ họa hiện đại

Đồ họa máy tính bắt đầu xuất hiện từ sau những năm 1950 Ở thời điểm

đó, các màn hình hiển thị đơn sắc CRT dựa trên đèn hình Braun có thể vẽ các điểm và đường thẳng trên một màn hình vector Các hình phức tạp như các biểu tượng được ghép bởi các đoạn thẳng riêng biệt Những thiết bị này tỏ ra khá chậm, đắt đỏ và không xác thực đối với những người dùng thông thường Trong những năm 1960, xuất hiện đồ họa dạng khung dây đầu tiên với khả năng vẽ đường thẳng đã mô phỏng được các đồ họa giống như 3D

Hình 1.1 Khung dây hình cầu

Ivan Sutherland, người đi tiên phong trong lĩnh vực đồ họa máy tính, đã chỉ ra trong luận án tiến sỹ của mình vào năm 1963 tại trường MIT về tiềm

Trang 11

6

năng của tương tác người – máy Cuốn sổ nháp (Sketchpad) cho phép tương tác mà ông trình bày dựa trên một màn hình vector với thiết bị đầu vào là một chiếc bút cảm ứng Sự kiện này đã đánh dấu nguồn gốc của đồ họa máy tính Sutherland đã phát minh ra rất nhiều thuật toán chung mà ngày nay nó vẫn còn được sử dụng trong đồ họa máy tính, như thuật toán vẽ và cắt xén đường thẳng Ông cũng định nghĩa vòng lặp tương tác cơ sở, xuất phát từ việc xử lý đầu vào người dùng, cập nhật trạng thái chương trình, hiển thị và làm tươi các

đồ họa mới và sau đó lặp lại thủ tục này

Ở thời điểm đó, các thiết bị đặc biệt gọi là các bộ xử lý hiển thị (DPU) được sử dụng để hiển thị các đồ họa Sức mạnh tính toán của các máy chủ đã

bị quá giới hạn và trở nên vô cùng chậm chạp khi việc vẽ hình được xử lý trực tiếp trên đó Để tốt hơn, các máy chủ biên dịch một danh sách hoặc một file đối tượng cần hiển thị và gửi nó tới DPU để tiết kiệm thời gian tính toán Jack Bresenham, thời gian đó đang là lập trình viên tại IBM, vào năm

1962 ông đã trình bày một thuật toán vẽ đường thẳng trên các màn hình quét mành mà không sử dụng các phép toán dấu phảy động và các phép toán phức tạp với việc cực tiểu hóa các sai số làm tròn khi vẽ các đường thẳng rời rạc Sau đó, ông đã mở rộng nó cho các đường tròn Chính những điều này

đã mở đầu cho kỹ thuật đồ họa quét mành Lúc này, việc khử răng cưa đối với các hình vẽ dạng đường thẳng và đường cong là chủ đề chính trong đồ họa máy tính Người ta đã sử dụng tối đa các thuật toán này vào cuối năm 1960 Bóng lưu hình hiển thị trực tiếp (DVST) được phát minh, có một lưới chắn kim loại nguyên chất lưu lại ánh sáng ở một vị trí tại một thời điểm Nếu so sánh với các màn hình vector, DVST có thể biểu diễn và lưu giữ đồ họa mà không cần một thời hạn vẽ lại hình Một cách vẽ hình hiện đại với các mành hình đồ họa quét mành được đưa ra với phần cứng tương ứng mạnh hơn

Trang 12

7

Hình 1.2 Đồ họa quét mành Trong khoảng thời gian từ năm 1970 đến 1980, các thành tựu đã đạt được từ việc các ảnh vẽ dưới dạng khung dây cho tới quét mành, đổ đầy các

đa giác để tạo cảm giác như ảnh 3D thực và tạo cảm giác thật với kỹ thuật tô bóng Các thiết bị đồ họa trở thành các bộ nhớ đệm cho các phần tử ảnh có khả năng truy nhập được, gọi là các điểm ảnh (pixel), có thể được ánh xạ trực tiếp bởi thiết bị vào trong màn hình quét mành bằng việc làm tươi trong một khoảng tần số nào đó Các ứng dụng và game đồ họa đầu tiên đã được phát triển Tuy nhiên, đồ họa 3D thời gian thực vẫn yêu cầu hiệu năng tính toán quá cao Toán học chưa đáp ứng được trong việc mô phỏng không gian 3D khi mà các đa giác và các đối tượng được phát triển ngày càng nhiều Thêm vào đó, các tiêu chuẩn ISO cho 2D và 3D bắt đầu được mở ra với “GSK” ở châu Âu và “Core” ở Bắc Mỹ Năm 1971, Henri Gouraud trình bày một phương pháp tô bóng các đa giác, gọi là phương pháp tô bóng Gouraud Năm

1975, Bui-Tuong Phong trình bày các phương pháp của kỹ thuật tô bóng màu tốt hơn, gọi là kỹ thuật tô bóng Phong, và ông là người đầu tiên trình bày một

mô hình chiếu sáng toàn cục cho các ảnh được sinh ra từ máy tính, gọi là mô hình chiếu sáng Phong, đã tạo ra một cảm giác 3D tốt James F Blinn đã cải tiến các thuật toán này thành một mô hình chiếu sáng cục bộ vào năm 1977 cho việc phản xạ trên các bề mặt với mô hình Blinn-Phong Các phương pháp ánh xạ kết cấu cho các đa giác được đi tiên phong bởi Edwin Catmull trong luận án tiến sỹ của ông vào năm 1974

Trang 13

8

Hình 1.3 Hình cầu được tô bóng theo Gouraud

Hình 1.4 Ấm trà Utah được tô bóng

Giữa những năm 1980-1990, ngày càng nhiều màu sắc được đưa vào trong kỹ thuật, phần cứng rẻ hơn và nhanh hơn được chế tạo, các phương pháp

mô phỏng 3D trung thực hơn được nghiên cứu ngày càng nhiều Trong thời gian đầu những năm 1980, đồ họa ngày càng phát triển với các chương trình thiết kế có sự trợ giúp của máy tính (CAD) và các giao diện đồ họa người dùng (GUI) xuất hiện phổ biến trong các máy tính Macintosh Năm 1981, IBM đã trình làng thiết bị đồ họa màu đầu tiên, nó trở thành một tiêu chuẩn cho thiết bị

xử lý đồ họa của các máy tính cá nhân Các kỹ thuật biểu diễn, ví dụ như ánh

xạ môi trường của Blinn, tô bóng trơn, bóng mờ và các kỹ thuật ánh xạ phản xạ được đưa ra Không may thay, chúng vẫn thực sự quá chậm đối với các phần cứng trong việc trình diễn và tính toán trong thời gian thực

Các giao diện lập trình đồ họa chuẩn như OpenGL và DirectX để vẽ và biểu diễn đã được phát hành vào những năm 1990 Các phần cứng mới và nhanh hơn được sản xuất với sự gia tăng một lượng lớn bộ nhớ và phần cứng

hỗ trợ cho việc thực thi ánh xạ kết cấu, các phép toán hỗn hợp, bộ đệm thao

Trang 14

9

tác và các kỹ thuật biểu diễn khác Các chương trình 3D CAD được phát triển

và phần mềm mô hình hóa 3D xuất hiện như Maya, Blender3D, và 3D Studio Max Các bộ phim hoàn chỉnh được tạo trên máy tính như “Toy Story” đã được chiếu Các card đồ họa và các máy tính cá nhân trở nên vừa phải với mọi người và thậm chí các game 3D thời gian thực đã có thể thực hiện được Với yêu cầu phát triển liên tục của các ứng dụng 3D đặc biệt là trong ngành công nghiệp trò chơi và các dự án làm phim ảnh, giữa những năm 2000 cho đến 2010, chủ nghĩa hiện thực hình ảnh ngày càng đưa vào nhiều hơn trong việc trình diễn thời gian thực với những cải tiến đồ sộ về hiệu năng phần cứng cho các phương pháp trình diễn và tô bóng Người dùng ngày càng

có cơ hội tiếp xúc với những thiết bị đồ họa hiệu năng cao hơn với chi phí rẻ hơn Trong các nước công nghiệp, hầu hết các hộ gia đình đều có tối thiểu một chiếc máy tính hiệu năng cao

Hình 1.5 Hình ảnh một ngôi nhà sử dụng Blender3D

Các loại card đồ họa đầu tiên có khả năng lập trình GPGPU xuất hiện vào năm 2006 cho phép các nhà phát triển sử dụng sức mạnh GPU trong mục đích tính toán thông thường, bên cạnh việc biểu diễn toán học và các kỹ thuật

đồ họa 2D và 3D Năm 2010, hãng NVidia

với công nghệ CUDA và hãng

Trang 15

Trải qua quá trình phát triển, đến nay số lượng màu sắc đã tăng từ đơn sắc lên tới 16.7 tỷ màu Với hơn 7 tỷ transistor trong phần cứng (công nghệ Maxwell mới nhất của NVIDIA) cho phép tốc độ tính toán đạt tới hàng TFlops Ví dụ, công nghệ “Fermi” của Nvidia năm 2010 cung cấp 512 nhân, tốc độ mỗi nhân đạt 1.5 GHz, băng thông bộ nhớ 192 GBytes/s với cấu hình tiêu chuẩn cho bộ nhớ 1.5 GB, có sức mạnh tính toán vào khoảng 1.5 TFlops đến 2.7 TFlops, phụ thuộc vào độ chính xác của dấu phảy động, tùy theo khai báo của các nhà sản xuất

Dưới đây là bảng so sánh ngắn gọn sự khác nhau về hiệu năng giữa các GPU và CPU thực tế:

Nvidia GeForce GTX 580 (Fermi) 2.7 TFlops 192 Gbytes/s

Trang 16

11

NVIDIA GM107 (Maxwell) 1305.6 GFlops 86.4 Gbytes/s

Bảng 1.1 GFlops và băng thông của các GPU và CPU

Hình 1.6 So sánh GFlops giữa GPU và CPU [30]

Biểu đồ so sánh ở trên cho thấy từ khoảng giữa năm 2008 trở đi, sự chênh lệch về hiệu năng giữa GPU so với CPU là rất lớn

Trong tương lai, theo định luật Moore, chưa có dấu hiệu nào cho thấy

sự chững lại của tốc độ phát triển GPU, với sự tăng trưởng của hiệu năng phần cứng và bộ nhớ, sức mạnh tính toán có thể tăng xấp xỉ gấp đôi trong vòng hai năm

Việc biểu diễn đồ họa 3D và 2D thường được xử lý bằng cách vẽ các đa giác ở dạng các điểm, đường thẳng, tam giác hay tứ giác, được xây dựng từ

Trang 17

12

các đỉnh, các cạnh và thể hiện trên các màn hình hay màn ảnh dạng 2D Card

đồ họa có khả năng phản hồi việc xử lý các dữ liệu đa giác thành các điểm ảnh kết quả, đại thể gọi là luồng dữ liệu dạng ống Tồn tại một số kỹ thuật biểu diễn khác như dò tia hoặc các thiết bị vẽ 3D thực, nhưng đều cho tốc độ tính toán chậm và không tối ưu về phần cứng

Ban đầu, ống dẫn đồ họa là một giai đoạn xử lý cố định bên trong card

đồ họa, được chỉ ra ở hình 1.7 Nói chung, dữ liệu đa giác được tính toán hoặc được nạp thường ở dạng các đỉnh tam giác, được truyền tới ống dẫn card đồ họa như dữ liệu đầu vào Chúng được xử lý trong ống ở các giai đoạn khác nhau và được tính toán để đưa ra các điểm ảnh kết quả trên màn ảnh Cụ thể, các đầu vào của ống dẫn đồ họa là các đỉnh được định nghĩa ở các vị trí không gian 2D hoặc 3D với các thuộc tính là các kết cấu, màu sắc, các véc tơ thông thường và các tham số, miêu tả các đối tượng hình học khác Để miêu tả môi trường không gian và các hình vẽ phối cảnh, các ma trận 4D được sử dụng và thiết lập cho các phối cảnh, các đối tượng…

Giai đoạn đầu tiên trong ống dẫn đồ họa là chuyển đổi các đỉnh lên màn ảnh hoặc tọa độ mắt người bằng việc chia phối cảnh sử dụng các phép toán

ma trận đầy đủ với các ma trận cho trước hiển thị trong không gian 2D Việc điều chỉnh màu sắc cho các đỉnh chiếu sáng và các hiệu ứng trạng thái khác được áp dụng trong quá trình xử lý này bằng cách đưa vào các thuộc tính của đỉnh đầu vào Cùng với các phép toán cắt xén và chọn lọc được xử lý ở đây để loại bỏ các đối tượng không được nhìn thấy Các đầu ra của giai đoạn này được chuyển đổi, các đỉnh được chuẩn hóa cho các màn ảnh hiển thị 2D với các trạng thái màu và một độ sâu xác định cho hình vẽ Chương trình đã xử lý (trừ cắt xén và chọn lọc) được gọi chung là tô bóng đỉnh Với mỗi đỉnh đầu vào của một đa giác, một chương trình tô bóng đỉnh được áp dụng một lần Trong quá trình phát triển, chức năng xử lý cố định này được thay đổi thành

Trang 18

13

chức năng có thể lập trình bởi người dùng, có thể sử dụng để thao tác với tọa

độ các đỉnh và thuộc tính trạng thái để đạt được những hiệu ứng đặc biệt, chẳng hạn như làm biến dạng hoặc sinh động các đối tượng

Bộ quét mành làm đầy và tô bóng các đối tượng hình học nguyên thủy bằng cách nội suy các giá trị của màu sắc, các tọa độ kết cấu, các véc tơ thông thường và dọc theo các cạnh của tam giác để đưa ra các phân mảnh của hình

vẽ với vị trí, độ sâu và màu sắc của nó Sự pha trộn, ánh xạ kết cấu, chiếu sáng từng điểm ảnh và các phép toán đệm khác được áp dụng trong bộ quét mành cho mỗi phân mảnh Chương trình được thực thi này gọi là tô bóng điểm ảnh hay phân mảnh Ban đầu nó cũng là một chức năng phần cứng cố định, sau này đã phát triển thành chức năng có thể định nghĩa bởi người dùng,

để thao tác với các phân mảnh về màu sắc và trạng thái, ví dụ như các hiệu ứng màn chắn…

Cuối cùng, các phân mảnh của bộ quét mành được định giá thành các điểm ảnh hình vẽ kết quả và được ghi vào trong bộ đệm khung Để ngăn ngừa việc ghi đè và chú trọng sự hiển thị logic của các đối tượng dựa vào độ sâu

Trang 19

Do mối quan hệ độc lập giữa các đối tượng đồ họa, các hình vẽ nguyên thủy và việc xử lý các đỉnh trong ống dẫn đồ họa, các bộ xử lý đa lõi được sử dụng để song song hóa công việc Mỗi đỉnh và mảnh được đi qua ống dẫn đồ họa ở bước biểu diễn theo cách giống nhau Các bộ xử lý được tối ưu hóa cao

và sử dụng các phép toán số học và dấu phảy động Các bộ xử lý đỉnh được tối ưu hóa trong tính toán các véc tơ và ma trận Các bộ xử lý mảnh được tối

ưu cho tính toán các giá trị và màu sắc Các bộ xử lý này hoạt động nhanh một cách phi thường so với CPU để tính toán hàng tỷ phép tính và xử lý hàng ngàn phân mảnh, đỉnh và các hình nguyên thủy trên giây để thu được khả năng biểu diễn thời gian thực gần như thực tế Nhưng nếu nhìn ở khía cạnh bất lợi thì các bộ xử lý này không có chức năng rộng lớn (không linh hoạt) như của một CPU

GPGPU là viết tắt của General-Purpose computing on Graphic Processing Units, tức là sử dụng các khối xử lý đồ họa cho mục đích tính toán thông thường (chứ không phải cho mục đích đồ họa) Các lõi xử lý đỉnh, mảnh… được miêu tả ở phần trước được thay thế bởi các bộ đa xử lý trong GPGPU Điều này đã mở ra tính khả thi cho các nhà phát triển trong việc truy nhập và sử dụng các bộ xử lý này với mục đích tính toán thông thường bên cạnh việc tính toán trong ống dẫn đồ họa với các bộ tô bóng đỉnh, mảnh và các đối tượng hình học khác Dĩ nhiên, trong các thiết bị GPGPU vẫn có chức

Trang 20

15

năng biểu diễn đồ họa như bình thường GPGPU thường được xem như là công nghệ điện toán lưới

Cấu trúc của một GPU hiện đại không khác quá nhiều so với các CPU (xem hình 1.9) Một CPU phổ biến được cấu thành bởi một bộ nhớ cache lớn, một hoặc nhiều khối xử lý điều khiển, một hoặc nhiều nhân tính toán (ALU) Các CPU được nối với một bộ nhớ ngoài (RAM) Ngược lại, một GPU được xây dựng với nhiều nhân, mỗi nhân có một bộ nhớ cache nhỏ, vài bộ xử lý điều khiển cho các nhân này và cho các luồng ứng dụng Một bộ nhớ lớn có thể truy nhập được nối ngay sát các GPU trên các thiết bị đồ họa

Hình 1.8 Sơ đồ cấu trúc của CPU và GPU [30]

Hãng NVidia gọi nguyên lý thiết kế này là công nghệ CUDA (Computing Unified Device Architecture – kiến trúc thiết bị tính toán hợp nhất), còn hãng ATI gọi đó là công nghệ dòng - Stream NVidia và ATI đều đồng nhất quan điểm về ý tưởng và khái niệm GPGPU, tuy nhiên họ lại sử dụng các ngôn ngữ cũng như các kỹ thuật khác nhau (sẽ được trình bày ở phần tiếp theo) Hai giao diện lập trình ứng dụng (API) chính được cung cấp

đó là OpenCL (của hãng ATI) và CUDA (của hãng NVidia)

Trang 21

16

Hình 1.9 Sơ đồ kiến trúc thiết bị hơp nhất của một card đồ họa Nvidia Một card đồ họa NVidia với công nghệ CUDA được gom thành các nhóm bộ đa xử lý dòng (Streaming Multi Processors - SM) Mỗi SM được kết nối với bộ nhớ toàn cục của card Để sử dụng tính toán, một khối bộ nhớ bất biến được tách khỏi bộ nhớ toàn cục Mỗi SM được cấu thành bởi nhiều bộ xử

lý dòng (Streaming Processors -SP), một bộ nhớ cache và một bộ xử lý điều khiển Tồn tại một khối bộ nhớ nhỏ để sử dụng cho dữ liệu tính toán chung, nó

có thể truy nhập đồng thời bởi tất cả các SP khác Bộ nhớ này được xem như là

bộ nhớ chia sẻ của CUDA Mỗi SP được sử dụng để xử lý một hoặc nhiều luồng NVidia gọi GPU là công nghệ thiết kế đơn lệnh đa luồng (SIMT)

Một bộ quản lý thực thi luồng với bộ nhớ cache lệnh được cài đặt trên đỉnh của các SM, sử dụng để lập lịch và điều khiển các luồng, các bộ xử lý và phát triển ứng dụng Luồng ống biểu diễn đồ họa thông thường cũng được điều khiển và mô phỏng bởi bộ quản lý thực thi luồng trong các bước thực thi

Trang 22

Dưới đây là bảng thông số kỹ thuật cho các phiên bản khác nhau được tác giả tham khảo tại http://en.wikipedia.org/wiki/CUDA Một số khái niệm cần xem xét sẽ được giải thích ở phần sau

Khả năng tính toán (phiên bản) Đặc tính kỹ thuật

1.0 1.1 1.2 1.3 2.x 3.0 3.5 5.0

Giá trị tối đa của chiều x, y hoặc z

Giá trị tối đa của chiều x, y của một

Trang 23

Số lệnh tối đa có thể xử lý trong nhân 2 million 512 million

Bảng 1.2 Các thông số kỹ thuật của các phiên bản kiến trúc CUDA

Về cơ bản, công nghệ Stream của ATI gần giống với công nghệ CUDA của NVidia nhưng chúng sử dụng một số ít các ký hiệu khác nhau cho các thành phần đơn lẻ API cho lập trình với OpenCL được đồng phát triển bởi AMD/ATI và NVidia Công nghệ Stream ATI được dựa trên API của OpenCL

Một thiết bị tính toán GPU, chẳng hạn như là một card đồ họa, cấu thành bởi nhiều bộ tính toán (Computing Units-CU) Các bộ tính toán này có thể có nhiều nhân (Stream Cores-SC) dùng để điều khiển nhiều phần tử xử lý (Processing Elements –PE) Các CU tương đương với các SM và SC tương đương với SP trong CUDA Các PE thể hiện các đơn luồng Mỗi CU có bộ nhớ cục bộ tương đương với bộ nhớ chia sẻ trong CUDA Tất cả các CU đều được kết nối với bộ nhớ thiết bị toàn cục

Trang 24

19

Hình 1.10 Sơ đồ cấu trúc OpenCL

Mỗi SC có một bộ điều khiển lệnh, một bộ thực thi nhánh và truy nhập tới các thanh ghi mục đích thông dụng có thể sử dụng bởi các PE đơn hoặc các luồng công việc Một bộ xử lý Ultra-Threaded Dispatch điều khiển và lập lịch các luồng ứng dụng và các luồng nằm trên đỉnh của các CU giống như bộ quản lý thực thi luồng ở trên các thiết bị CUDA Các thiết bị OpenCL chỉ ra rằng tất cả các SC trong một CU thực thi cùng một lệnh tại mỗi chu trình SIMT, và có thể vận chuyển tới bốn luồng hay phần tử xử lý đồng thời

Trang 25

20

Hình 1.11 Cấu trúc thiết bị Stream của ATI

Không có sự chỉ định rõ ràng về năng lực của phần cứng đối với các card đồ họa ATI sử dụng công nghệ Stream giống như các card NVidia CUDA, nhưng các tham số và khả năng cơ bản của phần cứng cũng được yêu

cầu sử dụng giao diện lập trình ứng dụng là OpenCL

GPGPU là việc ánh xạ các bài toán tính toán mục đích thông thường lên GPU sử dụng phần cứng đồ họa theo cách giống như bất cứ ứng dụng đồ họa chuẩn nào Tác giả sẽ bắt đầu bằng cách mô tả lập trình trên GPU sử dụng các thuật ngữ đồ họa, sau đó cho thấy cách các bước tương tự được sử dụng theo cách thông thường để tạo ra ứng dụng GPGPU, và cuối cùng là sử dụng

Trang 26

21

các bước tương tự để thể hiện đơn giản hơn và trực tiếp hơn về cách ngày nay các ứng dụng tính toán trên GPU được viết như thế nào

Chúng ta sẽ bắt đầu với cùng một đường ống dẫn GPU đã mô tả ở trên

và tập trung vào các khía cạnh lập trình được của đường ống này

- Lập trình viên xác định dạng hình học sẽ bao phủ một khu vực trên màn hình Quá trình quét mành trên màn hình tạo ra một mảnh ở mỗi vị trí điểm ảnh được bao phủ bởi hình học đó

- Mỗi mảnh được làm bóng mờ bởi chương trình mảnh

- Các chương trình mảnh tính giá trị của các mảnh bằng cách kết hợp của phép toán toán học và bộ nhớ toàn cục đọc từ bộ nhớ kết cấu toàn cục

- Các hình ảnh kết quả sau đó có thể được sử dụng như là kết cấu trong tương lai đi qua các đường ống dẫn đồ họa

Một trong những khó khăn trong lịch sử lập trình ứng dụng GPGPU đó

là mặc dù các tác vụ với mục đích thông dụng của chúng không có liên quan

gì tới đồ họa, các ứng dụng vẫn phải được lập trình bằng cách sử dụng các API đồ họa Ngoài ra, chương trình đã được cấu trúc trong điều kiện của đường ống đồ họa, với các đơn vị lập trình được chỉ có thể truy cập được như một bước trung gian trong đường ống, trong khi các lập trình viên chắc chắn muốn truy cập vào các đơn vị lập trình được trực tiếp

Các môi trường lập trình sẽ được tác giả mô tả chi tiết trong chương 2, giải quyết khó khăn này bằng cách cung cấp một giao diện tự nhiên hơn, trực tiếp hơn, không có giao diện đồ họa cho phần cứng và đặc biệt là các đơn vị lập trình được Ngày nay, ứng dụng tính toán GPU được tổ chức theo cách sau:

Trang 27

4) Các vùng đệm chứa kết quả trong bộ nhớ toàn cục sau đó có thể được sử dụng như là một đầu vào của tính toán sau đó

Mô hình lập trình này mạnh vì một số lý do sau:

- Đầu tiên, nó cho phép các phần cứng khai thác triệt để cơ chế song song dữ liệu của các ứng dụng bằng cách xác định rõ ràng cơ chế song song trong chương trình

- Tiếp theo, nó gây ấn tượng bằng việc tạo ra sự cân bằng vững chắc giữa tính phổ biến (một thủ tục hoàn toàn có thể lập trình tại mỗi phần tử) và sự hạn chế để đảm bảo hiệu năng tốt (mô hình SPMD,

có các hạn chế về phân nhánh cho hiệu quả, có hạn chế về dữ liệu giao tiếp giữa các thành phần và giữa hạt nhân /chu kỳ, v.v )

- Cuối cùng, khả năng truy cập trực tiếp đến các đơn vị lập trình được

đã loại bỏ nhiều thách thức phức tạp của các lập trình viên GPGPU trước đây trong việc đồng thời chọn giao diện đồ họa cho lập trình mục đích thông dụng

Kết quả là các chương trình thường được thể hiện bằng ngôn ngữ lập trình quen thuộc (chẳng hạn như ngôn ngữ lập trình của NVIDIA giống như cú pháp của C thể hiện trong môi trường lập trình CUDA của họ) và đơn giản hơn

Trang 28

23

và dễ dàng hơn để xây dựng và gỡ lỗi (và đang ngày càng hoàn thiện như là các công cụ lập trình độc lập) Điều đó tạo nên một mô hình lập trình cho phép người dùng tận dụng đầy đủ các sức mạnh phần cứng của GPU nhưng cũng cho phép mô hình lập trình bậc cao ngày càng mạnh để có thể xây dựng các ứng dụng phức tạp

Trong quá khứ, phần lớn các chương trình GPGPU được thực hiện trực tiếp thông qua các API đồ họa Mặc dù nhiều nhà nghiên cứu đã thành công trong việc làm cho các ứng dụng làm việc thông qua các API đồ họa nhưng có một điều không phù hợp cơ bản giữa mô hình lập trình truyền thống mà mọi người đang dùng và các mục tiêu của các API đồ họa Ban đầu, người ta sử dụng các hàm cố định, các đơn vị đồ họa cụ thể (ví dụ như các bộ lọc kết cấu (texture filter), trộn (blending), và các phép toán tạo mẫu tô đệm để thực hiện các thao tác GPGPU Điều này nhanh chóng trở nên tốt hơn khi các phần cứng là bộ xử lý các mảnh hoàn toàn lập trình được với ngôn ngữ assembly

mã giả, nhưng cách này vẫn khó tiếp cận cho dù đã có rất nhiều nhà nghiên cứu hăng hái bắt tay vào

Với DirectX 9, lập trình đổ bóng cao cấp có thể thực hiện thông qua ngôn ngữ đổ bóng cấp cao ("high-level shading language” - HLSL), nó được biểu diễn giống như giao diện lập trình C cho lập trình đổ bóng NVIDIA Cg cung cấp các tính năng tương tự như HLSL, nhưng đã có thể biên dịch ra nhiều đích và cung cấp ngôn ngữ lập trình cấp cao đầu tiên cho OpenGL Ngôn ngữ đổ bóng OpenGL (OpenGL Shading Language - GLSL) bây giờ là ngôn ngữ đổ bóng tiêu chuẩn cho OpenGL Tuy nhiên, vấn đề chính với Cg / HLSL / GLSL cho GPGPU là chúng vốn đã là ngôn ngữ đổ bóng Tính toán vẫn phải được thể hiện bằng các thuật ngữ đồ họa như vector, kết cấu (texture), mảnh (fragment), và pha trộn (blending) Vì vậy, mặc dù có thể

Trang 29

Dự án Microsoft’s Accelerator (bộ gia tốc của Microsoft) có mục tiêu tương tự như Brook ở chỗ tập trung vào khía cạnh tính toán, nhưng thay vì sử dụng biên dịch offline, bộ gia tốc dựa vào biên dịch tức thời (just-in-time) của các phép toán dữ liệu song song cho bộ đổ bóng mảnh

Trong năm qua, đã có những thay đổi lớn trong môi trường phần mềm cho phép phát triển các ứng dụng GPGPU dễ dàng hơn nhiều cũng như tạo ra các hệ thống phát triển mạnh mẽ hơn, chất lượng thương mại hơn RapidMind thương mại hóa Sh và bây giờ đặt mục tiêu nhiều platform trong một GPU, các STI Cell Broadband Engine, và CPU đa-lõi, và hệ thống mới tập trung nhiều hơn nữa vào tính toán so với SH trong việc bao gồm nhiều phép toán đồ họa trung tâm

Cả AMD và NVIDIA bây giờ cũng có riêng hệ thống lập trình GPGPU AMD công bố và phát hành hệ thống của họ cho các nhà nghiên cứu vào cuối năm 2006 Đối với lập trình cấp cao hơn, AMD hỗ trợ biên dịch các chương trình Brook trực tiếp đến phần cứng R6XX, cung cấp một mức lập trình trừu

Trang 30

25

tượng cao hơn so với CAL hoặc HAL NVIDIA CUDA là một giao diện cấp cao hơn HAL và CAL của AMD Tương tự như Brook, CUDA cung cấp một

cú pháp giống C để thực hiện trên GPU và biên dịch offline

Tuy nhiên, không giống như Brook chỉ khai thác một hướng xử lý song song là song song dữ liệu thông qua cơ chế dòng, CUDA khai thác hai cấp xử

lý song song là song song dữ liệu và đa luồng CUDA cũng khai thác các nguồn tài nguyên phần cứng nhiều hơn Brook, làm lộ nhiều cấp độ của bộ nhớ

hệ thống phân cấp; các thanh ghi theo từng luồng, bộ nhớ chia sẻ nhanh chóng giữa các luồng trong một khối, bộ nhớ bo mạch, và bộ nhớ máy chủ Các hạt nhân trong CUDA cũng linh hoạt hơn trong Brook bằng cách cho phép sử dụng con trỏ (mặc dù dữ liệu phải ở trên bo mạch), việc lấy ra/lưu trữ thông thường vào bộ nhớ cho phép người sử dụng tán xạ (scatter) dữ liệu từ bên trong một hạt nhân, và đồng bộ giữa các luồng trong một khối luồng Tuy nhiên, tất cả sự linh hoạt này và hiệu quả tiềm năng đạt được đi kèm với cái giá đòi hỏi người

sử dụng phải hiểu nhiều hơn các chi tiết ở cấp thấp của phần cứng, đặc biệt là

sử dụng thanh ghi, luồng và lập lịch cho khối luồng, và các hành vi của các mẫu truy cập bộ nhớ

Để hiểu được những tính toán trong thiết kế của GPU, trước tiên chúng

ta cần nghiên cứu các loại bài toán mà GPU có thể giải quyết được Ban đầu GPU được thiết kế để giải quyết các bài toán về đồ họa máy tính và tăng tốc quá trình hiển thị của các đồ họa do máy tính tạo ra

Ở mức tổng quát, GPU được thiết kế để giải quyết các bài toán với các đặc trưng dưới đây:

1) Bài toán được cấu thành bởi rất nhiều bài toán con có phép toán giống hệt nhau với dữ liệu đầu vào khác nhau

Trang 31

Kết luận ở trên chỉ ra những đặc điểm chính mà một bài toán đặc trưng GPGPU sẽ gặp phải Rõ ràng xử lý song song là cách hiệu quả nhất để giải quyết các kiểu công việc như vậy Mười năm trước, kể từ khi GPGPU trở nên

có sẵn trên thị trường và lập trình cho GPGPU trở nên dễ dàng và có hệ thống hơn, các bài toán ở các lĩnh vực rộng lớn như kỹ thuật, khoa học và tài chính

đã được giải quyết với các thuật toán GPGPU mạnh hơn Ở các phần tiếp theo, tác giả sẽ giới thiệu một số bài toán điển hình nhất có thể giải quyết bằng bộ tăng tốc GPGPU

Mô phỏng là một phương pháp được sử dụng rộng rãi trong nghiên cứu các hệ thống phức Một số ứng dụng mô phỏng có thể kể đến như mô phỏng các vụ nổ hạt nhân, các phản ứng hóa học, các thảm họa thiên nhiên như động đất, sóng thần, lũ lụt…Một số bài toán mô phỏng nổi tiếng có thể kể đến như:

• Mô phỏng N-body: là mô phỏng số lượng rất lớn các hạt dưới ảnh hưởng của các lực vật lý, thường là lực hấp dẫn Mô phỏng này thường được sử dụng trong vũ trụ học để nghiên cứu các quá trình dữ liệu cấu trúc phi tuyến tính như cơ cấu hình thành các dải thiên hà và các ngôi sao từ hố đen trong thiên văn học Mô phỏng n-body trực tiếp được dùng trong nghiên cứu vụ nổ của các cụm sao

• Mô phỏng chất lưu (chất lỏng, chất khí): Chất lưu có ở mọi nơi: nước chảy giữa các bờ sông, khói cuộn lên từ điếu thuốc đang cháy, hơi bốc lên từ ấm pha trà, hơi nước trong các đám mây hay sơn được pha trộn

Trang 32

mô phỏng một cách hiệu quả cả vật thể rắn

Chi tiết về các bài toán mô phỏng trên sẽ được trình bày chi tiết trong chương 3 của luận văn

Về sau này, dữ liệu lớn thu hút được sự quan tâm lớn bởi thông tin và tri thức được ẩn giấu trong dữ liệu lớn là chìa khóa cho việc phát triển lợi nhuận kinh doanh và thế giới công nghệ tương lai Luôn là một thách thức trong việc xử lý với các tập dữ liệu lớn và trích rút các giá trị thông tin ở khía cạnh thời gian Do đó, việc tăng tốc độ xử lý là một vấn đề được quan tâm lớn Tất nhiên khai phá dữ liệu và học máy với dữ liệu lớn đã thấy được những triển vọng với kiến trúc GPGPU

Weinman [22] đã phát triển một thuật toán học máy GPU có thể chạy nhanh hơn 30 lần thuật toán CPU trên cùng một máy tính Map reduce là một thuật toán phổ thông để xử lý tập dữ liệu online lớn, và được kế thừa bởi Google và Facebook để xử lý một lượng dữ liệu người dùng siêu lớn trên Internet Map reduce có thể thực hiện trên các máy tính được phân cụm hoặc trên các GPGPU Stuart [23] đã chỉ ra rằng các cụm máy GPGPU dựa trên map reduce có thể làm tăng tốc tới 8 lần so với hiệu năng tốt nhất của gói map reduce trên CPU

Trang 33

28

Nằm trong số những lĩnh vực tận dụng kỹ thuật khai phá dữ liệu để phân tích dữ liệu, ngành tài chính có những yêu cầu và đặc điểm riêng của nó Ngành tài chính phụ thuộc trầm trọng vào tốc độ cũng như sự chính xác của việc xử lý và tính toán dữ liệu tài chính Rất nhiều các ứng dụng trong ngành này cần phải xử lý ở thời gian thực GPGPU lại thấy được vai trò quan trọng trong việc giải quyết những thách thức trong các nhiệm vụ xử lý và phân tích

dữ liệu tài chính Preis và Tobias [24] đã sử dụng GPU để thực hiện chức năng tự tương quan trong phân tích dao động thị trường tài chính và đã tăng tốc tới 40 lần với mô hình của họ Đây là một cải tiến có ý nghĩa vô cùng quan trọng trong môi trường tài chính cạnh tranh khốc liệt như ngày nay

1.3.4 Xử lý ảnh và thị giác máy tính

GPGPU vốn dĩ được xây dựng để phục vụ mục đích xử lý đồ họa máy tính Tuy nhiên, có một lượng lớn các loại ứng dụng xử lý ảnh không thuộc vào nhiệm vụ của đồ họa máy tính thông thường Loại xử lý ảnh này bao gồm việc biến đổi từng pixel bởi một thuật toán nào đó và dữ liệu đầu vào ở dạng hình ảnh 2D Các ứng dụng đặc trưng bao gồm: hiệu ứng lọc ảnh, làm nổi bật ảnh, xử lý và tái cấu trúc ảnh y học GPGPU được các công nghệ trí tuệ nhân tạo và thị giác máy tính áp dụng nhiều Các nhà nghiên cứu trong các lĩnh vực này nhận thấy rằng các thuật toán và chương trình của họ chứa một chuỗi các đặc điểm tương tự có thể được tăng tốc tốt với mô hình lập trình GPGPU Bất

kỳ tính toán nào yêu cầu với từng pixel có thể xem xét để xử lý song song với GPGPU, làm giảm độ phức tạp về thời gian từ O(n2) xuống còn O(n) bằng cách xử lý đồng thời các pixel thay cho việc xử lý từng pixel một

Jeong et al [25] đã tương thích GPGPU với thuật toán lọc ảnh ITK cho nhiệm vụ xử lý ảnh trong y học để nhận được hiệu năng gần với thời gian thực James [26] đã thể hiện thuật toán thị giác máy tính trên GPU và đạt

Trang 34

29

được độ tăng tốc tới 21 lần Họ đã giới thiệu 2 dự án thị giác máy tính mã nguồn mở dựa trên GPGPU, đó là OpenVidia và GPUCV

Trên thực tế, có những thuật toán và cấu trúc dữ liệu vốn dĩ nó đã tương thích với mô hình lập trình song song, trong khi có một số khác thì lại không Thật khó để có thể tìm thấy một khuôn mẫu vạn năng cho các thuật toán và cấu trúc dữ liệu khác nhau tương thích với mô hình lập trình song song, và thậm chí một số trong đó không thể lập trình song song được Tuy nhiên, các nghiên cứu

cơ bản về các vấn đề này vẫn tiếp diễn và bất kỳ phát minh nào trong những lĩnh vực này sẽ làm thay đổi sâu sắc bối cảnh của khoa học máy tính

Một trong số những nghiên cứu nổi bật trong lĩnh vực này là nghiên cứu của Kim [27] với thuật toán tìm kiếm trên cây với cả GPU và CPU Công việc của Kim tập trung vào việc tối ưu hóa thuật toán tìm kiếm trên cây đồng thời trên cả CPU và GPU Ông đã đưa ra một thuật toán được đáp ứng cho cả CPU và GPU Không dễ để song song hóa việc tìm kiếm trên cây bởi mỗi mức tìm kiếm tiếp theo của cây luôn phụ thuộc vào kết quả tìm kiếm tới từ mức trước đó Sự phụ thuộc dữ liệu đã khử mất khả năng có thể tìm kiếm trên toàn bộ cây (mọi mức trên cây) tại cùng một thời điểm Thuật toán của Kim, thay bằng việc cố gắng cải thiện thời gian thực thi các truy vấn tìm kiếm riêng

lẻ, thì nó tập trung vào việc gia tăng thông lượng của các truy vấn Với GPGPU, một lượng lớn các truy vấn có thể được thực hiện một cách đồng thời và vì thế việc cải tiến hiệu năng sẽ thu được hiệu quả khi cần tìm kiếm một lượng dữ liệu lớn Tương tự thuật toán GPGPU, thuật toán của Kim với CPU tận dụng tốt mô hình ống SIMD, như Intel’s Streaming SIMD Extensions (SSE) và AMD’s 3D Thuật toán đã phải dành sự quan tâm đặc biệt tới việc truyền dữ liệu để đảm bảo rằng các bộ nhớ L1 cache, L2 cache và

bộ nhớ đệm của hệ thống được tận dụng một cách tối đa Do cấu trúc bộ nhớ

Trang 35

Thiết kế GPGPU hiện đại đã được mở rộng để tối ưu hóa cấu trúc cho các loại bài toán này, và việc xem xét các vấn đề tối ưu này có ý nghĩa khác

so với việc xem xét thông thường trong các kiến trúc CPU

Trang 36

31

CHƯƠNG 2 CÔNG NGHỆ NVIDIA CUDA

VÀ TÍNH TOÁN SONG SONG TRÊN BỘ XỬ LÝ ĐỒ HỌA GPGPU

Mặc dù các bản thông cáo đã được đưa ra sớm hơn, nhưng hãng NVidia chỉ chính thức ra mắt CUDA tới công chúng vào tháng 2 năm 2007 Công nghệ này được thiết kế để đáp ứng một số yêu cầu quan trọng của một nhóm đông đảo người dùng Một trong số yêu cầu quan trọng nhất đó là làm sao để lập trình GPU một cách dễ dàng Sự đơn giản là điều cần thiết để đơn giản hóa việc lập trình song song GPU và khiến nó được sử dụng nhiều hơn Trước CUDA, lập trình song song GPU bị hạn chế bởi các mô hình đổ bóng của các API đồ họa Do đó, chỉ những bài toán phù hợp một cách tự nhiên với các thuật toán đổ bóng đỉnh và mảnh mới được tính toán bằng cách sử dụng lập trình xử lý song song với GPU Thêm nữa, các thuật toán tổng quát sử dụng các khái niệm kết cấu và việc GPU chỉ cung cấp các phép toán 3D với số thực đã làm hạn chế sự phổ biến của tính toán GPU Để làm cho lập trình song song GPU trở nên dễ dàng và thiết thực hơn, NVidia đã sử dụng ngôn ngữ lập trình C với những mở rộng ở mức tối thiểu

CUDA- viết tắt của Compute Unified Device Architecture, tạm dịch là kiến trúc thiết bị tính toán hợp nhất, là kiến trúc mới bao gồm cả phần cứng

và phần mềm để phát triển và quản lý việc tính toán trên GPU như một thiết

bị tính toán song song mà không cần ánh xạ vào các hàm lập trình đồ họa Kiến trúc này có trong giải pháp của GeForce 8 Series, Quadro FX 5600/4600, và Tesla của NVIDIA Cơ chế đa nhiệm của hệ điều hành chịu trách nhiệm cho việc quản lý truy cập tới GPU bởi các ứng dụng CUDA và ứng dụng đồ họa chạy song song

Trang 37

32

Bộ phần mềm CUDA bao gồm các lớp mô tả trong hình 2.1: driver cho phần cứng, API lập trình, môi trường thực thi; và hai thư viện toán học mức cao hơn của các hàm thường dùng, CUFFT và CUBLAS Phần cứng được thiết kế để hỗ trợ dirver hạng nhẹ và lớp môi trường thực thi, từ đó cho tốc độ tính toán cao

Hình 2.1 Kiến trúc bộ phần mềm NVidia CUDA [9]

Thư viện lập trình CUDA bao gồm các hàm mở rộng của ngôn ngữ C CUDA cung cấp cách đánh địa chỉ DRAM thường dùng như mô tả trong hình 2.2 cho việc lập trình linh hoạt hơn, bao gồm cả thao tác cấp phát và thu hồi

bộ nhớ Từ góc độ lập trình, điều đó tương ứng với khả năng đọc và ghi dữ liệu tại bất kỳ địa chỉ nào trong DRAM, giống như CPU

Trang 38

33

Hình 2.2 Các thao tác thu hồi và cấp phát bộ nhớ với CUDA [9]

CUDA có đặc tính lưu dữ liệu đệm song song và bộ nhớ chia sẻ chip với tốc độ đọc ghi rất cao, các luồng dùng bộ nhớ này để chia sẻ dữ liệu với nhau Như mô tả trong hình 2.3, ứng dụng có thể đạt kết quả tốt với việc tối thiểu hóa việc lấy/trả dữ liệu từ DRAM, từ đó giảm phụ thuộc băng thông truyền bộ nhớ DRAM

on-Hình 2.3 Vùng nhớ dùng chung mang dữ liệu gần ALU hơn [9]

Trang 39

34

Sự cạnh tranh trong ngành công nghiệp video-game để thể hiện chân thực cuộc sống hơn và trình diễn đồ họa 3D ở độ phân giải cao đã mở ra sự cạnh tranh giữa các nhà sản xuất GPU để cung cấp phần cứng tốt hơn tới các game thủ Nhờ có xử lý đồ họa tự nhiên, các sản phẩm được phát hành mới đây cung cấp các bộ xử lý song song tốc độ cao với băng thông bộ nhớ cao và sức mạnh tính toán lên tới hàng teraflops trên giây Các GPU hiện đại được thiết kế để hỗ trợ tính toán song song dữ liệu, tức là có nhiều luồng thực thi cùng một mã nguồn với mỗi phần tử dữ liệu Xử lý song song dữ liệu có thể được miêu tả ngắn gọn bởi các phần tử dữ liệu ánh xạ vào các luồng xử lý song song Hiệu năng nâng lên nếu có ít hoặc không có rẽ nhánh, chính xác là một mã nguồn được thực thi cho mọi luồng song song đang chạy Các nhân

xử lý ảnh và các phép toán ma trận nằm trong các ứng dụng đặc thù để thu được nhiều lợi ích nhất từ kiến trúc này Song ý nghĩa của việc tăng tốc độ tính toán có thể thu được bởi việc áp dụng kiến trúc song song dữ liệu này cho các thuật toán đang tồn tại khác Trong tương lai gần, các nhà phát triển phần cứng sẽ cung cấp những GPU tốt hơn với nhiều luồng xử lý song song hơn nữa Trách nhiệm của các nhà phát triển phần mềm đó là sử dụng năng lực xử

lý lạ thường của GPU để có thể so sánh được với năng lực xử lý của các cụm máy tính hiệu năng cao

Khi người ta không thể đưa ra các cải tiến cho các giải pháp đang tồn tại về mặt thuật toán, thì người ta quan tâm vào việc phát triển các GPU mới với khả năng chạy nhiều luồng xử lý hơn để nâng cao hiệu năng tính toán Điều này có nghĩa là mã nguồn đã được thiết kế cho dòng NVidia 8 sẽ chạy nhanh hơn với dòng NVidia GTX mà không cần thêm những cải tiến về mã nguồn

Trang 40

• Các bộ nhớ chia sẻ: CUDA cho phép các luồng sử dụng 6 kiểu

bộ nhớ khác nhau được thiết kế để đáp ứng cho các yêu cầu khác nhau

• Barrier đồng bộ hóa: có chức năng đồng bộ hóa các luồng bên trong một khối đơn và tạo một luồng đợi các luồng khác để kết thúc công việc tính toán liên quan, trước khi tiếp tục công việc khác

C for CUDA làm cho CUDA có thể viết các hàm chạy trên GPU bằng việc sử dụng ngôn ngữ lập trình C Các hàm này được gọi là các “kernel”, được thực thi bởi mỗi luồng một cách song song, không như các hàm lập trình tuần tự thông thường được chạy chỉ một lần tại một thời điểm

Kiến trúc của CUDA cung cấp sự phân cấp luồng theo thứ tự trên xuống như sau:

1) Lưới (Grid): chứa các khối một hoặc hai chiều

2) Các khối (Blocks): chứa các luồng một, hai hoặc ba chiều GPU hiện tại cho phép một khối chứa tối đa 512 luồng Các khối được thực thi một cách độc lập và trực tiếp với các bộ xử lý có sẵn để phân chia tỷ lệ

3) Luồng (Thread): là phần tử thực thi cơ sở

Cấu trúc và sự phân cấp này được mô tả ở hình 2.4 dưới đây Ví dụ: nếu có 1048576 công việc cần xử lý một cách độc lập bằng cách song song và kích thước khối là 512, thì số khối là 2048 khối

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

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] PSG TS Nguyễn Đức Nghĩa (2007), Tính Toán Song Song, Nhà xuất bản Đại học Quốc gia Hà Nội Sách, tạp chí
Tiêu đề: Tính Toán Song Song
Tác giả: PSG TS Nguyễn Đức Nghĩa
Nhà XB: Nhà xuất bản Đại học Quốc gia Hà Nội
Năm: 2007
[2] Đức Khánh (2/2010), “Cuda quá khứ - hiện tại & tương lai của điện toán GPU”, Tạp chí CGEZINE, X4, tr 34 - 41 Sách, tạp chí
Tiêu đề: Cuda quá khứ - hiện tại & tương lai của điện toán GPU”, "T"ạ"p chí CGEZINE
[3] Nguyễn Thị Thùy Linh (2009), Tính toán hiệu năng cao với bộ xử lý đồ họa GPU và ứng dụng, Luận văn thạc sĩ, Đại học Công nghiệp - Đại học quốc gia Hà Nội, tr 17-60 Sách, tạp chí
Tiêu đề: Tính toán hi"ệ"u n"ă"ng cao v"ớ"i b"ộ" x"ử" lý "đồ" h"ọ"a GPU và "ứ"ng d"ụ"ng
Tác giả: Nguyễn Thị Thùy Linh
Năm: 2009
[4] Ngô Quốc Vinh (2008), Hướng dẫn cách thiết lập dự án CUDA, Kyoto- Japan Sách, tạp chí
Tiêu đề: H"ướ"ng d"ẫ"n cách thi"ế"t l"ậ"p d"ự" án CUDA
Tác giả: Ngô Quốc Vinh
Năm: 2008
[5] TS Lê Huy Thập (8/2010), Cơ sở lý thuyết song song, Nhà xuất bản thông tin và truyền thông, Hà Nội Sách, tạp chí
Tiêu đề: C"ơ" s"ở" lý thuy"ế"t song song
Nhà XB: Nhà xuất bản thông tin và truyền thông
[6] Phạm Mạnh Hùng (2007), Các kỹ thuật toán học cho bài toán so sánh đa trình tự, Luận văn thạc sĩ Khoa học máy tính, Đại học Bách khoa thành phố Hồ Chí Minh Sách, tạp chí
Tiêu đề: Các k"ỹ" thu"ậ"t toán h"ọ"c cho bài toán so sánh "đ"a trình t
Tác giả: Phạm Mạnh Hùng
Năm: 2007
[7] Trịnh Công Quý (2005), Phát triển ứng dụng song song với OpenMP, Luận văn tốt nghiệp Đại học, Đại học Công nghệ - Đại học quốc gia Hà Nội, tr 3,12 Sách, tạp chí
Tiêu đề: Phát tri"ể"n "ứ"ng d"ụ"ng song song v"ớ"i OpenMP
Tác giả: Trịnh Công Quý
Năm: 2005
[8] Trương Văn Hiệu (2011), Nghiên cứu các giải thuật song song trên hệ thống xử lý đồ họa GPU đa lõi, Luận văn thạc sĩ kỹ thuật, Đại học Đà Nẵng.Tiếng Anh Sách, tạp chí
Tiêu đề: Nghiên c"ứ"u các gi"ả"i thu"ậ"t song song trên h"ệ" th"ố"ng x"ử" lý "đồ" h"ọ"a GPU "đ"a lõi
Tác giả: Trương Văn Hiệu
Năm: 2011
[15] J. Barnes and P. Hut, “A Hierarchical O(NlogN) Force-Calculation Algorithm,” Nature, vol. 324, pp.446–449, Dec.1986 Sách, tạp chí
Tiêu đề: A Hierarchical O(NlogN) Force-Calculation Algorithm
[18] J. Kr¨uger, P. Kipfer, P. Kondratieva, and R. Westermann, “A particle system for interactive visualization of 3D flows,” IEEE Transactions on Visualization and Computer Graphics, vol. 11, no. 6,pp. 744–756, Nov./Dec. 2005 Sách, tạp chí
Tiêu đề: A particle system for interactive visualization of 3D flows
[19] K. Fatahalian, J. Sugerman, and P. Hanrahan, “Understanding the efficiency of GPU algorithms for matrix-matrix multiplication,” in Graphics Hardware 2004, Aug. 2004, pp. 133–138 Sách, tạp chí
Tiêu đề: Understanding the efficiency of GPU algorithms for matrix-matrix multiplication
[20] L. Greengard and V. Rokhlin, “A fast algorithm for particle simulations,” Journal of Computational Physics, vol. 73, pp. 325–348, Dec. 1987 Sách, tạp chí
Tiêu đề: A fast algorithm for particle simulations
[21] Pyarelal Knowles, “GPGPU Based Particle System Simulation”, School of Computer Science and Information Technology, RMIT University Melbourne, AUSTRALIA, November 12, 2009 Sách, tạp chí
Tiêu đề: GPGPU Based Particle System Simulation
[22] Jerod J. Weinman, Augustus Lidaka, Shitanshu Aggarwal "large scale machine learning" GPU Computing Gems Emerald Edition chapter 19 2011 Sách, tạp chí
Tiêu đề: large scale machine learning
[23] Stuart, Jeff A., and John D. Owens. "Multi-GPU MapReduce on GPU clusters."Parallel & Distributed Processing Symposium (IPDPS), 2011 IEEE International. IEEE, 2011 Sách, tạp chí
Tiêu đề: Multi-GPU MapReduce on GPU clusters
[24] Preis, Tobias, et al. "Accelerated fluctuation analysis by graphic cards and complex pattern formation in financial markets." New Journal of Physics 11.9 (2009): 093024 Sách, tạp chí
Tiêu đề: Accelerated fluctuation analysis by graphic cards and complex pattern formation in financial markets
Tác giả: Preis, Tobias, et al. "Accelerated fluctuation analysis by graphic cards and complex pattern formation in financial markets." New Journal of Physics 11.9
Năm: 2009
[25] Won-Ki Jeong, Hanspeter Pfister, Massimiliano Fatica "Medical Image Processing Using GPU-Accelerated ITK Image Filters" Wen-mei, W. Hwu.GPU Computing Gems Emerald Edition. Morgan Kaufmann, 2011 Sách, tạp chí
Tiêu đề: Medical Image Processing Using GPU-Accelerated ITK Image Filters
[26] Fung, James, and Steve Mann. "Using graphics devices in reverse: GPU- based image processing and computer vision." Multimedia and Expo, 2008 IEEE International Conference on. IEEE, 2008 Sách, tạp chí
Tiêu đề: Using graphics devices in reverse: GPU-based image processing and computer vision
[12] GPU Gems 3, Chapter 31. Fast N-Body Simulation with CUDA http://developer.nvidia.com/GPUGems3/gpugems3_ch31.html Link
[13] Mark Harris, GPU Gems, Chapter 38. Fast Fluid Dynamics Simulation on the GPU http://developer.nvidia.com/GPUGems/gpugems_ch38.html[14] Particle Simulation Using CUDA,http://developer.download.nvidia.com/compute/cuda/1.1-Beta/x86_website/Physically-Based_Simulation.html Link

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