Tải bản đầy đủ (.pdf) (98 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.8 MB, 98 trang )

i
...

ĐẠ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


ii

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 hồn tồ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 hồn tồn
trách nhiệm.
TÁC GIẢ LUẬN VĂN

Đinh Tiến Ngọc


iii

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 hồ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 hồ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


iv

DANH MỤC THUẬT NGỮ
TiếngAnh

TiếngViệt

GPU

Bộ xử lý đồ họa

gpgpu

Tính tố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


stream

Dòng

streamingprocessor Bộ xử lý dòng
MIMD

Multiple Instruction Multiple Data: đa lệnh đa dữ liệu

primarysurface

Bề mặt chính

proccessor

Bộ xử lý

Rasterization

Sự quét mành trên màn hình


v

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 tốn trên GPU .................................... 22
1.2.6. Các kỹ thuật tính tố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


vi
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 tố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 TỐN CHO BÀI
TỐN MÃ HĨA AES .................................................................................................. 48
3.1 Giới thiệu về AES ................................................................................................ 48
3.2 Thuật tố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 tố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 tốn ................................. 93
KẾT LUẬN ................................................................................................................... 88
TÀI LIỆU THAM KHẢO ............................................................................................. 89


vii

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


viii

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 tốn lớn. Tuy nhiên trong khi với nhu cầu tính tố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 tốn dấu chấm động đơn, hỗ trợ tính tố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 tốn cho bài tốn mã hóa


ix

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.


1


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 tố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


2

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 tố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
Lập trình tính tốn tuần tự

Lập trình tính tốn song song

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

- Chương trình ứng dụng chạy trên nhiều

(single processor).

bộ xử lý.

- Các câu lệnh được bộ xử lý(CPU)


- Các câu lệnh được các bộ vi xử lý thực

thực hiện một cách lần lượt.

hiện một cách song song, đồng thời.

- Mỗi câu lệnh thực thiện trên duy nhất - Mỗi câu lệnh có thể thao tác trên nhiều
một thành phần dữ liệu.

thành phần dữ liệu khác nhau.


3

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

- Viết đúng câu lệnh và giải thuật. Ngồi ra

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

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 tốn dữ liệu nhỏ, độ - Được sử dụng đối với các bài tốn có dữ
phức tạp khơng cao và u cầu thời gian liệu lớn, độ phức tạp cao và thời gian ngắn.
chấp nhận được.

 Mục đích của xử lý song song
Dựa trên việc tính tố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 tốn có độ phức tạp lớn, u cầu khối lượng
tính tố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:


4

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

Dòng dữ liệu

stream)

(data stream)

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

Trạng thái đơn

SISD


(single)

Single Instruction Single

Trạng thái đa

SIMD
Data

(multiple)

Single Instruction Multiple

Trạng thái đơn

MISD
Data

(single)

Multiple Instruction Single

Trạng thái đa

MIMD
Data

(multiple)


Multiple Instruction Multiple

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

Loại kiến trúc

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 (NonUniform 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.


5

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.


6

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.


7

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 tốn
tuần tự nhằm tăng tốc độ xử lý tính tố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 tố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 tốn đồng thời. Do vậy khi muốn lập trình song song một thuật tốn ta cần
xác định là có thể song song hóa thuật tố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.


8

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 tố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
tố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 q trình tính tố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


9

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ý.
 Việc đồng bộ các tiến trình.
Các bước thiết kế giải thuật song song và chương trình có thể xử lý
song song
Khi bắt tay thiết kế một giải thuật song song điều quan trọng là ta phải biết
được cần song song trong công đoạn nào. Trước khi song song thuật tốn ta cần biết
thuật tốn đó ở dạng tuần tự, đồng thời phải hiểu về giải thuật và ngơn ngữ lập trình
cụ thể. Khi đó ta xét các bước sau để xem bài tốn đó có song song hóa được khơng:
- Phân tích bài tố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ự


10

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 tố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.
A

1

1

1

1


1

+
B
=

4

C

5

4

4

5

5

4

4

5

5

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 tốn này khơng song song hóa được vì ngun 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 tố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 tố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 q trình và nó sẽ tính tốn N/n phần tử tương ứng của mảng kết quả. Như


11

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 tố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 tố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 tốn hiện đại. Tính
tố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 tố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à q trình phát triển GPU
GPU là bộ xử lý của card đồ họa, dùng để tính tốn các phép tố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 tốn các
phép tố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.


12

 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 tốn
vị trí và hiển thị (theo khn 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 tốn 2D ngun 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 đó.


13

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ộtmộ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


14

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 tốn dấu phảy động dài, đã nhanh chóng trở nên linh
h o ạ t như CPU, và địi hỏi cần có sự phát triển nhanh hơn cho các phép tố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 tố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.


15

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ý ln dồi dào khả năng tính tốn. Nhưng
điều hiển nhiên đó là nó phải trưng bày khả năng tính tố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 q trình những khối hình ngun 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 tốn vector:
Hình học ngun thủy (primary geometric) cấu thành từ các vector riêng lẻ.
Bằng cách tính tố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 tốn độc lập. Việc tính tố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


16

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 tốn song song. Giai đoạn này địi hỏi
nhiều tính tốn nhất trong đường ống dẫn đồ họa.

Thành phần:
Với mỗi điểm ảnh các mảnh được lắp ráp thành hình ảnh cuối cùng với một
màu, và bằng cách giữ lại mảnh gần ống dẫn đồ họa nhất cho mỗi vị trí điểm ảnh.
Đã có các phép tốn tại khung cảnh vector và mảnh đã được cấu hình nhưng
khơng thể lập trình được. Tính tốn chủ yếu ở khung cảnh vector là tính tốn màu
sắc ở mỗi vector và các độ sáng trong bối cảnh đó. Trong đường ống dẫn đồ họa,
các lập trình viên có thể kiểm sốt được vị trí và màu sắc của các vector và ánh
sáng, nhưng không phải là mơ hình chiếu sáng mà xác định tương tác giữa chúng.

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.



×