1. Trang chủ
  2. » Thể loại khác

Nghiên cứu công nghệ xử lý GPU và ứng dụng

98 265 1

Đ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 98
Dung lượng 1,77 MB

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

Nội dung

Hình 8: Mô hình lập trình truyền thông hai tác vụ của hai máy tính Song song dữ liệu trong xử lý song song Ở mô hình này chủ yếu việc song song được thực hiện trên một tập dữ liệu.. GP

Trang 1

ĐẠI HỌC THÁI NGUYÊN ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

ĐINH TIẾN NGỌC

NGHIÊN CỨU CÔNG NGHỆ XỬ LÝ GPU VÀ ỨNG DỤNG

THÁI NGUYÊN 2017

Trang 2

LỜI CAM ĐOAN

Tôi xin cam đoan :

Những nghiên cứu dưới đây trong luận văn của tôi hoàn toàn trung thực không vi phạm bất kỳ quyền sở hữu trí tuệ nào Nếu sai tôi xin chịu hoàn toàn trách nhiệm

TÁC GIẢ LUẬN VĂN

Đinh Tiến Ngọc

Trang 3

LỜI CẢM ƠN

Lời đầu tiên tôi xin chân thành cảm ơn đếnTS Lê Quang Minh người thầy đã tận tình giúp đỡ, hướng dẫn tôi hoàn thành luận văn này

Tôi cũng xin chân thành cảm ơn các thầy, cô giảng viên cao học người đã giúp

đỡ tôi nâng cao kiến thức giúp tôi có những kiến thức bổ trợ giúp hoàn thiện cho luận văn này

Tôi cũng xin chân thành cảm ơn người thân, bạn bè đã giúp đỡ và động viên tôi trong suốt thời gian học tập cũng như trong thời gian thực hiện đề tài

Xin chân thành cảm ơn!

Thái Nguyên, ngày tháng 5 năm 2017

TÁC GIẢ LUẬN VĂN

Đinh Tiến Ngọc

Trang 4

DANH MỤC THUẬT NGỮ

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

gpgpu Tính toán thông dụng trên GPU

API Application Program Interface : Định nghĩa một giao diện

chuẩn để triệu gọi một tập các chức năng

coproccessor bộ đồng xử lý

kernel hạt nhân

texture Kết cấu: cấu trúc của đối tượng, nó được xem như mô hình

thu nhỏ của đối tượng

texturefetches Hàm đọc kết cấu

texturereference Tham chiếu kết cấu

warp Mỗi khối được tách thành các nhóm SIMD của các luồng SIMD Single Instruction Multiple Data: đơn lệnh đa dữ liệu

Trang 5

MỤC LỤC

LỜI CAM ĐOAN i

LỜI CẢM ƠN iii

DANH MỤC THUẬT NGỮ iv

MỤC LỤC v

DANH MỤC HÌNHVẼ vii

LỜI MỞ ĐẦU viii

CHƯƠNG I : KHÁI QUÁT VỀ BỘ XỬ LÝ ĐỒ HỌA GPU VÀ XỬ LÝ SONG SONG 1

1.1 Khái quát về xử lý song song 1

1.1.1 Khái quát về xử lý song song 1

1.1.2 Khái quát về Hệ thống máy tính song song 3

1.1.3 Khái quát về lập trình song song 7

1.1.4 Các nguyên tắc khi thiết kế giải thuật xử lý song song 9

1.2 Khái quát về công nghệ GPU và các ứng dụng 10

1.2.1 Tổng quan về GPU 11

1.2.2 Nguồn gốc và quá trình phát triển GPU 11

1.2.3 Cấu trúc của bộ xử lý đồ họa GPU 15

1.2.4 Lập trình trên GPU 19

1.2.5 Các hỗ trợ phần mềm cho xử lý tính toán trên GPU 22

1.2.6 Các kỹ thuật tính toán trên GPU 26

1.2.7.Các giải thuật ứng dụng trên GPU 29

CHƯƠNG II: XỬ LÝ SONG SONG TRÊN THIẾT BỊ ĐỒ HỌA GPU VỚI CUDA 31 2.1 Khái quát về CUDA 31

2.2.Cơ chế lập trình và cách thức hoạt động của CUDA 33

2.2.1.Cơ chế lập trình 33

2.2.2.Cách thức hoạt động của CUDA 33

2.3 Tổng quan về lập trình với CUDA 38

2.3.1 Là ngôn ngữ lập trình mở rộng của ngôn ngữ lập trình C 38

Trang 6

2.3.2 Các phần mở rộng của CUDA 38

2.3.3.Biến Built-in trong CUDA 41

2.3.4 Biên dịch CUDA thông qua NVCC 42

2.3.5.Một số trường hợp cụ thể tính toán song song bằng CUDA 42

2.4 Các ứng dụng của CUDA trong các lĩnh vực 45

2.4.1 Ứng dụng của CUDA trong game 45

2.4.2 Ứng dụng của CUDA với video số 45

CHƯƠNG III: SỬ DỤNG GPU ĐỂ LÀM TĂNG TỐC ĐỘ TÍNH TOÁN CHO BÀI TOÁN MÃ HÓA AES 48

3.1 Giới thiệu về AES 48

3.2 Thuật toán mã hóa 48

3.2.1 Công đoạn mã hóa 50

3.2.2 Công đoạn giải mã 54

3.3 Chương trình thuật toán song song mã hóa AES sử dụng GPU 62

3.3.1 Giao diện chương trình demo 92

3.3.2 Kết quả chương trình và đánh giá hiệu suất tính toán 93

KẾT LUẬN 88

TÀI LIỆU THAM KHẢO 89

Trang 7

DANH MỤC HÌNHVẼ

Hình 1 : Kiến trúc Von Neumann 1

Hình 2 : Máy tính song song có bộ nhớ chia sẻ 4

Hình 3 : Máy tính song song có bộ nhớ phân tán 5

Hình 4 : Kiến trúc máy SISD 5

Hình 5 : Kiến trúc máy SIMD 6

Hình 6 : Kiến trúc máy MISD 6

Hình 7 : Kiến trúc máy MIMD 7

Hình 8 : Mô hình lập trình truyền thông hai tác vụ của hai máy tính 8

Hình 9 : Mô hình lập trình song song dữ liệu 9

Hình10: Kiến trúc GPU của NVIDIA và AMD 19

Hình 11: Kiến trúc phần mềm CUDA 31

Hình 12: Thao tác cấp phát và thu hồi bộ nhớ 32

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

Hình 14: Sơ đồ hoạt động truyền dữ liệu giữa Host và Device 34

Hình 15: Khối luồng 36

Hình 16: Mô hình bộ nhớ trên GPU 37

Hình 17: Chiều của lưới và khối với chỉ số khối và luồng 42

Hình 18: Phương pháp đánh chỉ số luồng 45

Hình 19 : Mã hóa và giải mã 49

Hình 20: Biến đổi SubBytes() đối với mảng trạng thái 51

Hình 21: Mô tả Hàm ShiftRows() 51

Hình 22: Mô tả hàm MixColumns() 52

Hình 23: Mô tả hàm AddRoundKey() 53

Hình 24: Mô tả hàm InvShiftRow() 55

Trang 8

LỜI MỞ ĐẦU

Với sự phát triển như vũ bão của công nghệ, ngày nay công nghệ thông tin đã trở thành một phần không thể thiếu trong cuộc sống Không những thế nó còn là một công cụ hữu hiệu trong các ngành khoa học, công nghệ cao,… đặc biệt là những ngành có nhu cầu tính toán lớn Tuy nhiên trong khi với nhu cầu tính toán ngày cành tăng cao đó, ngành công nghệ thông tin lại vấp phải một vấn đề tối quan trọng đó là năng lực xử lý của CPU có hạn Các nhà phát triển phần cứng đã thực hiện gia tăng mức độ xử lý cho CPU bằng cách gia tăng xung cho CPU Tuy nhiên việc này cũng chạm ngưỡng bởi gặp phải vấn đề về tản nhiệt cho CPU do nhiệt độ CPU quá cao Một hướng mới đã được các nhà nghiên cứu đưa ra đó là phát triển bộ xử lý đa nhân với cơ chế xử lý song song

Một bước phát triển trong hướng mới đó chính là bộ xử lý đồ họa – GPU (Graphics Processing Unit - bộ xử lý đồ họa) Khi mới ra đời, GPU chỉ được sử dụng với mục đích công việc phù hợp với khả năng là tăng tốc độ xử lý đồ họa, cũng như trong ngành trò chơi là chủ yếu Nhưng với sự phát triển dần của các trò chơi và các phần mềm đồ họa, đã khiến GPU phát triển thêm và đến thế hệ GPUNV30 của NVIDIA ra đời người ta đã bắt đầu phát triển những công việc khác cho GPU như

hỗ trợ tính toán dấu chấm động đơn, hỗ trợ tính toán lên cả ngàn lệnh Và đặc biệt với tiềm năng như vậy có thể nghĩ tới việc sử dụng GPU ngoài đồ họa Cùng với ý tưởng như vậy tôi đã liên tưởng đến việc áp dụng việc xử lý song song trên GPU thông qua ngôn ngữ lập trình CUDA Xuất phát từ ý tưởng trên tôi đã chọn đề tài: NGHIÊN CỨU CÔNG NGHỆ XỬ LÝ GPU VÀ ỨNG DỤNG

