Tải bản đầy đủ (.docx) (134 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.46 MB, 134 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 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


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


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

TiếngViệt

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

coproccessor

chuẩn để triệu gọi một tập các chức năng.
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

texturefetches

thu nhỏ của đối tượng.
Hàm đọc kết cấu

texturereference Tham chiếu kết cấu
warp
SIMD


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

stream

Dòng

streamingprocess Bộ xử lý dòng
or
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


MỤC LỤC

LỜI


CAM

ĐOAN

..............................................................................................................i

LỜI

CẢM

ƠN

................................................................................................................
DANH

MỤC

THUẬT

..........................................................................................iv

iii
NGỮ

MỤC

LỤC

.......................................................................................................................
v


DANH

MỤC

................................................................................................
ĐẦU

HÌNHVẼ
vii

LỜI

MỞ

.............................................................................................................

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


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


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()


vii

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


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


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


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

Lập trình tính toán song song

- Chương trình chạy trên một bộ xử - Chương trình ứng dụng chạy trên

nhiều
(single processor).
- Các câu lệnh được bộ xử lý(CPU)
thực hiện một cách lần lượt.

bộ xử lý.
- Các câu lệnh được các bộ vi xử lý
thực
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.


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

 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:


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

Loại kiến trúc

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

(multiple)

Single Instruction Multiple

Trạng thái đơn

MISD

(single)

Multiple Instruction Single

Trạng thái đa

MIMD

(multiple)

Multiple Instruction
Multiple

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

Trạng thái đa (multiple)


Trạng thái đa (multiple)

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.


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.


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 Butterfy.


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.


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


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 toán
ta cần biết thuật toá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 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ự


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

1

+B

1

1

1

1

=C


4
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 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ư


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 G PU đã 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.




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 p h á t t r i ể 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 đó.


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


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 ã n
g N V I D I A đ ã đượ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 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 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 t h ê m đ ộ n g 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.


×