Phạm Đăng Hải Nội dung tóm tắt: A, Lý do chọn đề tài Với những tiến bộ nhanh trong công nghệ chế tạo phần cứng máy tính, các GPU Gaphics Processing Units – Bộ xử lý đồ họa phát triển
Trang 1CÔNG NGHỆ TÍNH TOÁN HIỆU NĂNG CAO
SỬ DỤNG CARD ĐỒ HỌA TRONG DIỄN HỌA
LUẬN VĂN THẠC SĨ KỸ THUẬT CÔNG NGHỆ THÔNG TIN
Trang 21
LỜI CAM ĐOAN
Tôi - Nguyễn Quốc Huy - cam kết luận văn tốt nghiệp thạc sĩ kỹ thuật này là công trình nghiên cứu của bản thân tôi dưới sự hướng dẫn của TS Phạm Đăng Hải Các kết quả nêu trong luận văn là trung thực, không phải là sao chép toàn văn của bất
Trang 32
LỜI CẢM ƠN
Trước tiên, em xin gửi lời cảm ơn sâu sắc tới TS Phạm Đăng Hải, Viện Công
nghệ thông tin và Truyền thông, Trường Đại Học Bách Khoa Hà Nội, Thầy là người đã trực tiếp và tận tình hướng dẫn em trong suốt thời gian làm luận văn tốt nghiệp
Em xin bày tỏ lòng biết ơn chân thành GS.TS Nguyễn Thanh Thuỷ, Phó hiệu
trưởng trường Đại học Công nghệ - Đại học Quốc Gia Hà Nội, Thầy đã cho em những lời khuyên quý báu để hoàn thành luận văn này
Em xin trân thành cảm ơn các Thầy, Cô, cùng các cán bộ thuộc Viện Công nghệ thông tin và Truyền thông, Viện đào tạo sau đại học Trường Đại học Bách Khoa
Hà Nội đã tạo điều kiện thuận lợi cho em trong quá trình học tập cũng như hoàn thành luận văn thạc sĩ
Mình xin gửi lời cảm ơn tới các bạn học viên cao học khóa 2010B – Trường đại học Bách Khoa Hà Nội, đã sát cánh giúp đỡ nhau vượt qua những khó khăn trong quá trình học tập, hoàn thành luận văn tốt nghiệp
Cuối cùng, tôi xin cảm ơn bạn bè và gia đình đã luôn là luôn động viên và là chỗ dựa vững chắc về tinh thần cho tôi trong cuộc sống
Hà Nội, ngày 12 tháng 3 năm 2012
Tác giả
Nguyễn Quốc Huy
Trang 43
MỤC LỤC
LỜI CAM ĐOAN 1
LỜI CẢM ƠN 2
TÓM TẮT LUẬN VĂN 7
DANH MỤC HÌNH VẼ 9
DANH MỤC CÁC TỪ VIẾT TẮT VÀ CÁC THUẬT NGỮ 11
CHƯƠNG 1: TỔNG QUAN VỀ TÍNH TOÁN HIỆU NĂNG CAO 12
1.1 Tổng quan về tính toán hiệu năng cao 12
1.1.1 Nhu cầu tính toán hiệu năng cao 12
1.1.2 Giải pháp 12
1.2 Các hướng tiếp cận tính toán hiệu năng cao tiêu biểu 13
1.2.1 Các siêu máy tính (Super Computers) 13
1.2.2 Tính toán song song phân cụm (Cluster Computing) 15
1.2.3 Công nghệ tính toán lưới – Grid Computing 19
1.2.4 Các bộ xử lý multi-cores và many-cores 21
1.2.5 Tính toán song song trên hệ thống card đồ họa đa dụng 22
CHƯƠNG 2: CÔNG NGHỆ TÍNH TOÁN HIỆU NĂNG SỬ DỤNG CARD ĐỒ HỌA GPGPU 23
2.1 Giới thiệu Bộ xử lý đồ họa GPU 23
2.2 Bộ vi xử lý đồ họa đa dụng GPGPU 24
2.3 Kiến trúc Tesla của NVIDIA 27
Trang 54
CHƯƠNG 3: MÔI TRƯỜNG LẬP TRÌNH SONG SONG CUDA TRÊN HỆ
THỐNG GPGPU 31
3.1 Giới thiệu chung về CUDA 31
3.1.1 CUDA : Kiến trúc tính toán song song đa dụng 31
3.1.2 Mô hình lập trình tự động mở rộng quy mô thực thi 32
3.2 Mô hình lập trình CUDA 34
3.2.1 CUDA Kernels 34
3.2.2 Mô hình phân cấp luồng 35
3.2.3 Mô hình phân cấp bộ nhớ 39
3.2.4 Phân cấp thực thi chương trình trên CPU và GPU 40
3.2.5 Khả năng tính toán của Device - Compute Capability 42
3.3 Lập trình ứng dụng với CUDA 42
3.3.1 Thiết lập môi trường CUDA 42
A Kiểm tra GPU có hỗ trợ CUDA 42
B Download gói phần mềm cài đặt CUDA 43
C Cài đặt CUDA 43
D Kiểm tra quá trình cài đặt 44
E Biên dịch chương trình với NVCC 44
3.3.2 Bộ nhớ trên GPU - Device Memory 45
3.3.3 Thực thi đồng thời giữa Host và Device 47
3.4 Sự mở rộng của CUDA-C so với ngôn ngữ C 48
3.4.1 Định kiểu hàm - Function Type Qualifiers 48
Trang 65
3.4.1.1 device 48
3.4.1.2 global 48
3.4.1.3 host 48
3.4.2 Các từ khóa khai báo kiểu biến - Variable Type Qualifiers 49
3.4.2.1 device 50
3.4.2.2 constant 50
3.4.2.3 shared 50
3.4.3 Các kiểu dữ liệu vector xây dựng sẵn - Built-in Vector Types 51
3.4.4 Các biến định nghĩa sẵn - Built-in Variables 51
3.4.4.1 gridDim 51
3.4.4.2 blockIdx 51
3.4.4.3 blockDim 51
3.4.4.4 threadIdx 52
3.4.4.5 warpSize 52
3.4.5 Các Function đồng bộ hóa 52
CHƯƠNG 4: XÂY DỰNG ỨNG DỤNG DIỄN HỌA TRÊN HỆ THỐNG NVIDIA GPU 54
4.1 Giới thiệu bài toán N-Body simulation 54
4.2 Cơ sở tính toán lý thuyết 55
4.3 Cài đặt bài toán N-Body simulation sử dụng CUDA 57
4.3.1 Tính toán lực tương tác giữa một cặp thực thể Body-Body 58
4.3.2 Tính toán trong một Tile 59
Trang 76
4.3.3 Phân chia các Tiles vào các Thread Blocks 59
4.3.4 Định nghĩa một Grid của các Thread Blocks 61
4.4 Các kết quả thu được 62
CHƯƠNG 5 : KẾT LUẬN 66
TÀI LIỆU THAM KHẢO 67
Trang 87
TÓM TẮT LUẬN VĂN
Đề tài : Công nghệ tính toán hiệu năng cao sử dụng card đồ họa trong diễn họa
Tác giả luận văn: Nguyễn Quốc Huy Khóa: 2010B
Người hướng dẫn: TS Phạm Đăng Hải
Nội dung tóm tắt:
A, Lý do chọn đề tài
Với những tiến bộ nhanh trong công nghệ chế tạo phần cứng máy tính, các GPU (Gaphics Processing Units – Bộ xử lý đồ họa) phát triển với kiến trúc song song hóa mức cao, xử lý đa luồng với kiến trúc manycore processor đã đem lại khả năng tính toán cùng với băng thông bộ nhớ rất lớn Từ đó xuất hiện kỹ thuật dùng tính toán trên GPU làm những công việc trước kia là của CPU để tăng cường
hiệu năng tính toán, và đó cũng là lý do tác giả chọn đề tài luận văn ‘Công nghệ
tính toán hiệu năng cao sử dụng card đồ họa trong diễn họa’
B, Mục đích nghiên cứu của luận văn, đối tượng, phạm vi nghiên cứu
- Tìm hiểu công nghệ và kiến trúc hệ thống tính toán hiệu năng cao sử dụng card
C, Tóm tắt các nội dung chính của luận văn
Luận văn bao gồm 5 chương :
Chương 1: Tổng quan về tính toán hiệu năng cao : Trình bày sự cần thiết và những điểm nổi bật của các công nghệ tính toán hiệu năng cao trên thế giới
Trang 98
Chương 2: Công nghệ tính toán hiệu năng cao sử dụng card đồ họa GPGPU :
Nghiên cứu những công nghệ tính toán hiệu năng cao sử dụng sức mạnh tính toán song song của các bộ xử lý đồ họa đa dụng
Chương 3: Môi trường lập trình song song CUDA trên hệ thống GPGPU :
Tìm hiểu và làm chủ môi trường lập trình song song để viết các phần mềm thực thi trên hệ thống card đồ họa đa dụng GPGPU
Chương 4: Xây dựng ứng dụng diễn họa trên hệ thống NVIDIA GPU :
Chương này áp dụng những kiến thức đã nghiên cứu vào việc xây dựng một ứng dụng tính toán song song trên hệ thống NVIDIA GPU, cụ thể là giải quyết bài toán
“N-Body Simulation”
Chương 5: Kết luận : Tóm tắt các kết quả đạt được và phương hướng phát triển
Trang 109
DANH MỤC HÌNH VẼ
Hình 1: Siêu máy tính Jaguar 15
Hình 2: Mô hình một Cluster 16
Hình 3: Hệ thống tính toán song song phân cụm theo mô hình Beowulf Cluster 17
Hình 4: Kiến trúc tổng quan về phần cứng và phần mềm của một cluster 18
Hình 5: Mô hình tính toán lưới 20
Hình 6: CPU đa nhân của Intel 21
Hình 7: So sánh hiệu năng tinh toán của CPU và GPU [2] 25
Hình 8: So sánh băng thông bộ nhớ giữa CPU và GPU [2] 26
Hình 9: So sánh kiến trúc CPU và GPU 26
Hình 10: C870 với chuẩn PCI Express và không có đầu ra Video 29
Hình 11: Tesla D870 có chứa hai Card C870 29
Hình 12: Tesla S870 với 04 Card C870 30
Hình 13: Tiến trình thực hiện của một chương trình CUDA [7] 31
Hình 14: Mô hình thực thi của CUDA 32
Hình 15: Mô hình tự động mở rộng quy mô thực thi với CUDA 34
Hình 16: Grid của các thread blocks 37
Hình 17: Mô hình phân cấp bộ nhớ của CUDA 39
Hình 18: N-body simulation: Mô phỏng tương tác giữa các hành tinh trong thiên văn học 54
Hình 19: Bài toán N-Body : Cơ chế tính toán trong một Tile 58
Hình 20: Mô hình thực thi của một thread block 60
Trang 1110
Hình 21:Grid của các Thread Blocks tính toán tất cả các lực tương tác 62
Hình 22: NVIDIA Video card GeForce 210: Phần cứng sử dụng để tính toán 62
Hình 23: Thử nghiệm thành công bài toán mô phỏng hệ thống N-Body 64
Trang 1211
DANH MỤC CÁC TỪ VIẾT TẮT VÀ CÁC THUẬT NGỮ
CPU Central Processing Unit - Bộ vi xử lý trung tâm
GPU Graphics processing unit - Bộ xử lý đồ họa
GPGPU General-purpose computing on graphics processing units
Tính toán đa dụng trên bộ vi xử lý đồ họa CUDA Compute Unified Device Architecture – Môi trường lập
trình trên các bộ xử lý đồ họa đa dụng GPGPU Thread Luồng chương trình, tiểu trình
Block of threads Một nhóm các threads trong lập trình CUDA
Kernel function Hàm nhân – trong lập trình CUDA, là hàm có khả năng
được gọi thực thi song song đồng thời trên các core của
bộ xử lý đồ họa
Source code Mã nguồn chương trình
Cluster Computing Tính toán phân cụm
Grid Computing Tính toán lưới
FLOPS Floating-point operations per second : Số phép tính dấu
phảy động trên 1 giây
Host Chỉ CPU trong lập trình CUDA
Device Chỉ GPU trong lập trình CUDA
GUI Graphic User Interface – Giao diện người dùng đồ họa API Application Programming Interface : Giao diện lập trình
ứng dụng
Trang 1312
CHƯƠNG 1: TỔNG QUAN VỀ TÍNH TOÁN HIỆU NĂNG CAO
1.1 Tổng quan về tính toán hiệu năng cao
1.1.1 Nhu cầu tính toán hiệu năng cao
Sự đòi hỏi về sức mạnh tính toán của máy tính không ngừng tăng lên nhằm
để giải quyết các bài toán trong lĩnh vực khoa học và công nghệ Ngày nay, trong các lĩnh vực như hóa học, vật lý, vũ trụ học, sinh học, y học… các bài toán phức tạp đòi hỏi sức mạnh tính toán lớn luôn luôn được đặt ra Vấn đề càng phức tạp khi bài toán đòi hỏi việc mô phỏng và hiển thị mô hình đồ họa Bên cạnh đó, yêu cầu về thời gian xử lý của bài toán cũng quan trọng không kém Đối với những bài toán nêu trên, phương pháp xử lý tuần tự với một bộ xử lý thường không thể đáp ứng được Xử lý song song dựa trên nguyên tắc nhiều bộ xử lý cùng thực thi đề là chìa khóa để giải quyết những vấn đề này
Máy tính song song là một hệ thống bao gồm nhiều bộ xử lý và cho phép phối hợp các bộ xử lý này để giải quyết bài toán lớn cùng một lúc Các siêu máy tính còn được gọi là các máy tính hiệu năng cao (High-Performance Computers) Tính toán hiệu năng cao (High Performance Computing) là phương pháp giải quyết các bài toán phức tạp dùng các máy tính hiệu năng cao
1.1.2 Giải pháp
Nhằm đáp ứng yêu cầu tính toán lớn trong khoa học và công nghệ, ba giải pháp được đưa ra làị:
- (1) Tăng tốc độ tính toán của bộ xử lý
- (2) Cải tiến giải thuật để giải quyết bài toán
- (3) Sử dụng kỹ thuật tính toán song song
Giải pháp (1) đã gặp những giới hạn về công nghệ do khi tốc độ trên một vi xử lý tăng lên quá cao dẫn đến nhiệt độ tăng lên, và công nghệ tản nhiệt bằng không khí
Trang 1413
không thể đáp ứng được Với giải pháp (2), không phải lúc nào ta cũng có thể cải tiến giải thuật, và thường công việc này tiêu tốn nhiều thời gian cũng như rất phức tạp Để giải quyết các bài toán có khối lượng tính toán lớn đòi hỏi một giải pháp mới; đó chính là giải pháp (3) Chính động lực này đã thúc đẩy việc ra đời các hệ thống máy tính có khả năng tính toán song song mạnh
Máy tính song song có nhiều bộ xử lý và các bộ xử lý này được liên kết với nhau để tham gia giải quyết các phần khác nhau của bài toán cùng lúc Theo lý
thuyết, nếu có n bộ xử lý thì thời gian giải quyết vấn đề sẽ giảm đi n lần so với
dùng một bộ xử lý Tuy nhiên, thời gian dài giải quyết trong thực tế sẽ lớn hơn thời gian tính toán trong lý thuyết do nhiều nguyên do Thứ nhất là ngoài thời gian
xử lý trong bài toán thì còn thời gian đồng bộ và giao tiếp truyền dữ liệu giữa các
bộ vi xử lý Thứ hai là không phải bài toán nào cũng có thể chia thành n phần nhỏ
bằng nhau để giao cho các bộ xử lý
Trong phần tiếp theo chúng ta sẽ nghiên cứu những hệ thống tính toán song song phổ biến
1.2 Các hướng tiếp cận tính toán hiệu năng cao tiêu biểu
1.2.1 Các siêu máy tính (Super Computers)
Một siêu máy tính là một máy tính vượt trội trong khả năng và tốc độ xử lý Thuật ngữ Siêu Tính Toán được dùng lần đầu trong báo New York World vào năm 1920
để nói đến những bảng tính (tabulators) lớn của IBM làm cho trường Đại học Columbia
Trong thực tế, tốc độ của hệ thống siêu máy tính được đo bằng "FLOPS" (FLoating Point Operations Per Second – Số phép tính dấu phảy động trên một giây) Siêu máy tính hiện nay có tốc độ xử lý hàng nghìn teraflop (một teraflop tương đương với hiệu suất một nghìn tỷ phép tính/giây) hay bằng tổng hiệu suất của 6.000 chiếc máy tính hiện đại nhất hiện nay gộp lại (một máy có tốc độ
Trang 1514
khoảng từ 3-3,8 gigaflop) Có thể hiểu siêu máy tính là hệ thống những máy tính làm việc song song Hàng năm các chuyên gia thông kê và xếp hạng lại 500 siêu máy tính hàng đầu thế giới và gọi là TOP500 Danh sách TOP500 được công bố hai lần trong một năm (từ năm 1993) Danh sách này có thể tham khảo tại website: http://www.top500.org
Các hệ thống siêu máy tính đứng đầu danh sách TOP500 từ năm 1993 :
Fujitsu K computer ( Japan, June 2011 – present)
NUDT Tianhe-1A ( China, November 2010 - June 2011)
Cray Jaguar ( United States, November 2009 - November 2010)
IBM Roadrunner ( United States, June 2008 – November 2009)
IBM Blue Gene/L ( United States, November 2004 – June 2008)
NEC Earth Simulator ( Japan, June 2002 – November 2004)
IBM ASCI White ( United States, November 2000 – June 2002)
Intel ASCI Red ( United States, June 1997 – November 2000)
Hitachi CP-PACS ( Japan, November 1996 – June 1997)
Hitachi SR2201 ( Japan, June 1996 – November 1996)
Fujitsu Numerical Wind Tunnel ( Japan, November 1994 – June 1996)
Intel Paragon XP/S140 ( United States, June 1994 – November 1994)
Fujitsu Numerical Wind Tunnel ( Japan, November 1993 – June 1994)
TMC CM-5 ( United States, June 1993 – November 1993)
Trang 16Hình 1: Siêu máy tính Jaguar
Dù có sức mạnh rất lớn như vậy, nhưng các siêu máy tính này có hạn chế là: giá thành lắp đặt rất cao, thời gian lắp đặt lâu Ngoài ra, chi phí duy trì các siêu máy tính này cũng là một vấn đề không nhỏ bao gồm chi phí phần mềm, kỹ thuật,
chi phí điện năng…
1.2.2 Tính toán song song phân cụm (Cluster Computing)
Hệ thống tính toán song song phân cụm (Cluster) là các hệ thống máy tính song song được xây dựng từ các nút tính toán và thiết bị mạng thông dụng, mỗi nút tính toán hay các nút đóng vai trò điều khiển vào/ra là một hệ thống hoàn chỉnh, có khả năng làm việc độc lập
Trang 1716
Hệ thống tính toán song song phân cụm là một máy tính song song, trong đó:
Các tài nguyên tính toán là bộ vi xử lý và bộ nhớ trong tại mỗi máy tính,
Các tài nguyên tính toán này có khả năng truyền thông và kết hợp với nhau
thông qua cáp mạng Thường thì quy mô của hệ thống chỉ giới hạn trong một mạng cục bộ (LAN), trong đó có một máy tính đóng vai trò máy chủ (server), các máy tính còn lại đóng vai trò nút tính toán (computing node)
Hình 2: Mô hình một Cluster
Việc thiết lập hệ thống tính toán song song phân cụm từ những máy tính có cấu trúc đơn giản, sử dụng các công nghệ mạng phổ biến đã được bắt đầu từ năm 1994 với mô hình Beowulf Cluster của Thomas Sterling cùng Donal Becker Ưu điểm lớn nhất của hệ thống này là giá thành của hệ thống nhỏ hơn so với các hệ thống sever tương ứng khác Cùng với sự phát triển nhanh chóng của máy tính cá nhân (PC), hiện nay một hệ thống dựa trên công nghệ LAN và PC có thể đạt được hiệu năng đến vài chục thậm chí là vài trăm Gigaflops trong khi giá thành lại rẻ hơn rất nhiều so với các siêu máy tính Ưu điểm thứ hai của hệ thống bó là sự linh hoạt
Trang 1817
của cấu hình Số lượng nút, dung lượng bộ nhớ trên mỗi nút, số lượng bộ xử lý trên mỗi nút, và cấu hình mạng và hàng loạt các tham số khác đều mang tính tuỳ biến cao
Hình 3: Hệ thống tính toán song song phân cụm theo mô hình Beowulf Cluster
Một hệ thống tính toán song song phân cụm rẻ hơn nhiều so với một siêu máy tính cùng sức mạnh, điều này làm cho các hệ thống tính toán song song phân cụm ngày càng phổ biến và đặc biệt phù hợp cho các nước đang phát triển cũng như các trường đại học
Tuy nhiên, các hệ thống tính toán song song phân cụm cũng có những hạn chế như: quá trình triển khai, cấu hình hệ thống tương đối phức tạp, hệ thống hoạt
Trang 1918
động không ổn định bằng các siêu máy tính, và nhược điểm lớn nhất là vấn đề
truyền thông giữa các nút tính toán Việc nghiên cứu nhằm nâng cao khả năng
truyền thông là một trong những vấn đề quan trọng hàng đầu trong quá trình phát
triển các cấu trúc, mô hình hệ thống phân cụm Các hệ thống tính toán song song
hiện đại đều ứng các kiến trúc mạng tiên tiến như: Myrinet, Gigabit Ethernet,
nhằm nâng cao tốc độ truyền thông giữa các nút tính toán
Trên thực tế, cơ sở hạ tầng phần cứng mới chỉ là một phần trong toàn thể
mô hình chung của tính toán phân cụm Cùng với sự phát triển của lĩnh vực Công
nghệ thông tin trên thế giới, phần mềm đang ngày càng chứng minh được vai trò
cốt yếu của mình trong các hệ thống máy tính Đối với các hệ thống tính toán phân
cụm, phần mềm càng có vai trò quan trọng hơn Chính các phần mềm đảm bảo
cho hệ thống gồm nhiều máy tính riêng lẻ có thể hoạt động ổn định và cộng tác
hiệu quả Một hệ thống tính toán song song phân cụm (dựa trên mạng LAN) hoạt
động như một hệ thống đơn dưới cái nhìn của nguời dùng và của ứng dụng
Hình 4: Kiến trúc tổng quan về phần cứng và phần mềm của một cluster
Trang 2019
1.2.3 Công nghệ tính toán lưới – Grid Computing
Cũng như các công nghệ tính toán khác, tính toán lưới (grid computing) ra đời xuất phát từ nhu cầu tính toán của con người Ngày càng có nhiều bài toán phức tạp hơn được đặt ra và do đó các tổ chức cũng cần phải có những năng lực tính toán mạnh mẽ hơn
Một cách thực hiện hiệu quả là phân bố lại hợp lý các nguồn tài nguyên trong tổ chức hoặc thuê thêm các nguồn tài nguyên từ bên ngoài (dĩ nhiên là với chi phí rẻ hơn nhiều so với việc đầu tư cho cơ sở hạ tầng tính toán) Thực tế cho thấy có một phần lớn các nguồn tài nguyên của chúng ta đang bị sử dụng lãng phí: các máy để bàn công sở thường chỉ hoạt động khoảng 5% công suất, ngay cả các máy chủ cũng có thể chỉ phải hoạt động với 20% công suất Việc tận dụng hiệu quả các nguồn tài nguyên này có thể mang lại một sức mạnh tính toán khổng lồ
Cách giải quyết này chính là mục tiêu của tính toán lưới Tính toán lưới hướng đến việc chia sẻ và sử dụng hiệu quả các nguồn tài nguyên thuộc về nhiều
tổ chức trên một quy mô rộng lớn (thậm chí là quy mô toàn cầu)
Khái niệm Tính toán lưới đã bắt đầu xuất hiện vào đầu thập niên 90 với
nghĩa ẩn dụ là làm cho việc sử dụng sức mạnh của máy tính dễ dàng như là việc sử dụng điện năng Ngày nay có rất nhiều định nghĩa về tính toán lưới Một định nghĩa về Grid khá hoàn chỉnh được đưa ra bởi tiến sỹ Ian Foster như sau :
“Grid là một loại hệ thống song song, phân tán cho phép chia sẻ, lựa chọn, kết hợp các tài nguyên phân tán theo địa lý, thuộc nhiều tổ chức khác nhau dựa trên tính sẵn sàng, khả năng, chi phí của chúng và yêu cầu về chất lượng dịch vụ (QoS) của người dùng để giải quyết các bài toán, ứng dụng có quy mô lớn trong khoa học, kỹ thuật và thương mại Từ đó hình thành nên các “tổ chức ảo” (Virtual Organization (VO)), các liên minh tạm thời giữa các tổ chức và tập đoàn, liên kết với nhau để chia sẻ tài nguyên và/hoặc kỹ năng nhằm đáp ứng tốt hơn các cơ hội
Trang 2120
kinh doanh hoặc các dự án có nhu cầu lớn về tính toán và dữ liệu, toàn bộ việc liên minh này dựa trên các mạng máy tính”.
Một hệ thống Grid có 3 đặc điểm chính:
- Có sự kết hợp, chia sẻ các tài nguyên không được quản lý tập trung
- Sử dụng các giao diện và giao thức chuẩn, mang tính mở, đa dụng
- Đáp ứng yêu cầu cao về chất lượng dịch vụ
Hình 5: Mô hình tính toán lưới
Các nghiên cứu về tính toán lưới đã và đang được tiến hành nhằm tạo ra một cơ sở
hạ tầng lưới cho phép dễ dàng chia sẻ và quản lý các tài nguyên đa dạng và phân tán trong môi trường lưới Các thách thức mà công nghệ tính toán lưới đang phải giải quyết bao gồm:
- Các tài nguyên hết sức đa dạng, không đồng nhất Tài nguyên ở đây được hiểu theo nghĩa hết sức tổng quát Đó có thể là các tài nguyên phần cứng: tài nguyên tính toán, tài nguyên lưu trữ, các thiết bị đặc biệt khác ; các tài nguyên phần mềm: các CSDL, các phần mềm đặc biệt và đắt giá ; các đường truyền mạng Các tài nguyên này có thể rất khác nhau về mặt kiến trúc, giao diện, khả năng xử lý Việc tạo ra một giao diện thống nhất cho phép khai thác và sử dụng
Trang 2221
hiệu quả các nguồn tài nguyên này hoàn toàn không dễ dàng Ban đầu tính toán lưới được đặt ra chủ yếu là để tận dụng các nguồn tài nguyên tính toán nhưng hiện nay mục tiêu của nó đã được mở rộng sang rất nhiều nguồn tài nguyên khác như
đã kể trên
- Các tài nguyên không chỉ thuộc về một tổ chức mà thuộc về rất nhiều tổ chức tham gia lưới Các tổ chức phải tuân thủ một số quy định chung khi tham gia vào lưới còn nhìn chung là hoạt động độc lập tức là các tài nguyên này đều có quyền
tự trị Các tổ chức khác nhau thường có chính sách sử dụng hay cho thuê tài nguyên của họ khác nhau và do vậy cũng gây khó khăn cho việc quản lý
- Các tài nguyên phân tán rộng khắp về mặt địa lý do vậy phải có các cơ chế quản lý phân tán
- Đảm bảo an toàn thông tin cho một môi trường phức tạp như môi trường lưới
là rất khó khăn trong khi đây là một trong những điểm ưu tiên hàng đầu
1.2.4 Các bộ xử lý multi-cores và many-cores
CPU đa nhân, CPU đa lõi (tiếng Anh: multi-core) là bộ vi xử lý trung tâm (Central Processing Unit) có từ 2 – 8 lõi xử lý được đặt trên cùng một CPU vật lý duy nhất Một cách khác, chúng giống như sự ghép nối nhiều CPU thông thường trước đây trở thành một CPU duy nhất
Hình 6: CPU đa nhân của Intel
Trang 2322
Chỉ trong khoảng thời gian từ năm 2001 đến năm 2003, tốc độ của Pentium
4 đã tăng gấp đôi từ 1.5 lên đến 3 GHz, tuy nhiên hiệu năng của CPU không tăng tương xứng như mức gia tăng xung của CPU và việc tăng tốc độ xung của CPU nhanh chóng chạm phải ngưỡng tối đa mà cụ thể cũng trong khoảng thời gian 2 năm từ năm 2003 đến năm 2005 tốc độ của CPU chỉ tăng từ 3.0 lên đến 3.8 GHz
Theo định luận Moore trước đây, tốc độ của bộ vi xử lý sẽ tăng gấp đôi sau khoảng thời gian 18 tháng, nhưng tốc độ xung tăng gấp đôi không đồng nghĩa với hiệu năng tăng gấp đôi và việc gia tăng xung của bộ vi xử lý sẽ nhanh chóng chạm phải vấn đề đó chính là nhiệt độ của CPU sẽ quá cao và các giải pháp tản nhiệt khí
đã đến mức tới hạn không thể đáp ứng được khả năng làm mát khi CPU hoạt động
ở xung quá cao như vậy Vì thế, việc gia tăng xung hoạt động của CPU dần đi vào
bế tắc, và các hãng sản xuất CPU lớn không còn có thể tăng tốc độ chip đơn ngày một cao hơn như trước, mà chuyển sang mô hình nhiều chip (nhân, lõi) với tốc độ vừa phải, dễ sản xuất, giá thành chấp nhận được CPU đa nhân được giới thiệu lần đầu tiên vào năm 2001 bởi hãng IBM với loại CPU Power4 dành riêng cho các máy chủ Bắt đầu từ đó các hãng sản xuất CPU khác bắt đầu chú ý đến thể loại CPU đa nhân và định hướng phát triển các sản phẩm của mình theo hướng loại này
1.2.5 Tính toán song song trên hệ thống card đồ họa đa dụng
Kỹ thuật tính toán song song dùng đơn vị xử lý đồ họa đa dụng -
General-Purpose computing of Gaphics Processing Units (GPGPU, hay còn gọi tắt là
GPGP hoặc GP²U) là kỹ thuật sử dụng đơn vị xử lý đồ họa GPU (vốn được thiết
kế để tính toán đồ họa máy tính) để thực hiện những tác vụ trước đây được xử lý
bởi CPU Công nghệ tính toán hiệu năng cao sử dụng card đồ họa GPGPU sẽ được trình bày chi tiết ở các phần sau
Trang 2423
CHƯƠNG 2: CÔNG NGHỆ TÍNH TOÁN HIỆU NĂNG SỬ DỤNG
CARD ĐỒ HỌA GPGPU
2.1 Giới thiệu Bộ xử lý đồ họa GPU
Đơn vị xử lý đồ họa (Graphics Processing Unit - GPU) là một vi mạch
điện tử đặc biệt được thiết kế để tăng tốc việc xử lý hình ảnh trong bộ nhớ video,
bộ nhớ này sẽ chứa dữ liệu để hiển thị lên màn hình
GPU được sử dụng trong các hệ thống nhúng, trong mobile phones, personal computers, workstations, và trong game consoles Những GPU hiện đại rất mạnh trong việc xử lý đồ họa máy tính Được thiết kế với kiến trúc song song ở mức cao, GPU tỏ ra hiệu quả hơn CPU trong việc thực thi những thuật toán đòi hỏi phải thực hiện song song một số lượng lớn các khối dữ liệu
Trong máy tính cá nhân, GPU thường nằm trên video card, hoặc có thể được tích hợp trên motherboard Hơn 90% các máy tính để bàn hoặc các laptop mới có trang bị những GPU tích hợp trên bo mạch chủ, điều này giúp tiết kiệm chi phí nhưng những GPU này thường kém hiệu năng hơn so với những GPU đặt riêng trên card đồ họa
Thuật ngữ GPU được đưa ra đầu tiên bởi Nvidia vào năm 1999 Trong năm
đó, Nvidia đã tung ra thị trường đơn vị xử lý đồ họa GeForce 256 , GPU đầu tiên trên thế giới, chíp xử lý này được tích hợp các chức năng như các hàm chuyển đổi hình ảnh, xử lý ánh sáng các rendering engines với khả năng xử lý nhiều hơn 10 triệu đa giác trong một giây
Vào những năm 1990, các kỹ thuật tăng tốc xử lý giao diện đồ họa 2 chiều (2D GUI – Graphic User Interface) được sử dụng rộng rãi Thêm vào đó, các giao diện lập trình ứng dụng API cho đồ họa được phát triển, điển hình là thư viện đồ họa WidG cho hệ điều hành Windows 3.x, và sau này trở thành giao diện
Trang 25đã xuất hiện Cho đến hiện tại, OpenGL và DirectX vẫn là hai thư viện đồ họa phổ biến nhất
Ngày nay, trên thế giới có rất nhiều công ty sản xuất GPU với nhiều thương hiệu con khác nhau Theo thống kê vào năm 2008, ba hãng Intel, NVIDIA và AMD/ATI dẫn đầu thị trường GPU với thị phần lần lượt là 49.4%, 27.8% và 20.6% Tuy nhiên, những số liệu này bao gồm cả giải pháp card đồ họa tích hợp trên bo mạch chủ của Intel, nếu không tính đến những số liệu đó thì NVIDIA và ATI chiếm gần như 100% thị trường
Các GPU hiện đại dùng phần lớn transistors cho việc xử lý các phép tính đồ họa 3D Các transistors được sử dụng để tăng tốc các công việc đòi hỏi truy cập bộ nhớ nhiều như texture mapping, rendering các đa giác, thực hiện phép qoay, chuyển đổi các đối tượng đồ họa giữa những hệ tọa độ khác nhau Phần lớn các công việc tính toán này đòi hỏi các thao tác với ma trận và vector nên các kỹ sư và các nhà khoa học đã tiến hành những nghiên cứu để sử dụng GPU vào những công
việc tính toán ngoài lĩnh vực đồ họa Từ đó ra đời khái niệm GPGPU
(general-purpose computing on graphics processing units) – Đơn vị xử lý đồ họa đa dụng
mà chúng ta sẽ tìm hiểu trong phần sau
2.2 Bộ vi xử lý đồ họa đa dụng GPGPU
Kỹ thuật tính toán dùng đơn vị xử lý đồ họa đa dụng - General-Purpose
computing of Gaphics Processing Units (GPGPU, hay còn gọi tắt là GPGP hoặc
Trang 2625
GP²U) là kỹ thuật sử dụng đơn vị xử lý đồ họa GPU (vốn được thiết kế để tính
toán đồ họa máy tính) để thực hiện những tác vụ trước đây được xử lý bởi CPU
Thông thường các chức năng của GPU được giới hạn trong việc xử lý đồ họa máy tính Trong rất nhiều năm, GPU chỉ được sử dụng để tăng tốc một vài phần trong đồ họa đường ống (graphics pipeline) Từ đòi hỏi của thị trường cho đồ họa 3D thời gian thực và đồ họa với độ phân giải cao, các GPU đã phát triển với kiến trúc song song hóa mức cao, xử lý đa luồng với kiến trúc manycore processor
đã đem lại khả năng tính toán cùng với băng thông bộ nhớ rất cao, thậm chí còn vượt qua những CPU thông thường như được minh họa trong hình sau
Hình 7: So sánh hiệu năng tinh toán của CPU và GPU [2]
Trang 2726
Hình 8: So sánh băng thông bộ nhớ giữa CPU và GPU [2]
Lý do dẫn đến việc GPU có khả năng tính toán các phép tính dấu phẩy động cao hơn CPU là vì GPU được thiết kế cho các tác vụ đòi hỏi sự song song hóa ở mức cao, đó cũng chính là đòi hỏi của việc rendering đồ họa Chính vì thế nên trong thiết kế, GPU sử dụng phần lớn transitors cho việc xử lý dữ liệu hơn là việc điều khiển luồng và đưa dữ liệu vào bộ nhớ đệm (data caching)
Hình 9: So sánh kiến trúc CPU và GPU
Trang 2827
Có thể nói một cách chính xác hơn, GPU được thiết kế để phù hợp giải
quyết các vấn đề thông qua tính toán song song trên các dữ liệu - cùng một
chương trình được thực hiện trên rất nhiều phần tử dữ liệu một cách song song Trong các tác vụ này, tính toán số học được đòi hỏi cao hơn rất nhiều so với các thao tác truy cập bộ nhớ Cũng bởi vì một tập lệnh được thực hiện cho mỗi phần tử
dữ liệu khác nhau nên cũng không có nhiều đòi hỏi về việc điều khiển luồng chương trình ( flow control)
Việc xử lý dữ liệu song song ánh xạ các phần tử dữ liệu cho các luồng thực thi song song Rất nhiều ứng dụng xử lý một khối lượng lớn dữ liệu có thể sử dụng
mô hình lập trình song song mức dữ liệu để tăng tốc tính toán Trong diễn họa 3 chiều (3D rendering), các tập hợp lớn điểm ảnh và các đỉnh được ánh xạ tới các thread song song Tuơng tự, các ứng dụng xử lý ảnh và xử lý video như encoding/decoding video, nhận dạng ảnh có thể ánh xạ các khối ảnh và các điểm ảnh (pixel) đến các thread xử lý xong song
Trong thực tế, có nhiều giải thuật ngoài lĩnh vực xử lý đồ họa, xử lý ảnh hay xử lý video có thể được tăng tốc nhờ áp dụng mô hình song song hóa dữ liệu Các giải thuật này có thể áp dụng cho các bài toán liên quan đến xử lý tín hiệu, mô phỏng vật lý, tính toán tài chính hoặc tính toán trong sinh học.Từ đó xuất hiện kỹ thuật dùng tính toán trên GPU làm những công việc trước kia là của CPU để tăng cường hiệu suất làm việc
2.3 Kiến trúc Tesla của NVIDIA
NVIDIA tung ra dòng sản phẩm có tên gọi Tesla (AMD/ATI cũng có dòng sản phẩm với khái niệm tương tự có tên gọi Stream), Tesla ban đầu dựa trên sức mạnh của GPU GeForce 8800 nhưng không tạo ra tín hiệu Video: chúng được dùng như là CPU để xử lí chương trình Tất nhiên những chương trình này phải được dịch bằng CUDA Do đó những người dùng thông thường lại không được
Trang 29đó chính là giải pháp Tesla
Ban đầu NVIDIA tung ra ba sản phẩm Tesla : Card cơ bản có tên gọi C870
mà là Card màn hình GeForce 8800 nhưng không có tín hiệu ra Video “C” được viết tắt từ “Card” C870 có bộ nhớ 1.5GB và có sức mạnh tính toán 500 GigaFLOPS Nó dùng chuẩn giao diện PCI Express x16 nên có thể cắm C870 vào bất kì máy tính để bàn nào
Trang 3029
Hình 10: C870 với chuẩn PCI Express và không có đầu ra Video
C870 được sử dụng trong hai sản phẩm Tesla khác mà có tên gọi D870 và S870 “D” trong D870 có nghĩa là “Desktop” Nó là một Case ngoài nhỏ gồm có hai Card C870 do đó sức mạnh tính toán theo lí thuyết đạt được 1 TFLOPS Case này được nối tới PC chính qua Cable thông qua Bus PCI Express mở rộng
Hình 11: Tesla D870 có chứa hai Card C870
Phiên bản cao cấp nhất là Tesla S870 với 04 Card C870 bên trong S trong S870
được bắt nguồn từ “Server” , nó là Case máy chủ kiểu Rack-Mount 1U bên trong
có chứa tới 04 Card C870 Do đó sản phẩm này được dùng để nối với máy chủ
Trang 3130
Hình 12: Tesla S870 với 04 Card C870
Tesla S870 được nối tới máy chủ thông qua Cable , mà được dựa trên PCI Express
mở rộng
Trang 3231
CHƯƠNG 3: MÔI TRƯỜNG LẬP TRÌNH SONG SONG CUDA
TRÊN HỆ THỐNG GPGPU
3.1 Giới thiệu chung về CUDA
3.1.1 CUDA : Kiến trúc tính toán song song đa dụng
Vào tháng 11 năm 2006 NVIDIA giới thiệu CUDA – Kiến trúc tính toán song song đa dụng – với một mô hình lập trình song song mới cho phép tận dụng khả năng tính toán song song trên các GPU của NVIDIA để giải quyết các vấn đề tính toán phức tạp một cách hiệu quả hơn trên CPU
Hình 13: Tiến trình thực hiện của một chương trình CUDA [7]
Trang 3332
Hình trên tóm lược các bước thực thi của một chương trình CUDA
Bước 1: Copy dữ liệu từ bộ nhớ chính (main memory) vào bộ nhớ của GPU
Bước 2: CPU gửi lệnh thực thi cho GPU
Bước 3: GPU thực thi chương trình song song trên các nhân (core)
Bước 4: Copy kết quả từ bộ nhớ GPU về bộ nhớ chính
CUDA đi kèm môi trường phần mềm cho phép lập trình viên sử dụng ngôn ngữ lập trình bậc cao C Bên cạnh đó, các ngôn ngữ lập trình khác cũng như các giao diện lập trình ứng dung (application programming interface- API) cũng được
hỗ trợ, ví dụ như CUDA FORTRAN, OpenCL, và DirectCompute
Hình 14: Mô hình thực thi của CUDA
3.1.2 Mô hình lập trình tự động mở rộng quy mô thực thi
(Automatic Scalability programming model)
Trang 3433
Ngày nay, các CPU có kiến trúc multicore, GPU với kiến trúc manycore, các bộ xử lý này đều là các hệ thống song song Thách thức đặt ra là làm sao để phát triển các ứng dụng có khả năng mở rộng quy mô thực thi song song một cách trong suốt (transparently scales) với số lượng các core trên GPU và CPU
Mô hình lập trình song song CUDA được thiết kế để giải quyết thách thức này trong khi vẫn giữ được sức mạnh lập trình hệ thống của những ngôn ngữ lập trình như C Có 3 điểm quan trọng trong thiết kế đó là :
Sự phân cấp các nhóm luồng tiến trình (hierarchy of thread groups )
Cơ chế chia sẻ bộ nhớ
Đồng bộ hóa - barrier synchronization
Khả năng mở rộng thực thi song song một cách trong suốt giúp kiến trúc CUDA hỗ trợ số lượng lớn phần cứng GPGPU trên thị trường, bao gồm những GeForce GPUs với số lượng core khác nhau, các sản phẩm chuyên nghiệp Quadro
và các hệ thống Tesla
Một chương trình song song đa luồng viết bằng CUDA được phân vùng thành các block, mỗi block bao gồm một tập hợp các luồng, các block có thể được thực thi độc lập với nhau Các block này có thể được thực thi song song hoặc tuần tự tùy thuộc vào cấu hình phần cứng lúc thực thi Người lập trình không cần quan tâm đến số lượng bộ vi xử lý trong lúc lập trình Điều này có nghĩa là một GPU với nhiều lõi (core) hơn sẽ tự động thực thi chương trình nhanh hơn là GPU với ít
cores như được minh họa trong hình sau