Luận văn gồm 3 chương chính:

Chương 1: Khái quát về bộ xử lý đồ họa GPU và xử lý song song, Chương

này giới thiệu tổng quan về xử lý song song và bộ xử lý đồ họa GPU

Chương 2: Xử lý song song trên thiết bị đồ họa GPU với CUDA Chương này

nghiên cứu về ngôn ngữ lập trình CUDA và cách xử lý song song bằng CUDA trên GPU

Chương 3: Sử dụng GPU để làm tăng tốc độ tính toán cho bài toán mã hóa

Trang 9

AES Chương này tiến hành cài đặt thử chương trình song song, xử lý song song mã

hóa AES trên GPU bằng ngôn ngữ CUDA và đưa ra kết quả cùng kết luận về hiệu suất của GPU

Trang 10

CHƯƠNG I : KHÁI QUÁT VỀ BỘ XỬ LÝ ĐỒ HỌA GPU

VÀ XỬ LÝ SONG SONG

1.1 Khái quát về xử lý song song

1.1.1 Khái quát về xử lý song song

Nguồn gốc ra đời của xử lý songsong

Một trong những nền tảng máy tính cơ bản đó là thiết kế máy tính của John Von Neumann Đó là thiết kế mà ở đó một lệnh được thực hiện trên một bộ xử lý

Hình1: Kiến trúc Von Neumann

Khi cần tính toán với lượng câu lệnh và phép tính lớn thì thiết kế trên trở nên lỗi thời Người ta đã đưa ra các phương pháp nhằm giải quyết vấn đề trên Trong đó

có việc tăng số lượng nhân xử lý hoặc kết nối nhiều máy tính thông qua mạng để tăng tốc độ xử lý

Khi tăng tốc xử lý các phép tính trên máy tính song song, việc sử dụng các thuật toán tuần tự đã không còn thích hợp và không tận dụng hết khả năng tiềm tàng của máy tính song song Dẫn đến việc ra đời các giải thuật song song

Lý do phải xử lý song song

Như đã nói ở trên máy tính song song với bộ xử lý nhiều nhân đã thay thế dần máy tính đơn nhân, một bộ xử lý Và với những thuật toán, câu lệnh, phép xử lý tuần

tự đã không còn phù hợp với máy tính song song Do vậy xử lý song song đã ra đời thay thế cho xử lý tuần tự nhằm đem lại hiệu năng tính toán cao hơn

Bằng chứng đã thấy trong thực tế với nhiều bài toán xử lý với lượng dữ liệu lớn

Trang 11

yêu cầu tốc độ nhanh và độ chính xác như các bài toán về đồ họa, xử lý ảnh, xử lý tín hiệu, mô phỏng giao thông, mô phỏng sự chuyển động của các phân tử, nguyên

tử, dự báo thời tiết, mô phỏng bản đồ gen……Xử lý song song đã chứng minh được khả năng xử lý cũng như khả năng phát triển của nó sau này

Các khái niệm trong xử lý songsong

 Định nghĩa xử lý songsong

Xử lý song song là quá trình xử lý thực hiện nhiều tiến trình cùng một lúc để

xử lý một bài toán, trên nhiều bộ xử lý

 Làm rõ giữa xử lý song song và xử lý tuần tự

Xử lý tuần tự là tại mỗi thời điểm chỉ xử lý một phép toán còn xử lý song song tại một thời điểm có thể thực hiện nhiều phép toán cùng một lúc trên nhiều bộ xử lý, làm cho khả năng xử lý tăng lên đáng kể so với xử lý tuần tự Bảng dưới đây cho thấy sự khác nhau giữa xử lý tuần tự và xử lý song song

Bảng 1.1: So sánh sự khác nhau giữa lập trình tuần tự và song song

- Chương trình chạy trên một bộ xử lý

- Mỗi câu lệnh thực thiện trên duy nhất

một thành phần dữ liệu

- Mỗi câu lệnh có thể thao tác trên nhiều thành phần dữ liệu khác nhau

Trang 12

- Chỉ cần viết đúng câu lệnh và giải

thuật là có thể chạy chương trình

- Viết đúng câu lệnh và giải thuật Ngoài ra phải chỉ rõ phần nào của chương trình cần phải chạy song song

- Dùng với các bài toán dữ liệu nhỏ, độ

phức tạp không cao và yêu cầu thời gian

chấp nhận được

- Được sử dụng đối với các bài toán có dữ liệu lớn, độ phức tạp cao và thời gian ngắn

 Mục đích của xử lý song song

Dựa trên việc tính toán song song trên nhiều bộ xử lý cho tốc độ xử lý cao,

xử lý song song thường dùng cho các bài toán có độ phức tạp lớn, yêu cầu khối lượng tính toán lớn

1.1.2 Khái quát về Hệ thống máy tính song song

Là một hệ thống máy tính với nhiều bộ nhân xử lý có khả năng xử lý song song Bao gồm cả máy tính với bộ xử lý mà trong đó gồm nhiều lõi, cũng được gọi

là máy tính song song

Phân loại máy tính song song phổ biến nhất được biết tới là phân loại máy tính song song của Michael Flynn vào năm 1966 Dựa vào các đặc điểm về số lượng

bộ xử lý, cấu trúc bộ nhớ,… Michael Flynn đã phân máy tính thành bốn loại dựa trên

sự biểu hiện của cặp khái niệm: Dòng lệnh (instruction stream) và dòng dữ liệu (data stream), mỗi loại nằm trong một trong hai trạng thái đơn (single) hoặc đa (multiple) Dựa theo phân loại của Flynn có 4 loại máy tính song song theo bảng dưới:

Trang 13

Bảng 1.2: Mô tả phân loại kiến trúc của Flynn Dòng lệnh (instruction

stream)

Dòng dữ liệu (data stream)

Loại kiến trúc

Trạng thái đơn (single) Trạng thái đơn

(single)

SISD Single Instruction Single Data

Trạng thái đơn (single) Trạng thái đa

(multiple)

SIMD Single Instruction Multiple Data

Trạng thái đa (multiple) Trạng thái đơn

(single)

MISD Multiple Instruction Single Data

Trạng thái đa (multiple) Trạng thái đa

(multiple)

MIMD Multiple Instruction Multiple Data

Dựa trên cấu trúc bộ nhớ Flynn đã chia ra làm các loại máy tính trên Các bộ

xử lý với bộ nhớ chia sẻ có thể truy cập đến vùng nhớ chung Sự thay đổi về nội dung

bộ nhớ sẽ được nhận biết bởi các bộ xử lý khác

Hình 2 : Máy tính song song có bộ nhớ chia sẻ

Lại có thể chia ra tiếp 2 lớp nhỏ hơn trong loại máy tính này: Lớp máy tính UMA (Uniform Memory Access – Truy cập bộ nhớ đồng nhất) khả năng truy cập bộ nhớ đối với mỗi bộ xử lý có thời gian là như nhau Lớp máy tính NUMA (Non-Uniform Memory Access – Truy cập bộ nhớ không đồng nhất) khả năng truy cập bộ nhớ đối với mỗi bộ xử lý có thời gian là không như nhau

Trang 14

Máy tính song song với bộ nhớ phân tán Mỗi bộ xử lý có một bộ nhớ và khả năng truy cập độc lập Sự thay đổi nội dung vùng nhớ của một bộ xử lý không làm ảnh hưởng đến các bộ xử lý khác

Hình 3 : Máy tính song song có bộ nhớ phân tán

Mô hình cấu trúc đơn dòng lệnh đơn luồng dữ liệu (SISD)

Là máy tính chỉ có một bộ xử lý tại mỗi thời điểm chỉ thực hiện một lệnh, đọc, ghi một mục dữ liệu Chỉ có một thanh ghi gọi là bộ đệm và kết quả đầu ra theo tuần

tự các câu lệnh

Hình 4 : Kiến trúc máy SISD

Mô hình cấu trúc đơn dòng lệnh đa luồng dữ liệu (SIMD)

Mỗi bộ xử lý thực hiện xử lý một luồng dữ liêu Các bộ xử lý cùng thực hiện một phép toán trên nhiều luồng dữ liệu khác nhau và có một thành phần để điều khiển cho các bộ xử lý thực hiện xử lý các luồng câu lệnh

Trang 15

Hình 5 : Kiến trúc máy SIMD

Mô hình cấu trúc đa dòng lệnh đơn luồng dữ liệu (MISD)

Là loại máy tính có thể thực hiện nhiều câu lệnh trên cùng một mục dữ liệu

Hình 6 : Kiến trúc máy MISD

Mô hình cấu trúc đa dòng lệnh đa luồng dữ liệu (MIMD)

Là loại máy tính đa nhân, đa bộ xử lý có thể thực hiện nhiều câu lệnh trên nhiều luồng khác nhau.Các bộ xử lý đều có bộ nhớ riêng biệt nhưng cũng có thể truy cập vào bộ nhớ chung khi cần giúp tăng tốc độ xử lý Mô hình kiến trúc này là mô hình kiến trúc phức tạp nhất nhưng cũng là mô hình ưu việt nhất và cũng đã có nhiều máy tính được xây dựng trên kiến trúc này, ví dụ: BBN Butterfly

