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ủacác phân tử, nguyên tử, dự báo thời tiết, mô ph
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 2Tôi xin cam
đoan :
LỜI CAM ĐOAN
Những nghiên cứu dưới đây trong luận văn của tôi hoàn toàn trungthực không vi phạm bất kỳ quyền sở hữu trí tuệ nào Nếu sai tôi xinchịu hoàn toàn trách nhiệm
TÁC GIẢ LUẬN
VĂN
Đinh Tiến Ngọc
Trang 3LỜ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úphoà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ựchiệ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 4DANH MỤC THUẬT NGỮ
TiếngAnh TiếngViệt
gpgpu Tính toán thông dụng trên GPU
API Application Program Interface : Định nghĩa một
giao diệnchuẩn để triệu gọi một tập các chức năng
coproccessor bộ đồng xử lý
texture Kết cấu: cấu trúc của đối tượng, nó được xem như
mô hìnhthu 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
liệuprimarysurface Bề mặt chính
proccessor Bộ xử lý
Rasterization Sự quét mành trên màn hình
Trang 5vii LỜI MỞĐẦU .viii CHƯƠNG I : KHÁI QUÁT VỀ BỘ XỬ LÝ ĐỒ HỌA GPU VÀ XỬ LÝ SONGSONG
11.1 Khái quát về xử lý songsong 1
1.1.1 Khái quát về xử lý song song
Trang 61.2.6 Các kỹ thuật tính toán trên GPU
trình 332.2.2.Cách thức hoạt động của CUDA
33
2.3 Tổng quan về lập trình vớiCUDA 382.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 72.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 483.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
623.3.1 Giao diện chương trình demo 923.3.2 Kết quả chương trình và đánh giá hiệu suất tính toán
93KẾT LUẬN
88
TÀI LIỆU THAM KHẢO 89
Trang 9vii 51
Trang 10LỜ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ôngnhữ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 Tuynhiên trong khi với nhu cầu tính toán ngày cành tăng cao đó, ngành côngnghệ 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àycũ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 GPUphá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ándấu chấm động đơn, hỗ trợ tính toán lên cả ngàn lệnh Và đặc biệt vớitiềm năng như vậy có thể nghĩ tới việc sử dụng GPU ngoài đồ họa Cùngvới ý tưởng như vậy tôi đã liên tưởng đến việc áp dụng việc xử lý songsong trên GPU thông qua ngôn ngữ lập trình CUDA Xuất phát từ ý tưởngtrên tôi đã chọn đề tài: NGHIÊN CỨU CÔNG NGHỆ XỬ LÝ GPU VÀ ỨNGDỤ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ý songsong 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 11AES 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ùngkết luận về hiệu suất của GPU
Trang 12CHƯƠ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ủaJohn Von
Neumann Đó là thiết kế mà ở đó một lệnh được thực hiện trên một bộ xử lý
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 đã thaythế dần máy tính đơn nhân, một bộ xử lý Và với những thuật toán, câulệnh, phép xử lý tuần tự đã không còn phù hợp với máy tính song song Dovậy xử lý song song đã ra đời thay thế cho xử lý tuần tự nhằm đem lại hiệună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 13yê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ủacá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áttriể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ộtlú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ộtlú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ử
hiện một cách song song, đồng thời
- Mỗi câu lệnh thực thiện trên duy
Trang 14- 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ỏ,
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ânloạ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ânmá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ònglệnh (instruction stream) và dòng dữ liệu (data stream), mỗi loại nằmtrong một trong hai trạng thái đơn (single) hoặc đa (multiple) Dựa theophân loại của Flynn có 4 loại máy tính song song theo bảng dưới:
Trang 15Bả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)
SISDSingle Instruction SingleTrạng thái đơn (single) Trạng thái đa
(multiple)
SIMDSingle Instruction Multiple
Trạng thái đa (multiple) Trạng thái đơn
(single)
MISDMultiple Instruction Single
Trạng thái đa (multiple) Trạng thái đa
(multiple)
MIMDMultiple Instruction Multiple
Dựa trên cấu trúc bộ nhớ Flynn đã chia ra làm các loại máy tínhtrê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ớpmá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ớpmá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 16Má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ộtlệnh, đọc, ghi một mục dữ liệu Chỉ có một thanh ghi gọi là bộ đệm và kếtquả đầ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ùngthực hiện một phép toán trên nhiều luồng dữ liệu khác nhau và có mộtthành phần để điều khiển cho các bộ xử lý thực hiện xử lý các luồng câulệnh
Trang 17Hì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âulệnh trên nhiều luồng khác nhau.Các bộ xử lý đều có bộ nhớ riêng biệtnhư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ênkiến trúc này, ví dụ: BBN Butterfly
Trang 18Hì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 songsong hóa các thuật toán tuần tự nhằm tăng tốc độ xử lý tính toán lênnhiều lần
Trong đó việc lập trình song song là chia các chương trình, bài toánlớ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áncon 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ốicùng Việc quan trong nhất ở đây là xử lý các bài toán đồng thời Do vậykhi 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
Trang 19Một vấn đề quan trọng trong lập trình song song đó là việc kết nốigiữ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ệcphân chia công việc cho máy tính song song hiệu quả cho tất cả các bàitoá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ớinhau
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éptoá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áctập dữ liệu khác nhau Mô hình
Trang 20nà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ý
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 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ự
Trang 211 1 1 1 1
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
Bài toán này không song song hóa được vì nguyên nhân tính số hạngcủ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ántrê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ẽ đặtN/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 22vậ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 đờicho đế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 GPUtrong cả việc hỗ trợ lập trình và khả năng tính toán của nó đã tạo ra mộthướng nghiên cứu mới Một nhóm các chuyên gia đã nghiên cứu thànhcô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ệună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ộtthay thế tiềm năng cho CPU trong hệ thống máy tính hiện đại Trong mộttươ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ándấ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ínhtoá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ư trongcá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ạynhanh hơn nhiều so với việc vẽ trực tiếp trên màn hình với CPU
Trang 23 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ữnghiệu ứng khác trên các máy tính ATARI 8-bit, bởi hãng sản xuất chipANTIC và CTIA Chíp ANTIC là một bộ xử lý dành riêng cho ánh xạ (lậptrì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ácphé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ầncứ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ủariê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ốc2D cho chip của họ Vào thời điểm này, bộ tăng tốc Windows với cácchứ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íchhợ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 choWindows 3.x, và giao diện DirectDraw của họ cho tăng tốc phần cứng củagame 2D trong Windows 95 và sau đó
Trang 24Vớ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áttriể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à MatroxMystique 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ốithiểu hiệu năng đồ họa 3D đã chấp nhận được với bảng mạch rờidà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ầnnữ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ộtcon 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ựccho 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 trongthời gian này, dù sau đó do tác động của OpenGL đã dẫn đến hỗ trợ phầncứ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ầncứng và những tính năng đó có trong OpenGL Trong thời gian cuốinhững năm 90 DirectX phổ biến với các nhà phát triển gameWindows 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àmDirectX í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ầncứng, và bắt đầu nhắm mục tiêu các bản phát hành của DirectX vớinhữ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 25sáng (T & L) Bộ tăng tốc 3D biến đổi từ lúc dầu chỉ là bộ quét đườngthẳ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ớikhả 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óngvector 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ươngtrì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ớivào tháng 10 năm 2002, bộ đổ bóng điểm ảnh và vector có thể thựchiệ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ơncho các phép toán mảng liên quan đến hình ảnh (image-arrayoperations) 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ềuhơn các CPU hiện nay Ngày nay, GPU song song đã bắt đầu thực hiệnxâm nhập máy tính và cạnh tranh với CPU, sự phổ biến của GPU đã lenlỏ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ấtGPU từ "người dùng GPGPU" để giúp tiến thiết kế phần cứng tốt hơn
Trang 261.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ínhtoán Nhưng điều hiển nhiên đó là nó phải trưng bày khả năng tínhtoán đó cho các lập trình viên Trong thời gian gần đây GPU đã pháttriển từ một hàm cố định, bộ xử lý chuyên dụng tới bộ xử lý lập trình songsong, đầ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ănglập trình của bộ xử lý chiếm đã vị trí trung tâm Chúng ta đi xem xét từngkhía cạnh
Đường ống dẫn đồ họa
(GraphicsPipeline)
Đầu vào của GPU là các k iể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 vectorriêng lẻ Bằng cách tính toán tương tác với các luồng ánh sáng trongmột bối cảnh cụ thể mỗi vector phải được chuyển thành không gian trênmà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
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 27tạ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ôngtin màu sắc từ vector, mỗi mảnh được làm bóng mờ để xác định màu sắccuối cùng của nó Cũng giống trường hợp vector, mỗi mảnh được tính toánsong song Giai đoạn này đòi hỏi nhiều tính toán nhất trong đường ốngdẫ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ùngvới một màu, và bằng cách giữ lại mảnh gần ống dẫn đồ họa nhất chomỗi vị trí điểm ảnh Đã có các phép toá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 toán chủyếu ở khung cảnh vector là tính toá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 soá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ữachú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ỗimả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 giancá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 linhhoạt hơn
Trang 28GPU 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
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ớiCPU, đó 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 theomộ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ậptrì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ềukhung 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ấymộ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à ch ia đ ườngống dẫn đồ họ a theo thờ i g ian
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 29Đây là một cơ chế xử lý tốt Thứ nhất trong bất kỳ khung cảnh nàophần cứng có thể khai thác cơ chế song song dữ liệu nên cơ chế songsong 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ánrất lớn của các đường ống dẫn đồ họa Thứ hai với mỗi công việc riệngbiệ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ạnrasterization, k h i 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ácchức năng đơn giản được thay thế bằng thành phần lập trình được, nhưngvớ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 songsong hóa và phần cứng song song Thường với CPU mỗi phép toán thườngmất 20 chu kỳ hoạt động Với GPU mỗi phép toán thường mất hàng ngànchu 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ộtvấ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 đơngiản, chương trình vector phức tạp, lúc đó hiệu suất chung phụ thuộc vàohiệu suất của các chương trình vector Ở thời điểm đầu sau khi lập trìnhcác khung cảnh, tập chỉ thị của các các chương trình mảnh và chươngtrình vector khá khác nhau, nên chúng được tách riêng Kiến trúc GPUxem xét lại đường ống song song tác vụ nghiêm ngặt trong lợi thế củakiến trúc đổ bóng hợp nhất (unified shader), trong đó tất cả đơn vị lậptrình được trong đường ống chia sẻ một đơn vị phần cứng lập trình đượcduy 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ìnhbâ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ácnhau) 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 songtác vụ Kiến trúc của GPU chuyển từ kiến
Trang 30trú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ế songsong dữ liệu thống nhất khi các bộ phận lập trình được của đường ốngchị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) đượcAMD 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 (unifiedshaders) Lợi ích cho người sử dụng GPU là với chi phí cho phần cứng caohơ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âygiờ có thể tiếp cận đơn vị lập trình được theo cách trực tiếp, hơn hẳntrước cách tiếp cận trước đây
Hình10: Kiến trúc GPU của NVIDIA và AMD
Trang 31mả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ỗithà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ácchỉ 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íchhợp với các chương trình làm việc với đường thẳng,cụ thể nhiều thànhphần có thể được xử lý trong các bước nối tiếp Ta nghiên cứu mô hìnhSPMD 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ệccho phép các con đường thực thi khác nhau cho từng phần tử GPU ngàynay hỗ trợ luồng điều khiển riêng cho từng luồng, nhưng đặt ra việc bắtlỗi cho những luồng tạp nham Các yếu tố được nhóm lại với nhau thànhnhững khối và các khối được xử lý song song Phần cứng tính cả hai bêncủ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àinguyê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ườnglê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ểmkhá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 đầulần lượt đi tìm hiểu
Sử dụng GPU cho mục đích đồ họa:
Trang 32Chú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ínhtoá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ủachấ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ềntí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ácphé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ụ
Trang 33general-purpose không liên quan gì tới đồ họa, nhưng các ứng dụng vẫn phải được
Trang 34lập trình bằng cách sử dụng các API đồ họa Các lập trình viên muốntruy 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ậptrì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
phép toán toán học và cả truy cập đọc và ghi bộ nhớ
Từ đó các chương trình thường được thể hiện bằng ngôn ngữ lậptrì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ứcmạ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
Trang 35Trước đây phần lớn các chương trình GPGPU được thực hiệntrự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ácmục tiêu của các API đồ họa
Trang 36dù các nhà nghiên cứu đã thành công trong v iệc làm cho các ứng dụnglàm việc thông qua các API đồ họa Vào thời gian đầu người ta sử dụngcá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ựchiện các thao tác GPGPU Cách này vẫn khó tiếp cận cho dù điều nàytố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 đượcvới ngôn ngữ assembly mã giả Lập trình đổ bóng cao cấp đã được thựchiện có thể thông qua ngôn ngữ đổ bóng cấp cao ("high-level shadinglanguage” - HLSL), Với DirectX 9 Nó được biểu diễn giống như giaodiện lập trình C cho lập trình đổ bóng NVIDIA Cg giờ đây đã có thể cungcấp các tính năng tương tự như HLSL, và hữu ích hơn là đã có thể biêndịch ra nhiều đích và cung cấp ngôn ngữ lập trình cấp cao đầu tiên choOpenGL hiện nay ngôn ngữ đổ bóng OpenGL là ngôn ngữ đổ bóngtiêu chuẩn cho OpenGL Mặc dù vậy chúng vẫn là ngôn ngữ đổ bóng và dovậ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ácnhà phát triển thực sự muốn và có được Với mục tiêu trừu tượng GPUnhư 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ứcchươ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àmchứ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ộthay nhiều dòng đầu ra
Brook tiếp cận th eo h ướn g 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 congiới hạn của C, đặc biệt là không có con trỏ và scatter (sự tán xạ- thaotá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 37Brook 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 đầura
Thông qua các lời gọi đọc / ghi rõ ràng được phiên dịch thao tác cậpnhậ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 3chiề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àokhí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ộ giatốc là ngôn ngữ dựa trên mảng (array-base language) phát triển từ ngônngữ C #, và tất cả các tính toán được thực hiện thông qua các phép toántrên các mảng, không giống như mô hình của Brook và Sh được phầnlớ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ăngchuyê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épphát triển các ứng dụng GPGPU dễ dàng hơn nhiều và tạo ra các hệ thốngphát triển mạnh mẽ hơn, chất lượng thương mại hơn trong thời gian vừaqua RapidMind đã thương mại hóa Sh và hiện nay đang đặt mục tiêunhiều platform trong một GPU, CPU đa lõi, các STI Cell BroadbandEngine, và hệ thống mới tập trung nhiều hơn nữa vào tính toán so với SHtrong 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ớicác phép toán và mở rộng kiểu của C ++ để tạo ra những hỗ trợ trựctiếp cho mảng giống như bộ gia tốc của Microsoft , Được thiết kế xoayquanh 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 38PeakStream chỉ sử dụng trong biên dịch tức thời, nhưng linh hoạt hơnnhiều trong việc vector hóa code của người dùng nhằm đạt hiệu suất caonhất trên kiến trúc SIMD Khía cạnh mà là một vấn đề hóc búatrong 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ủabê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ìnhGPGPU 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-HALcung 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ựcthi 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ộtmiề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ệtthố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êndịch các chương trình Brook trực tiếp đến phần cứng R6XX, cung cấpmộ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ậptrình cấp cao hơn Cũng giống như Brook, CUDA cung cấp một cú phápgiố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à đaluồng, không giống như Brook chỉ khai thác một hướng xử lý songsong là song song dữ liệu thông qua cơ chế dòng CUDA cũng khai tháccá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ácluồng trong một khối Các hạt nhân trong CUDA cũng linh
Trang 39hoạ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ếtquả 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ếtnhiều hơn các chi tiết ở cấp thấp của phần cứng, như là sử dụng thanhghi, các hành vi của các mẫu truy cập bộ nhớ và luồng và lập lịch chokhố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àophần cứng, như là cung cấp bởi CTM, cho phép các người phát triển vượtqua một cách có hiệu quả các trình điều khiển đồ họa và duy trì ổn địnhhiệu năng và tính đúng đắn Việc tối ưu được thực hiện để tối ưu hóa chohiệ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ụngtính toán GPU và các thuật toán Chúng ta tìm hiểu bốn phép toán songsong dữ liệu tập trung ở tính toán GPU: ánh xạ một chức năng vào nhiềuyế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êncứ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ộtcá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ếntí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épnhiề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 40Tí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ốncá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
4 giá trị dấu phảy động 32bit, hạn chế bộ nhớ lưu trữ mỗi phần tử, hạnchế 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ànhnhiề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ựcthi 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ínhtoá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ủaAMT 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