Trang 16

Hình 7 : Kiến trúc máy MIMD

1.1.3 Khái quát về lập trình song song

Là việc lập trình các câu lệnh các đoạn chương trình song song để chạy trên

hệ thống máy tính song song Cũng có thể hiểu là việc song song hóa các thuật toán tuần tự nhằm tăng tốc độ xử lý tính toán lên nhiều lần

Trong đó việc lập trình song song là chia các chương trình, bài toán lớn thành các bài toán con rồi chia các bài toán con thành các bài toán con nhỏ hơn…rồi chia các bài toán con nhỏ đó cho các bộ xử lý giải quyết và đồng bộ về mặt thời gian xử

lý công việc để nhận được kết quả cuối cùng Việc quan trong nhất ở đây là xử lý các bài toán đồng thời Do vậy khi muốn lập trình song song một thuật toán ta cần xác định là có thể song song hóa thuật toán đó hay không

Các kiểu song song hóa:

 Song song hóa mặc định: Việc phân chia công việc đến các bộ xử lý là tự động

 Song song hóa thủ công: Việc phân chia công việc đến các bộ xử lý do người lập trình tự quyết định

Trong đó cần để ý đến vấn đề cân bằng tải Khi một bộ xử đang giải quyết quá nhiều công việc cần chuyển các công việc đến các bộ xử lý khác đang giải quyết các công việc ít hơn

Trang 17

Một vấn đề quan trọng trong lập trình song song đó là việc kết nối giữa các

bộ nhớ Có hai kỹ thuật kết nối cơ bản là: sử dụng bộ nhớ chia sẻ và truyền thông điệp

Mô hình lập trình song song bao gồm các hệ thống truyền thông và vào/ra song song, các ứng dụng, ngôn ngữ, bộ biên dịch, thư viện Việc phân chia công việc cho máy tính song song hiệu quả cho tất cả các bài toán là không khả thi Vấn đề là người lập trình viên song song phải biết sử dụng hiệu quả các mô hình cho từng bài toán hoăc kết hợp chúng với nhau

Hiện nay có các mô hình lập trình song song: Truyền thông điệp (Message Passing) và Song song dữ liệu (Data Parallel)

Truyền thông điệp trong xử lý song song

Là mô hình được sử dụng rộng rãi cho các hệ phân tán Bao gồm các đặc trưng sau:

 Trong quá trình tính toán mỗi luồng sử dụng một vùng nhớ cục bộ riêng

 Các luồng có thể sử dụng chung tài nguyên

 Việc trao đổi giữa các luồng được thực hiện bằng cách gửi các thông điệp

 Mỗi luồng sẽ thực hiện việc điều khiển việc truyền dữ liệu Ví dụ mỗi thao tác gửi

ở một luồng thì phải ứng với một thao tác nhận ở luồng khác

Hình 8: Mô hình lập trình truyền thông hai tác vụ của hai máy tính

Song song dữ liệu trong xử lý song song

Ở mô hình này chủ yếu việc song song được thực hiện trên một tập dữ liệu Cấu trúc của tập dữ liệu này là mảng hoặc khối Cùng một phép toán, Các tác vụ sẽ thực hiện trên cùng một kiểu dữ liệu nhưng trên các tập dữ liệu khác nhau Mô hình

Trang 18

này chủ yếu dành cho máy tính song song kiểu bộ xử lý mảng

Hình 9 : Mô hình lập trình song song dữ liệu

1.1.4 Các nguyên tắc khi thiết kế giải thuật xử lý song song

Để xét đến việc xử lý song song cần quan tâm đến giải thuật và việc thực hiện giải thuật song song đó trên loại máy tính nào

Những bước cần thực hiện khi thiết kế giải thuật song song:

 Phân nhỏ bài toán thành bài toán con nhỏ hơn sao cho độc lập về mặt dữ liệu

và chức năng, và giải quyết các bài toán này đồng thời

 Chỉ rõ việc chia sẻ dữ liệu và truy cập

 Chia các tác vụ cho các tiến trình cho các nhân xử lý

cụ thể Khi đó ta xét các bước sau để xem bài toán đó có song song hóa được không:

- Phân tích bài toán, xác định các thành phần của giải thuật có thể hoặc không thể song song hóa được

- Để ý đến các hạn chế của xử lý song song trong đó hạn chế lớn nhất là sự

Trang 19

phụ thuộc dữ liệu

Các ví dụ về chương trình có thể song song hóa

Một bài toán ví dụ có thể song song hóa đó là cộng hai mảng số nguyên có cùng phần tử Công đoạn có thể song song hóa là cộng các phẩn tử có cùng thứ tự sẽ độc lập với các phần tử khác

Các ví dụ về chương trình không thể song song hóa

Tính chuỗi Fibonacci (1, 1, 2, 3, 5, 8, 13, 21,…) bằng cách sử dụng công thức: F(k+2)= F(k+1) + F(k), với n > 1

Bài toán này không song song hóa được vì nguyên nhân tính số hạng của dãy Fibonacci theo công thức là phụ thuộc chứ không phải là độc lập Trong đó việc tính giá trị thứ k+2 phải sử dụng giá trị của cả hai giá trị k+1 và k

Cách thiết kế giải thuật song song

Cách thiết kế khái quát được đề cập đến trong luận văn này là phân chia dữ liệu

 Áp dụng khi liên quan đến tính toán trên nhiều cấu trúc dữ liệu Các cấu trúc

dữ liệu này có thể phân chia nhỏ hơn và có thể tính toán trên phần cấu trúc dữ liệu nhỏ hơn này

Minh chứng cho lập luận trên là bài toán cộng hai mảng số nguyên Trường hợp

ta có n bộ xử lý cùng làm việc để cộng hai mảng X[0…N-1] và Y[0…N-1] lưu vào mảng kết quả Z[0 N-1], việc phân chia dữ liệu sẽ đặt N/n phần tử của mỗi mảng vào từng quá trình và nó sẽ tính toán N/n phần tử tương ứng của mảng kết quả Như

Trang 20

vậy, với n bộ xử lý càng nhiều thì thời gian chạy càng nhanh, ngược lại thì chạy càng chậm

1.2 Khái quát về công nghệ GPU và các ứng dụng

1.2.1 Tổng quan về GPU

Một phần không thể tách rời của hệ thống máy tính ngày nay đó là bộ xử lý

đồ họa (Graphic Proccessing Unit) gọi tắt là GPU.Từ khi ra đời cho đến nay GPU

đã cho ta thấy sự phát triển ấn tượng về hiệu suất GPU hiện nay không chỉ là một công cụ xử lý đồ họa mạnh mà còn là một bộ xử lý hỗ trợ lập trình song song ở mức cao, giúp giải các bài toán số học cần khả năng xử lý số học phức tạp và băng thông

bộ nhớ tăng hơn đáng kể so với CPU cùng loại Sự phát triển mạnh về hiệu suất của GPU trong cả việc hỗ trợ lập trình và khả năng tính toán của nó đã tạo ra một hướng nghiên cứu mới Một nhóm các chuyên gia đã nghiên cứu thành công một lượng lớn các vấn đề phức tạp đòi hỏi tính toán lớn vào GPU Việc này đã góp phần ứng dụng GPU vào giải quyết các bài toán hiệu năng cao của tính toán hiện đại Tính toán và lập trình trên GPU là một thay thế tiềm năng cho CPU trong hệ thống máy tính hiện đại Trong một tương lai không xa, GPU sẽ đảm nhận thay cho CPU những công việc như xử lý hình ảnh, đồ họa, các tính toán phức tạp thay vì chỉ dừng lại ở những ứng dụng trò chơi 3D

1.2.2 Nguồn gốc và quá trình phát triển GPU

GPU là bộ xử lý của card đồ họa, dùng đ ể tính toán các phép toán dấu phảy động

Lúc đầu GPU là bộ xử lý gắn trên card đồ họa phục vụ cho việc tính toán các phép toán dấu phảy động

Với các vi mạch siêu nhỏ, cùng các phép toán đăc biệt , GPU được sử dụng chủ yếu trong các hoạt động cần đến xử lý đồ họa cao như trong các game đồ họa cao hoặc các xử lý đồ họa 3D

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

Trang 21

Thập kỷ 70:

Công bố bộ điều khiển phần cứng kết hợp đồ họa và chế độ text, tính toán

vị trí và hiển thị (theo khuôn dạng phần cứng hỗ trợ) và những hiệu ứng khác trên các máy tính ATARI 8-bit, bởi hãng sản xuất chip ANTIC và CTIA Chíp ANTIC

là một bộ xử lý dành riêng cho ánh xạ (lập trình được) giữa dữ liệu đồ họa tới đầu

ra video và text Nhà thiết kế chip ANTIC, sau đó đã thiết kế chip đồ họa cho Commodore Amiga

Thập kỷ 80:

Chiếc máy tính đầu tiên có chứa các bộ blit (Block Image Transfer là sự

chuyển động của một bitmap lớn trong game 2D) trong phần cứng video, hệ thống

đồ họa 8514 của IBM là Commodore Amiga, là một trong những card video đầu tiên trên máy tính có thể thực thi các phép toán 2D nguyên thủy

Những tính năng của Amiga bây giờ được công nhận là bộ gia tốc đồ họa đầy đủ, giảm tải tất cả các chức năng thế hệ video cho phần cứng, bao gồm tô màu vùng,chuyển khối hình ảnh ,vẽ đường thẳng, và bộ đồng xử lý đồ họa với cùng với tập các chỉ thị lệnh nguyên thủy của riêng nó

Thập kỷ 90:

S3 Graphics giới thiệu bộ gia tốc chip 2D đầu tiên, các 86C911 S3 vào năm 1991.Các 86C911 sinh ra một làn sóng công nghệ Đến năm 1995, tất cả các nhà sản xuất chip đồ họa máy tính lớn đã thêm các hỗ trợ tăng tốc 2D cho chip của họ Vào thời điểm này, bộ tăng tốc Windows với các chức năng cố định khá đắt tiền và cao hơn bộ đồng xử lý đồ họa mục đích chung trong hiệu năng của Windows

2D GUI tiếp tục tăng tốc phát triển trong suốt những năm 1990 Từ khả năng sản xuất được phát triển đã tác động vào các mức độ tích hợp chip đồ họa Cộng với việc các giao diện lập trình ứng dụng (API) cho ra một lượng lớn tác vụ, ví dụ thư viện đồ họa của Microsoft WinG cho Windows 3.x, và giao diện DirectDraw của họ cho tăng tốc phần cứng của game 2D trong Windows 95 và sau đó

Trang 22

Với sự hỗ trợ CPU-thời gian thực, đồ họa 3D đã dầ n trở nên phổ biến trong máy tính và giao diện các trò chơi, dẫn đến nhu cầu phát triển rộng rãi phần cứng tăng tốc cho đồ họa 3D M ộ t điển hình về loạt trên thị trường phần cứng đồ họa 3D có thể thấy trong các trò chơi video thế hệ console thứ năm như PlayStation và Nintendo 64 Một trong các thử nghiệm không thành công là các chip đồ họa 3D giá thành rẻ là ViRGE S3, ATI Rage, và Matrox Mystique Những chip này về cơ bản

là bộ gia tốc 2D thế hệ trước bổ sung thêm các tính năng 3D Nhiều thành phần trong đó được thiết kế tương thích với thế hệ chip đời trước để dễ thực hiện và chi phí tối thiểu hiệu năng đồ họa 3D đã chấp nhận được với bảng mạch rời dành riêng cho các chức năng tăng tốc 3D (thiếu chức năng 2D GUI) như 3dfx Voodoo vào thời điểm ban đầu Công nghệ sản xuất một lần nữa tiến triển, Chipset Verite của Rendition được là sản phẩm đầu tiên được tích hợp video, bộ tăng tốc 2D GUI,

và chức năng 3D tất cả vào một con chip

Trở thành một lực lượng chi phối trên máy tính, và là một động lực cho phát triển phần cứng OpenGL xuất hiện vào đầu những năm 90 như là API đồ họa chuyên nghiệp Phần mềm của OpenGL được phổ biến trong thời gian này, dù sau đó do tác động của OpenGL đã dẫn đến hỗ trợ phần cứng rộng rãi Một sự lựa chọn nổi lên giữa các tính năng có trong phần cứng và những tính năng đó có trong OpenGL Trong thời gian cuối những năm 90 DirectX phổ biến với các nhà phát triển game Windows Microsoft khẳng định nghiêm ngặt về việc cung cấp sự hỗ trợ một-một của phần cứng Không giống như OpenGL Việc đó đã làm DirectX ít phổ biến như là API đồ họa độc lập ngay từ đầu trong khi đó các GPU có nhiều tính năng đặc biệt, và hiện đã được ứng dụng OpenGL có thể được thừa hưởng, để lại DirectX một thế hệ sau Theo thời gian, Microsoft đã bắt đầu làm việc chặt chẽ hơn với các nhà phát triển phần cứng, và bắt đầu nhắm mục tiêu các bản phát hành của DirectX với những phần cứng đồ họa hỗ trợ phiên bản API đầu tiên đang phát triển để đạt được áp dụng rộng rãi trên thị trường chơi game là Direct3D 5,0 , và nó cạnh tranh trực tiếp với nhiều phần cứng, như các thư viện đồ họa độc quyền, trong khi OpenGL duy trì điều đó Direct3D 7,0 hỗ trợ phần cứng tăng tốc biến đổi và ánh

Trang 23

sáng (T & L) Bộ tăng tốc 3D biến đổi từ lúc dầu chỉ là bộ quét đường thẳng đơn giản về sau có thêm phần cứng quan trọng dùng cho các đường ống dẫn biến đổi 3D Sản phẩm đầu tiên trên thị trường với khả năng này là NVIDIA Geforce

256 (còn được gọi là NV10) Phần cứng biến đổi và ánh sáng, cả hai đều đã có trong OpenGL, trong phần cứng những năm 90 và đặt tiền đề cho các phát triển sau đó là các đơn vị đổ bóng điểm ảnh và đổ bóng vector mà với đặc tính linh hoạt hơn và lập trình được

Từ những năm 2000 đến hiện nay:

GPU đã có thêm tính năng đổ bóng lập trình được cùng với sự ra đời của API OpenGL và các tính năng tương tự trong DirectX Mỗi điểm ảnh, mỗi vector hình học bây giờ có thể được xử lý bởi một chương trình ngắn và trước khi nó được chiếu lên màn hình Lần đầu tiên hãng NVIDIA đã được sản xuất một con chip có khả năng lập trình đổ bóng, GeForce 3 (tên mã NV20) Sự ra đời của ATI Radeon 9.700 (còn gọi là R300), bộ tăng tốc Direct3D 9.0 lần đầu tiên trên thế giới vào tháng 10 năm 2002, bộ đổ bóng điểm ảnh và vector có thể thực hiện vòng lặp và các phép toán dấu phảy động dài, đã nhanh chóng trở nên linh

ho ạ t như CPU, và đòi hỏi cần có sự phát triển nhanh hơn cho các phép toán mảng liên quan đến hình ảnh (image-array operations) Những thứ như lập bản đồ bump, thêm vào các kết cấu (texture) thì đổ bóng điểm ảnh thường được sử dụng,

để làm cho một đối tượng trông bóng, căng mịn hoặc lồi lõm, hoặc thậm chí ảm đạm, thô ráp Khi khả năng xử lý của GPU tăng lên dẫn đến nhu cầu nguồn điện cao hơn.Với GPU hiệu suất cao, khả năng tiêu thụ năng lượng nhiều hơn các CPU hiện nay Ngày nay, GPU song song đã bắt đầu thực hiện xâm nhập máy tính và cạnh tranh với CPU, sự phổ biến của GPU đã len lỏi trong các lĩnh vực cần đến sự tính toán cao như đại số tuyến tính, xử lý hình ảnh khoa học, tái tạo 3D và hỗ trợ lựa chọn giá cổ phiếu , thăm dò dầu Việc này đã làm tăng th êm đ ộng lực cho các nhà sản xuất GPU từ "người dùng GPGPU" để giúp tiến thiết kế phần cứng tốt hơn

Trang 24

1.2.3 Cấu trúc của bộ xử lý đồ họa GPU

Với năng lực của mình GPU là một bộ xử lý luôn dồi dào khả năng tính toán Nhưng điều hiển nhiên đó là nó phải trưng bày khả năng tính toán đó cho các lập trình viên Trong thời gian gần đây GPU đã phát triển từ một hàm cố định, bộ xử lý chuyên dụng tới bộ xử lý lập trình song song, đầy đủ tính năng độc lập với việc bổ sung thêm các chức năng cố định, và các chức năng chuyên biệt Giờ đây các khía cạnh

về khả năng lập trình của bộ xử lý chiếm đã vị trí trung tâm Chúng ta đi xem xét

từng khía cạnh

Đường ống dẫn đồ họa (GraphicsPipeline)

Đầu vào của GPU là các kiểu hình học cơ bản, điển hình là tam giác, trong thế giới không gian 3 chiều Sau một quá trình những khối hình nguyên thủy đó được

làm bóng mờ (shade) và được vẽ lên màn hình, nơi chúng được lắp ráp để tạo ra

hình ảnh cuối cùng

Các phép toán vector:

Hình học nguyên thủy (primary geometric) cấu thành từ các vector riêng lẻ

Bằng cách tính toán tương tác với các luồng ánh sáng trong một bối cảnh cụ thể mỗi vector phải được chuyển thành không gian trên màn hình và có bóng mờ Những bối cảnh tiêu biểu có thể có hàng chục đến hàng trăm ngàn vector, và mỗi vector

có thể được tính toán độc lập Việc tính toán này rất phù hợp cho phần cứng song song

Các Thành phần nguyên tố:

Phần tử hỗ trợ phần cứng cơ bản trong GPU ngày nay đó chính là các vector được lắp ráp vào các hình tam giác

Sự quét mành:

Việc xác định những vị trí điểm ảnh nào trong không gian màn hình được bao

chứa bởi mỗi tam giác được gọi là Quét mành (rasterization) Mỗi một tam giác

Trang 25

tạo ra một phần tử cơ bản được gọi là "mảnh" ở vị trí điểm ảnh trong không gian

màn hình mà nó bao chứa Một chú ý là do nhiều tam giác có thể chồng lên nhau tại một vị trí điểm ảnh bất kỳ nên giá trị màu của mỗi điểm ảnh có thể được tính từ nhiều mảnh

Thao tác trên mảnh:

Lấy dữ liệu bổ sung từ bộ nhớ toàn cục trong các hình dạng của sự kết hợp (sự kết hợp là hình ảnh được ánh xạ lên bề mặt), sử dụng thông tin màu sắc từ vector, mỗi mảnh được làm bóng mờ để xác định màu sắc cuối cùng của nó Cũng giống trường hợp vector, mỗi mảnh được tính toán song song Giai đoạn này đòi hỏi nhiều tính toán nhất trong đường ống dẫn đồ họa

Sự phát triển của cấu trúc GPU

Điều kiện tiên quyết cho các hiệu ứng phức tạp là biểu diễn hiệu quả các trường hợp làm bóng mờ phức tạp hơn và các phép toán ánh sáng Giai đoạn quan trọng trên đã được thay thế bằng các phép toán trên mỗi mảnh và các hàm cố định chức năng trên mỗi vector với chương trình chỉ định người sử dụng chạy trên từng vector

và từng mảnh Qua thời gian các chương trình vector và chương trình mảnh đã có ngày càng nhiều khả năng, với bộ chỉ thị (tập lệnh) đầy đủ tính năng, với giới hạn lớn hơn về kích cỡ và tiêu thụ tài nguyên, và với các phép toán điều khiển luồng linh

hoạt hơn

Trang 26

GPU hiện tại hỗ trợ mô hình bóng mờ thống nhất 4.0 (unified Shader Model 4.0) trên cả bóng mờ vector và mảnh:

 Hỗ trợ phần cứng đổ bóng mờ đến 65K chỉ thị tĩnh đồng thời chỉ thị động không giới hạn

 Lần đầu tiên các tập lệnh hỗ trợ cả số nguyên 32 bit và số dấu phảy động 32bit

 Cho phép thao tác đọc trực tiếp và gián tiếp từ bộ nhớ toàn cục một cách tùy

ý

 Hỗ trợ điều khiển luồng động trong các dạng vòng lặp và rẽ nhánh

Tất cả các loại ứng dụng GPU đã tăng độ phức tạp chương trình vector và mảnh Khi mô hình đổ bóng ra đời và ngày càng phát triển với hiệu suất cao hơn, kiến trúc GPU ngày càng tập trung vào các bộ phận lập trình được của đường ống dẫn đồ họa Ngày nay GPU được khắc họa tốt hơn, như là công cụ lập trình được bao quanh bởi các đơn vị hỗ trợ có chức năng cố định

Cấu trúc của GPU hiện đại

GPU được xây dựng cho các nhu cầu ứng dụng khác nhau so với CPU, đó là các yêu cầu tính toán lớn chạy song song, với trọng tâm là thông lượng hơn là độ trễ Do đó, các kiến trúc của GPU phát triển theo một hướng khác so với CPU Trong một đường ống dẫn của các tác vụ, hầu hết các giao diện lập trình đồ họa phải xử lý một lượng lớn các dữ liệu đầu vào Các nhiệm vụ nối tiếp nhau được đưa vào đường ống dẫn đồ họa Một cơ chế song song được đặt ra trong đường ống dẫn đồ họa, cụ thể dữ liệu trong nhiều khung cảnh trong đường ống có thể được tính toán cùng một thời điểm, đó là cơ chế song song dữ liệu.Lần lượt từng khung cảnh, CPU có thể lấy một phần tử đơn và xử lý khung cảnh (stage) đầu tiên trong đường ống Tận dụng tất cả năng lực xử lý từng khung cảnh và chia đường ống dẫn đồ họa theo thời gian

GPU chia năng lực xử lý của bộ xử lý xét về mặt tài nguyên, theo khung cảnh Sao cho các đường ống được chia theo không gian

Trang 27

Đây là một cơ chế xử lý tốt Thứ nhất trong bất kỳ khung cảnh nào phần cứng

có thể khai thác cơ chế song song dữ liệu nên cơ chế song song nên công việc được chạy bất kỳ lúc nào và được xử lý nhiều phần tử cùng một lúc.Với cơ chế như vậy GPU có thể đáp ứng nhu cầu tính toán rất lớn của các đường ống dẫn đồ họa Thứ hai với mỗi công việc riệng biệt cần đến khả năng tính toán lớn phần cứng của mỗi khung cảnh có thể được thay đổi với phần cứng chuyên dụng Như trong giai đoạn rasterization, khi cần tính thông tin bao phủ điểm ảnh của từng điểm ảnh tam giác đầu vào, hiệu quả hơn khi thực hiện trên ứng dụng Các chức năng đơn giản được thay thế bằng thành phần lập trình được, nhưng với nhiệm vụ song song không thay đổi

Và cuối cùng ta có một đường ống dài feed-forward nhiều khung cảnh, mỗi khung cảnh dùng cho mục đích khác nhau, và thích hợp cho việc song song hóa và phần cứng song song Thường với CPU mỗi phép toán thường mất 20 chu kỳ hoạt động Với GPU mỗi phép toán thường mất hàng ngàn chu kỳ hoạt động và độ trễ tương đối lâu Nhưng với cơ chế song song tác vụ và dữ liệu giữa các khung cảnh tạo ra khả năng tính toán cao Có một vấn đề đáng quan tâm là cân bằng tải Hiệu suất của đường ống GPU phụ thuộc vào khung cảnh chậm nhất của nó Khi các chương trình mảnh đơn giản, chương trình vector phức tạp, lúc đó hiệu suất chung phụ thuộc vào hiệu suất của các chương trình vector Ở thời điểm đầu sau khi lập trình các khung cảnh, tập chỉ thị của các các chương trình mảnh và chương trình vector khá khác nhau, nên chúng được tách riêng Kiến trúc GPU xem xét lại đường ống song song tác vụ nghiêm ngặt trong lợi thế của kiến trúc đổ bóng hợp nhất (unified shader), trong

đó tất cả đơn vị lập trình được trong đường ống chia sẻ một đơn vị phần cứng lập trình được duy nhất khi cả hai chương trình vector và chương trình mảnh trở nên đầy đủ tính năng, và tập chỉ thị lệnh hội tụ như nhau các đơn vị lập trình bây giờ phân chia thời gian của nó giữa công việc vector, công việc mảnh, và công việc hình học (với DirectX có bộ đổ bóng 10 loại hình học khác nhau) trong khi phần lớn các đường ống vẫn còn là song song tác vụ Các đơn vị này có thể khai thác cả hai

cơ chế song song dữ liệu và song song tác vụ Kiến trúc của GPU chuyển từ kiến

Trang 28

trúc song song tác vụ trong một đường ống nghiêm ngặt sang kiến trúc được phát triển xung quanh một đơn vị lập trình được theo cơ chế song song dữ liệu thống nhất khi các bộ phận lập trình được của đường ống chịu trách nhiệm tính toán ngày càng nhiều trong các đường ống dẫn đồ họa Sản phẩm GPU Xenos GPU của nó trong Xbox 360 (2005) được AMD giới thiệu như các kiến trúc đổ bóng hợp nhất đầu tiên Ngày nay, cả GPU của AMD và NVIDIA đều có tính năng đổ bóng hợp nhất (unified shaders) Lợi ích cho người sử dụng GPU là với chi phí cho phần cứng cao hơn ta có cân bằng tải tốt hơn Ngoài ra với tất cả nguồn lực lập trình được trong một đơn vị phần cứng duy nhất, lập trình viên GPGPU bây giờ có thể tiếp cận đơn vị lập trình được theo cách trực tiếp, hơn hẳn trước cách tiếp cận trước đây

Hình10: Kiến trúc GPU của NVIDIA và AMD

Trang 29

mảnh) song song Trong lập trình mô hình cơ sở, các yếu tố không thể giao tiếp với nhau mỗi phần tử được độc lập với các phần tử khác Tất cả các chương trình GPU được tổ chức theo cách: mỗi thành phần được xử lý song song bởi một đơn chương trình và song song nhiều thành phần Mỗi thành phần có thể hoạt động trên dữ liệu dấu phảy động với một tập các chỉ thị lệnh vừa đủ dùng cho mục đích thông dụng (general purpose) hay số nguyên 32-bit Các thành phần co thể đọc dữ liệu từ bộ nhớ chia sẻ toàn cục và cũng có thể ghi vào bộ nhớ này Cách xử lý này đặc biệt thích hợp với các chương trình làm việc với đường thẳng,cụ thể nhiều thành phần có thể được xử lý trong các bước nối tiếp Ta nghiên cứu mô hình SPMD tổng quát hơn Trên GPU mô hình này được hỗ trợ như sau

Phần lớn tài nguyên dành cho việc tính toán là một trong những lợi ích của GPU Điều khiến đòi hỏi đáng kể phần cứng điều khiển là việc cho phép các con đường thực thi khác nhau cho từng phần tử GPU ngày nay hỗ trợ luồng điều khiển riêng cho từng luồng, nhưng đặt ra việc bắt lỗi cho những luồng tạp nham Các yếu

tố được nhóm lại với nhau thành những khối và các khối được xử lý song song Phần cứng tính cả hai bên của nhánh cho tất cả các phần tử trong khối nếu các yếu

tố phân nhánh ra các hướng khác nhau trong một khối Với thế hệ GPU gần đây kích cỡ của khối được giảm, ngày này đó là thứ tự của 16 phần tử

Khi viết chương trình thi câu lệnh rẽ nhánh được phép nhưng không dư thừa tài nguyên để tận dụng Và người lập trình cần tận dụng tốt tài nguyên tính toán sao cho hợp lý nhất

Các xử lý tính toán trên GPU(GPGPU)

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

Do sự tương đương này, nó vừa cũng khó khăn hơn và dễ dàng hơn trong việc giải thích quá trình hoạt động Một mặt có điểm khác nhau giữa đồ họa và sử dụng cho mục đích thông thường Một mặt, các hoạt động thực tế là như nhau và rất dễ làm theo Chúng ta bắt đầu lần lượt đi tìm hiểu

Sử dụng GPU cho mục đích đồ họa:

Trang 30

Chúng ta bắt đầu với một đường ống dẫn GPU mà chúng ta đã mô tả và tập

trung vào các khía cạnh lập trình được

- Khi lập trình cần xác định dạng hình học sẽ bao phủ khu vực trên màn hình

Sau đó quá trình quét mành sẽ tạo ra mỗi mảnh trên vị trí bao phủ đó

- chương trình mảnh sẽ tạo bóng mờ của mỗi mảnh

- Bằng cách kết hợp của phép toán toán học các chương trình mảnh sẽ tính giá

trị của các mảnh và bộ nhớ toàn cục đọc từ bộ nhớ kết cấu toàn cục

- Kết quả sẽ là kết cấu tiền đề để đi qua các đường ống dẫn đồ họa

Sử dụng GPU để tính toán cho các chương trình mục đích thông dụng:

Vẫn với đường ống dẫn đã chọn thực hiện tính toán general-purpose liên quan

đến các bước giống nhau, nhưng ký hiệu khác nhau

Một ví dụ đặc biệt tiêu biểu là một mô phỏng tính chất lỏng được tính toán trên

lưới: tại mỗi bước, chúng ta tính toán trạng thái tiếp theo của chất lỏng cho mỗi

điểm lưới từ tình trạng hiện tại trên lưới của nó và trạng thái các điểm lân cận của nó

trên lưới

- Lập trình viên đưa ra một hình nguyên thủy bao gồm một miền tính toán

quen thuộc Các chương trình quét mành tạo ra một mảnh (fragment) ở mỗi vị trí

điểm ảnh trong hình đó

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

- Chương trình mảnh tính giá trị của mảnh bằng cách kết hợp các phép toán

toán học và các truy cập từ bộ nhớ toàn cục Mỗi điểm lưới có thể truy cập trạng

thái của các lân cận của nó ở bước tính toán trước đó trong khi tính toán giá trị hiện

tại của nó

- Bộ nhớ đệm chứa kết quả sau đó có thể được sử dụng như là một khởi đầu

cho các chu kỳ tiếp theo

Sử dụng GPU để tính toán cho chương trình mục đích thông dụng hiện

nay :

Một trong những khó khăn trong lập trình ứng dụng GPGPU đó là các tác vụ

general-purpose không liên quan gì tới đồ họa, nhưng các ứng dụng vẫn phải được

Trang 31

lập trình bằng cách sử dụng các API đồ họa Các lập trình viên muốn truy cập vào các đơn vị lập trình được trực tiếp trong khi 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

Hiện nay ứng dụng tính toán GPU được tổ chức theo cách sau:

1) Xác định tên miền tính toán như một lưới cấu trúc của các luồng(thread)

2) Chương trình general-purpose SPMD tính giá trị của từng luồng

3) Giá trị cho mỗi luồng được tính bằng cách thực hiện đồng thời kết hợp các phép toán toán học và cả truy cập đọc và ghi bộ nhớ toàn cục

4) Bộ nhớ đệm chứa kết quả tính toán của bộ nhớ toàn cục sẽ là đầu vào cho các tính toán tiếp theo

Mô hình lập trình này mạnh vì nguyên nhân sau Thứ nhất, bằng cách xác định

rõ ràng cơ chế song song trong chương trình 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 Thứ hai, bằng việc tạo ra sự cân bằng vững chắc giữa 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 ) và 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ử) cho thấy điểm ấn tượng của nó Cuối cùng nó đã 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 nhờ khả năng truy cập trực tiếp đến các đơn vị lập trình được

Từ đó các chương trình thường được thể hiện bằng ngôn ngữ lập trình quen thuộc hơn (chẳng hạn như ngôn ngữ lập trình của NVIDIA là CUDA), đơn giản hơn, dễ dàng hơn để lập trình và gỡ lỗi Kết quả ta có 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

1.2.5 Các hỗ trợ phần mềm cho xử lý tính toán trên GPU

Trước đây 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 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

Trang 32

dù các 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 Vào thời gian đầ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 Cách này vẫn khó tiếp cận cho dù điều này tốt hơn với 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ả Lập trình đổ bóng cao cấp đã được thực hiện có thể thông qua ngôn ngữ đổ bóng cấp cao ("high-level shading language” - HLSL), Với DirectX 9 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 giờ đây đã có thể cung cấp các tính năng tương tự như HLSL, và hữu ích hơn là đã 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 hiện nay ngôn ngữ đổ bóng OpenGL là ngôn ngữ đổ bóng tiêu chuẩn cho OpenGL Mặc dù vậy chúng vẫn là ngôn ngữ đổ bóng và do vậy nên chúng vẫn khó tiếp cận với một lập trình viên thông thường

Một ngôn ngữ cấp cao hơn được thiết kế để tính toán một cách rõ ràng và trừu tượng hóa tất cả các cơ chế đồ họa của GPU là những gì các nhà phát triển thực sự muốn và có được Với mục tiêu trừu tượng GPU như là bộ xử lý dòng (streaming processor), BrookGPU và Sh là hai đầu dự án nghiên cứu đầu tiên về vấn đề đó Mô hình lập trình dòng tổ chức chương trình để thực hiện song song và cho phép giao tiếp hiệu quả và truyền dữ liệu đồng thời điều nay hoàn toàn thuận lợi với tài nguyên sẵn có trên GPU Một chương trình dòng bao gồm một tập hạt nhân (kernel), các dòng (stream), các tập được sắp xếp dữ liệu, và các hàm chức năng được thiết lập với từng phần tử trong tập các dòng tạo ra một hay nhiều dòng đầu ra

Brook tiếp cận theo hướng trừu tượng tính toán dòng đơn giản, để biểu diễn

dữ liệu như là các dòng và tính toán như là các hạt nhân Không có khái niệm

về kết cấu vector, mảnh, hoặc trộn (blending) trong Brook Hạt nhân là các tính toán được viết trong một tập hợp con giới hạn của C, đặc biệt là không có con trỏ

và scatter (sự tán xạ- thao tác ghi bộ nhớ), với đầu vào, đầu ra định nghĩa trước, và trùm các dòng được sử dụng trong hạt nhân như một phần của định nghĩa của nó

Trang 33

Brook chứa các chức năng truy cập dòng như: rút gọn các dòng, lặp lại và thoát khỏi vòng lặp, tập con các dòng để sử dụng như đầu vào và đầu ra và khả năng xác định tên miền Hạt nhân của người dùng được ánh xạ tới đoạn code đổ bóng cho mảnh và đến các dòng liên quan tới kết cấu Những hạt nhân được chạy cho mỗi phần tử trong miền các dòng đầu ra

Thông qua các lời gọi đọc / ghi rõ ràng được phiên dịch thao tác cập nhật kết cấu và cập nhật vào bộ đệm phản hồi dữ liệu tải lên và tải về GPU Sau đó, tính toán được thực hiện bởi một biến đổi vào không gian 3 chiều vùng các điểm ảnh trong miền đầu ra

Thay vì sử dụng biên dịch offline, dự án Microsoft’s Accelerator (bộ gia tốc của Microsoft) có mục tiêu tương tự như Brook tập trung vào khía cạnh tính toán, nhưng 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 Bộ gia tốc là ngôn ngữ dựa trên mảng (array-base language) phát triển từ ngôn ngữ C #, và tất cả các tính toán được thực hiện thông qua các phép toán trên các mảng, không giống như mô hình của Brook và Sh được phần lớn các phần mở rộng từ C Khác với Brook, nhưng giống Sh, mô hình đánh giá độ trễ cho biên dịch tức thời hiệu suất cao hơn làm cho khả năng chuyên biệt hơn và tối ưu code tạo ra để thực hiện trên GPU

Đã 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 và 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 trong thời gian vừa qua RapidMind đã thương mại hóa Sh và hiện nay đang đặt mục tiêu nhiều platform trong một GPU, CPU đa lõi, các STI Cell Broadband Engine, 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

RapidMind sử dụng ước lượng độ trễ và biên dịch online để chụp lại và tối ưu hóa mã nguồn ứng dụng của người dùng cùng với các phép toán và mở rộng kiểu của C ++ để tạo ra những hỗ trợ trực tiếp cho mảng giống như bộ gia tốc của Microsoft , Được thiết kế xoay quanh các phép toán trên mảng, PeakStream

là hệ thống mới, sáng tạo từ Brook Cũng giống như bộ gia tốc và RapidMind,

Trang 34

PeakStream chỉ sử dụng trong biên dịch tức thời, nhưng linh hoạt hơn nhiều trong việc vector hóa code của người dùng nhằm đạt hiệu suất cao nhất trên kiến trúc SIMD Khía cạnh mà là một vấn đề hóc búa trong phát triển GPGPU được PeakStream cung cấp platform đầu tiên hỗ trợ profiling và gỡ lỗi Các nỗ lực này giúp cho các nhà cung cấp của bên thứ ba tạo các hệ thống với sự hỗ trợ từ các nhà cung cấp GPU Với lợi ích trên, Google đ ã mua PeakStream trong năm 2007

Cả AMD và NVIDIA hiện nay đều sở hữu riêng hệ thống lập trình GPGPU AMD công bố hệ thống r i ê n g của họ vào cuối năm 2006 CTM, hay "Close To The Metal", cung cấp mức trừu tượng phần cứng ở cấp thấp (HAL) cho dòng R5XX và dòng R6XX của GPU ATI CTM-HAL cung cấp truy cập mức assembly thô cho động cơ mảnh (bộ xử lý dòng - stream processor) cùng với bộ lắp ráp và

bộ đệm lệnh để điều khiển thực thi trên phần cứng Với các giao diện này không tính năng đồ họa cụ thể nào được xuất Các phép tính toán được thực hiện bằng cách ràng buộc bộ nhớ như là đầu vào và đầu ra các bộ vi xử lý dòng, định nghĩa một miền các kết quả đầu ra mà trên đó để thực thi nhị phân, tải mã nhị phân ELF Hãng AMD cũng tiếp tục đưa ra tầng trừu tượng tính toán - Compute Abstraction Layer (CAL) Tầng này đưa thêm các cấu trúc (construct) cấp cao hơn, giống như thành phần tương tự trong hệt thống chạy của Brook, và hỗ trợ biên dịch GPU ISA cho GLSL, HLSL, và mã giả Assembly như Pixel Shader 3.0 Hãng cũng 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 tượng cao hơn so với CAL hoặc HAL đối với lập trình cấp cao hơn Cũng giống 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

CUDA khai thác hai cấp xử lý song song là song song dữ liệu và đa luồng, 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 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; bộ nhớ bo mạch, và bộ nhớ máy chủ, 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 Các hạt nhân trong CUDA cũng linh

Trang 35

hoạt hơn bằng việc cho phép sử dụng con trỏ (nhưng 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 đồng bộ giữa các luồng trong một khối luồng, và tán xạ (scatter) dữ liệu từ bên trong một hạt nhân Nhưng tất cả sự hữu ích này và kết quả tiềm năng đạt được đi kèm với việc yêu cầu người sử dụng phải biết nhiều hơn các chi tiết ở cấp thấp của phần cứng, như là sử dụng thanh ghi, các hành vi của các mẫu truy cập bộ nhớ và luồng và lập lịch cho khối luồng

Tất cả các hệ thống này cho phép người phát triển xây dựng các ứng dụng lớn dễ dàng hơn CUDA cung cấp điều chỉnh và tối ưu hóa thư viện Blas và FFT

để sử dụng như xây dựng khối cho các ứng dụng lớn Truy cập hệ thống GPGPU

cụ thể như CUDA, hoặc truy cập cấp thấp vào phần cứng, như là cung cấp bởi CTM, cho phép các người phát triển vượt qua một cách có hiệu quả các trình điều khiển

đồ họa và duy trì ổn định hiệu năng và tính đúng đắn Việc tối ưu được thực hiện để tối ưu hóa cho hiệu năng game có thể ảnh hướng tới tính ổn định và hiệu năng của các ứng dụng GPGPU

1.2.6 Các kỹ thuật tính toán trên GPU

Chúng ta khảo sát một số đặc tính tính toán quan trọng, ứng dụng tính toán GPU và các thuật toán Chúng ta tìm hiểu bốn phép toán song song dữ liệu tập trung

ở tính toán GPU: ánh xạ một chức năng vào nhiều yếu tố song song, thực hiện phép toán tán xạ (scatter) / tập hợp (gather) bộ nhớ, tính toán rút gọn cho trước một mảng song song, giảm một bộ sưu tập các yếu tố thành một yếu tố hoặc một giá trị Chúng ta nghiên cứu tính toán cơ bản cốt lõi ở một số chi tiết trước khi nghiên cứu với một cách nhìn tổng quan mức cao về các vấn đề thuật toán mà các nhà nghiên cứu đã nghiên cứu trên GPU: phương trình vi phân, đại số tuyến tính, quét, tìm kiếm, sắp xếp, truy vấn dữ liệu Các thuật toán cho phép nhiều ứng dụng khác nhau, từ khai phá dữ liệu, cơ sở dữ liệu, đến các mô phỏng khoa học, như là chuyển động nhiệt của chất lỏng chuyển động vật lý trong trò chơi và động lực học phân tử

và động lực học

Trang 36

Tính toán nguyên thủy:

Thường với các lập trình viên ngày nay trưởng thành từ máy tính tuần tự hoặc cụm máy tính kết nối lỏng lẻo nhưng các kiến trúc song song dữ liệu của GPU đòi hỏi thuật ngữ lập trình quen thuộc từ lâu với người sử dụng siêu máy tính song song Chúng ta nghiên cứu cơ bản về bốn các yếu tố quan trọng: ánh xạ, rút gọn, tán xạ / tập hợp (scatter/gather), và quét Ta tìm hiểu những tính toán nguyên thủy này trong bối cảnh cả dựa trên đồ họa và tính toán trực tiếp trên tính toán GPU để nhấn mạnh sự đơn giản và tính linh hoạt của cách tiếp cận tính toán trực tiếp

Tán xạ/tập hợp :

Đọc ra hoặc viết vào một vị trí được tính toán trong bộ nhớ Tính toán GPU dựa trên đồ họa cho phép tập hợp hiệu quả bằng cách lưu trữ dữ liệu như hình ảnh kết cấu và đánh địa chỉ dữ liệu bằng cách tính toán tọa độ hình ảnh tương ứng và thực hiện phép nạp kết cấu, sử dụng các hệ thống con về kết cấu Tuy vậy, các hạn chế về kết cấu làm cho khó phát triển thêm nữa: phép nạp kết cấu đơn chỉ có thể lấy

4 giá trị dấu phảy động 32bit, hạn chế bộ nhớ lưu trữ mỗi phần tử, hạn chế kích thước kết cấu đòi hỏi các mảng chứa trên 4.096 phần tử thành nhiều dòng của một kết cấu 2D, bổ sung thêm phép toán đánh địa chỉ Phép tán xạ trong tính toán GPU đòi hỏi phải tái liên kết dữ liệu để thực thi như là các vector, hoặc sử dụng phép nạp kết cấu đỉnh hoặc render- to-vertex-buffer và dựa trên đồ họa khó khăn Ngược lại lớp trực tiếp tính toán cho phép đọc và ghi không giới hạn đến các địa điểm tùy ý trong bộ nhớ CUDA của NVIDIA cho phép người dùng truy cập vào bộ nhớ bằng cách sử dụng các cấu trúc C chuẩn (mảng,con trỏ, biến); CTM của AMT cũng gần linh hoạt được như vậy, nhưng sử dụng địa chỉ 2D

Ánh xạ (Map): ): Sử dụng một phép toán trên mọi phần tử trong bộ sưu tập

Tiêu biểu là vòng lặp for trong chương trình tuần tự (như là một luồng trên một

CPU đơn lõi) Một tác vụ song song có thể giảm tối đa thời gian cần thiết khi áp dụng phép toán đó đến nhiều phần tử song song Như là chương trình mảnh được

Trang 37

gọi từ bộ sưu tập điểm ảnh (một điểm ảnh cho mỗi phần tử), tính toán GPU dựa trên đồ họa thực hiện phép ánh xạ Đ i ể m ả n h đ ư ợ c đọc dữ liệu từ kết cấu tại một ví trí tương ứng với vị trí của điểm ảnh trong hình ảnh đã biến đổi, thực thi phép toán đó bởi từng chương trình mảnh sau đó lưu trữ các kết quả tại điểm ảnh đầu ra Giống như vậy CTM và CUDA sinh ra một chương trình luồng để thực hiện phép toán đó trong nhiều luồng, với mỗi luồng nạp vào một phần tử, thực hiện tính toán, và lưu trữ kết quả Và vì vòng lặp hỗ trợ mỗi luồng có thể cũng lặp nhiều lần trên nhiều phần tử

Rút gọn (Reduce): Để rút gọn một tập hợp các phần tử thành một phần tử

duy nhất hoặc một giá trị duy nhất, liên tục áp dụng một phép toán kết hợp nhị phân Ví dụ bao gồm việc tìm kiếm tổng (tối thiểu, tối đa, phương sai, trung bình, vv ) của một tập các giá trị Một thực thi tuần tự sẽ lặp trên một mảng, tính tổng từng phần tử bằng cách chạy phép cộng tât cả các phần tử hiện có, đó là trên CPU truyền thống Và thực hiện nhiều lần phép cộng song song trên một tập thu hẹp các phần tử trong một rút gọn tổng theo cơ chế song song Các xử lý tính toán trên GPU dựa trên đồ họa thực hiện rút gọn dựa trên biến đổi (rendering) tập giảm dần các điểm ảnh Trong từng biến đổi từng vượt qua chương trình mảnh đọc nhiều giá trị từ một kết cấu (thực thi khoảng 4 hoặc 8 lần đọc kết cấu), tính tổng đó, và ghi giá trị đó vào điểm ảnh đầu ra trong kết cấu khác (nhỏ hơn 4 hoặc 8 lần), mà sau đó sẽ bị ràng buộc như là đầu vào cho bộ đổ bóng mảnh tương tự và quá trình lặp đi lặp lại cho đến khi đầu ra là một điểm ảnh đơn chứa kết quả cuối cùng của quá trình rút gọn.Tương tự như vậy, nhưng CTM và CUDA cùng cho ra cùng một quá trình trực tiếp hơn, ví dụ bằng cách tạo ra một tập các luồng, mỗi luồng dọc 2 phần tử và ghi tổng của chúng vào một phần tử đơn Một nửa số luồng lặp lại quá trình trên, sau đó là nửa còn lại, cứ như vậy cho đến khi còn lại một luồng sống sót sẽ ghi kết quả cuối cùng ra bộ nhớ

Quét (Scan):

Trang 38

Quét lấy một mảng A các phần tử và trả về một mảng B có cùng chiều dài, trong đó mỗi phần tử B [i] đại diện cho một phép rút gọn mảng con A[1 i] được gọi là tổng tiền tố song song Cô n g c ụ quét là mộ t công cụ xây dựng khối dữ cực kỳ hiệu quả cho thuật toán song song dữ liệu CUDA thực hiện nhanh hơn so với CPU bởi một một thừa số lên đến 20 và OpenGL bởi một thừa số lên đến 7 Kết quả minh họa cho những lợi thế của tính toán trực tiếp hơn là tính toán GPU dựa trên đồ họa

1.2.7.Các giải thuật ứng dụng trên GPU

Khi phát triển phần lớn vào các phép toán cơ bản trên, các chuyên gia đã biểu diễn nhiều thuật toán mức cao và các ứng dụng khai thác các lợi thế tính toán của GPU

Sắp xếp (Sort): GPU đã có những bước tiến đáng kể trong sắp xếp từ khi

các nhà nghiên cứu GPU đã nghiên cứu lại, áp dụng, và cải thiện các thuật toán

sắp xếp, đáng chú ý là sắp xếp bitonic merge Thuật toán "sorting network"

này về bản chất là song song và mù, có nghĩa là được thực hiện bất kể đầu vào

và tương tự nhau Nhờ sử dụng hệ thống thiết kế cẩn thận và sự kết hợp của cải tiến nhiều thuật toán Govindaraju và các đồng nghiệp đã giành giải hiệu năng

"PennySort" trong cuộc thi "TeraSort" năm 2005

Tìm kiếm và truy vấn cơ sở dữ liệu : Các nhà phát triển cũng đã triển khai

một số hình thức tìm kiếm trên GPU, như các thuật toán sắp xếp nhanh ở trên, tìm kiếm láng giềng gần nhất, tìm kiếm nhị phân,cũng như các thao tác cơ sở dữ liệu được xây dựng trên phần cứng đồ họa mục đích đặc biệt (gọi là bộ đệm độ sâu stencil)

Phương trình vi phân : Cố gắng đầu tiên sử dụng GPU cho tính toán phi đồ

họa tập trung vào giải quyết các tập lớn phương trình vi phân một ứng dụng GPU phổ biến cho phương trình vi phân thường (ODEs) là phép tìm đạo hàm, được sử dụng rất nhiều trong các hiệu ứng trực quan cho các chò trơi trên máy tính và trong mô phỏng khoa học (ví dụ, hệ thống thăm dò lưu lượng của Kr¨uger ) GPU

Trang 39

đã được sử dụng nhiều để giải quyết các vấn đề trong phương trình vi phân riêng (PDEs) như phương trình Navier- Stokes cho dòng chảy tự do ứng dụng đặc biệt thành công mà GPU PDE đã giải quyết bao gồm phương trình thiết lập phân chia

âm thanh và các động lực chất lỏng

Đại số tuyến tính : chương trình đại số tuyến tính là các khối tạo dựng cốt

lõi cho một rất lớn các thuật toán số học, bao gồm cả giải pháp PDE Ứng dụng của nó bao gồm chứa mô phỏng các hiệu ứng vật lý như: bức xạ, hiệu ứng quang học như lĩnh vực độ sâu và chất lỏng, nhiệt, và tương tự, qua đó vấn đề đại số tuyến tính trên GPU đã nhận được nhiều sự chú ý Điển hình là sản phẩm của Kr ¨uger và Westermann đã giải quyết một lớp rộng của các vấn đề đại số tuyến tính bằng cách tập trung vào biểu diễn ma trận và vectơ trong tính toán trên GPU dựa trên đồ họa (đóng gói các vector dày đặc (dense) và thưa thớt (sparse) vào các kết cấu, bộ đệm vector, v.v ) Một sản phẩm đáng chú ý khác là giải pháp cho các hệ thống tuyến tính dày đặc của Gallapo và đồng nghiệp, và các phân tích về phép nhân ma trận dày đặc của Fatahalian và đồng nghiệp Tác giả đã cho thấy có hiệu suất lớn hơn, và thậm chí các triển khai ATLAS tối ưu hoá mức cao Ứng dụng của các tầng trực tiếp tính toán như CTM và CUDA vừa đơn giản hoá đồng thời cải thiện hiệu suất của đại số tuyến tính trên GPU Như NVIDIA cung cấp uBLAS, một gói đại số tuyến tính dày đặc thực thi trong CUDA và sau đó là các quy ước BLAS phổ biến Các nhà nghiên cứu mong có mã nguồn thưa thớt để kiểm chứng lợi ích tương tự hoặc lớn hơn từ tầng tính toán mới GPU và các thuật toán đại

số tuyến tính thưa thớt có nhiều biến đổi và phức tạp hơn so với loại dày đặc đang là một lĩnh mở và hướng nghiên cứu tích cực

Trang 40

CHƯƠNG II: XỬ LÝ SONG SONG TRÊN THIẾT BỊ ĐỒ HỌA GPU

VỚI CUDA

2.1 Khái quát về CUDA

Là từ viết tắt của thuật ngữ Compute Unified Device Architecture, CUDA tạm dịch là kiến trúc thiết bị hợp nhất cho tính toán Bắt đầu xuất hiện từ tháng bảy năm 2007 với vai trò ban đầu là một bộ công cụ phát triển phần mềm dựa trên ngôn ngữ lập trình C Hiện nay CUDA đang tiến hóa thành kiến trúc điện toán GPU, hay còn gọi là GPGPU của NVIDIA CUDA có mặt trên hầu hết các GPU đời mới của NVIDIA, từ Quadro giành cho điện toán hình ảnh chuyên nghiệp, dòng Tesla cho tính toán hiệu năng cao và dòng GeForce giành cho giải trí

Bộ phần mềm CUDA có các lớp mô tả trong Hình 11, gồm: API lập trình, bộ điều khiển (dirver) cho phần cứng, 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 và môi trường thực thi Phần cứng được thiết kế để hỗ trợ bộ điều khiển hạng nhẹ và lớp môi trường thực thi Kết quả là làm cho GPU có tốc độ cao

Hình 11: Kiến trúc phần mềm CUDA

Ngày đăng: 13/10/2017, 15:47

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] 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ĩ, trường Đại học Đà Nẵng 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
[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ĩ, trường Đại học Công nghệ Hà Nội 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] Nguyễn Thị Dung (2013), “Hệ mã hóa AES”, tiểu luận, trường đại học công nghệ , Đại học Quốc gia Hà Nội Sách, tạp chí
Tiêu đề: Hệ mã hóa AES
Tác giả: Nguyễn Thị Dung
Năm: 2013
[5] Lưu Thị Thúy Linh (2013), “Nghiên cứu một vài khía cạnh về độ an toàn của AES”, luận văn thạc sĩ, Học viện Công nghệ bưu chính viễn thông.Tài liệu tiếng anh Sách, tạp chí
Tiêu đề: “Nghiên cứu một vài khía cạnh về độ an toàn của AES”
Tác giả: Lưu Thị Thúy Linh
Năm: 2013
[6] Jason Sanders, Edward Kandrot, “CUDA by example”, an introduction to General- Purpose GPU programming Sách, tạp chí
Tiêu đề: CUDA by example
[7] Maciej Matyka, “GPGPU programming on example of CUDA”, Institute of Theoretical Physics University of Wroclaw Sách, tạp chí
Tiêu đề: GPGPU programming on example of CUDA
[8] NVIDIA, “High performance computing with CUDA”, Users Group Conference San Diego, CA June 15, 2009 Sách, tạp chí
Tiêu đề: High performance computing with CUDA
[2] Nguyễn Việt Đức – Nguyễn Nam Giang (2012), ”Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA”, luận văn thạc sỹ, trường Đại học Công nghệ Hồ Chí Minh Khác

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