Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
1,15 MB
Nội dung
MỤC LỤC 1. Giới thiệu tính toán lưới GPU 2 2. Giới thiệu GPU 5 3. Cài đặt CUDA 16 3.1 Các bước cài đặt 17 3.2 Làm việc với C# 17 3.3 Làm việc với Java 18 4. So sánh tốc độ các thuật toán 20 4.1 Thuật toán sinh hoán vị của N phần tử 20 4.2 Thuật toán Bubble Sort 23 4.3 Thuật toán Merge Sort 24 5. Nhận xét 25 6. Tham khảo 26 Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ Nguyễn Thị Ngọc Thanh_CH1101132 Trang 2 1. Giới thiệu tính toán lưới GPU Tính toán lưới rất giống tính toán nhóm, nhưng ở tỷ lệ lớn hơn có liên quan đến việc gom lại các cụm. Các giải pháp GPU cho phép xử lý không chỉ trên một CPU mà còn trên cả môi trường nhóm hay còn gọi là môi trường lưới. Tính toán lưới GPU được sử dụng trên nhiều lĩnh vực rộng rãi, nhưng vẫn còn quá nhiều lĩnh vực khác có thể áp dụng được như là tính toán trong khoa học và công nghệ, cũng như các dự án có cường độ tính toán mạnh. Một trong những động lực mở ra lớn nhất cho chúng ta là GPUGRID, thuật ngữ này ra đời trong khi thực hiện các công việc xử lý tính toán phức tạp trong ngành Tin-Sinh học. Cơ sở hạ tầng của GPUGRID được kết hợp nhiều card đồ hoạ NVIDIA lại với nhau để thực hiện việc tạo ra các giả lặp về toàn bộ hoạt động các phân tử sinh học. Việc thực hiện các phân tử sinh học được các nhà khoa học trong tính toán hiệu năng cao và các nhà sinh học tình nguyện xung phong thực hiện lúc ban đầu, và cho đến nay vẫn còn nhiều bổ sung cũng như nhiều mảng có thể nghiên cứu nhất là trong ngành tính toán hiệu năng cao cho các bài toán trong sinh học. GPU sẽ đóng một vai trò chính trong dự án FutureGrid của đại học Indiana dưới dự bảo trợ của quỹ khoa học quốc gia nhằm phát triển một môi trường thực nghiệm chuẩn cho phép các nhà khoa học cùng nhau phát triển và kiểm thử các hướng mới về xử lý song song, tính toán lưới, cũng như tính toán đám mây. Như vậy thuật ngữ tính toán lưới GPU thật chất là thực hiện công việc tính toán lưới trên các GPU thay vì trên các CPU. Công việc này sẽ phức tạp hơn rất nhiều so với tính toán lưới thông thường, vì mỗi đơn vị GPU bản thân nó là một nút thực hiện tính toán song song. Ta có thể hình dung tính toán lưới GPU như là một mạng lưới gồm nhiều máy xử lý một vấn đề mà dữ liệu cũng nằm trên nhiều máy, mà trong đó một máy xử lý là một GPU thay vì một CPU. Các nhà khoa học mong chờ kết quả thực hiện một bài toán trên GPUGRID sẽ nhanh hơn trên môi trường tính toán lưới thông thường với một tỷ lệ nhất định. Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ Nguyễn Thị Ngọc Thanh_CH1101132 Trang 3 Hình 1.1 Dự án phát triển GPUGRID Tốc độ xử lý của GPU ngày càng được cái tiến và xử lý ngày càng nhanh hơn, tăng khả năng, hiệu xuất tính toán của GPU. Giới hạn của phần cứng, xu hướng tăng số lõi (cores) thay vì tăng xung nhịp (clock rate) đang trở nên phổ biến. CPU thì có multicores, còn GPU thì có many-cores. GPU, ngày nay, đã có thể hoạt động nhanh hơn cả CPU trong việc xử lí tính toán. Cụ thể nhờ số lượng cores lớn (vài trăm so với 2, 4, hoặc 8 của CPU), tốc độ truy xuất bộ nhớ nhanh (85GB/s với G80, 150GB/s với GTX200). Nhờ thế, vai trò của GPU đã vượt ra ngoài phạm vi truyền thống; đó là chạy các ứng dụng tính toán. Để làm việc với GPU, chúng ta thường sử dụng bộ thư viện CUDA nổi tiếng đã được NVIDIA phát triển hỗ trợ và đã được cộng đồng đón nhận. Sự phát triển các ứng dụng với sự hỗ trợ của CUDA bắt đầu xuất hiện từ 2008, và tiếp tục phát triển cả về số lượng, chất lượng, tính hiệu quả, tính năng được cung cấp. Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ Nguyễn Thị Ngọc Thanh_CH1101132 Trang 4 Hình 1.2: Tốc độ tính toán của GPU được phát triển qua các năm [1] Bài báo cáo này sẽ trình bày rõ về tỷ lệ xử lý về mặt thời gian của một GPU so với CPU. Vì vậy, các phần tiếp theo sẽ là trình bày cơ chế hoạt động của GPU và phương pháp cài đặt, so sánh kết quả tốc độ các thuật toán thông thường sau khi thử nghiệm, và phần cuối cùng là nhận xét đánh giá. Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ Nguyễn Thị Ngọc Thanh_CH1101132 Trang 5 2. Giới thiệu GPU CUDA (Compute Unified Device Architecture - Kiến trúc thiết bị tính toán hợp nhất) là một kiến trúc tính toán song song do NVIDIA phát triển. CUDA là cơ chế tính toán trong các GPU (Graphics Processing Unit - Đơn vị xử lý đồ họa) của NVIDIA, lập trình viên có thể sử dụng thông qua các ngôn ngữ lập trình phổ biến. Lập trình viên dùng ngôn ngữ C for CUDA, dùng trình biên dịch PathScale Open64 C để cài đặt các thuật toán chạy trên GPU. Kiến trúc CUDA hỗ trợ mọi chức năng tính toán thông qua ngôn ngữ C. Hình 2.1 - CUDA trên các GPU đời mới của NVIDIA [4] CUDA cho phép các nhà phát triển truy xuất các chỉ lệnh ảo và bộ nhớ của các thành phần tính toán song song trong đơn vị xử lý đồ họa của CUDA (CUDA GPU). Sử dụng CUDA, các GPU mới nhất do NVIDIA sản xuất có thể dễ dàng thực hiện các tính toán giống như nhiều CPU. Tuy nhiên, không giống như CPU, các GPU có kiến trúc song song có khả năng thực thi nhiều luồng dữ liệu trong một thời điểm. Cách tiếp cận giải quyết các vấn đề có mục đích tổng quát này trên các GPU được gọi là GPGPU. Trong công nghiệp giải trí trên máy tính, ngoài nhiệm vụ làm trơn hình ảnh, GPU cũng được sử dụng để tính toán các hiệu ứng vật lý trong game. CUDA cũng được sử dụng để Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ Nguyễn Thị Ngọc Thanh_CH1101132 Trang 6 gia tốc các ứng dụng ngoài đồ họa như sinh học tính toán, xử lý khối lượng dữ liệu lớn cùng với CPU, trong mật mã học và nhiều lĩnh vực khác. CUDA cung cấp cả giao diện chương trình ứng dụng (API) bậc thấp và bậc cao. Kiến trúc CUDA SDK đầu tiên được phát hành cho cả hai hệ điều hànhMicrosoft Windows và Linux, có hỗ trợ cho Mac OS X ở phiên bản thứ 2.0. CUDA có trong mọi GPU NVIDIA bắt đầu từ họ G8X về sau. Kiến trúc phần cứng GPU : Hình 2.2 - Phần cứng GPU [5] Số phần tử xử lý toán học của GPU nhiều hơn hẳn CPU. Điều này mang đến cho GPU một khả năng xử lý song song cực kỳ hiệu quả. Điện toán GPU xét trên khía cạnh phần mềm từ quan điểm và công nghệ của NVIDIA. Ở lớp thấp nhất của kiến trúc phần mềm giành cho điện toán GPU, chúng ta có các GPU của NVIDIA được trang bị kiến trúc tính toán song song CUDA, bao gồm cả trình điều khiển thiết bị CUDA vốn được nhúng bên trong trình điều khiển thiết bị đồ họa do NVIDIA cung cấp. Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ Nguyễn Thị Ngọc Thanh_CH1101132 Trang 7 Hình 2.3 – Kiến trúc phần mềm điện toán GPU [3] Trình điều khiển thiết bị CUDA này giữ nhiệm vụ chuyển đổi mã PTX (Parallel Thread Execution - thực thi tiểu trình song song) được sinh ra bởi các trình biên dịch của từng ngôn ngữ lập trình như là C/C++, Fortran, Java, Python sang dạng mã máy thật sự của GPU được dùng để thực thi ứng dụng. Lớp thứ hai kể từ dưới lên trong hình 2 cho chúng ta thấy một số ngôn ngữ lập trình như C/C++, Fortran, Java, Python và giao diện lập trình như OpenCL, Direct Compute, .NET mà hiện tại lập trình viên có thể dùng để tạo ra một làn sóng mới những phần mềm. Sau đây là những nét chính giữa các phiên bản: * Phiên bản 3.0 Như trong hình 1 trên đây cho thấy, cùng với kiến trúc phần cứng Fermi mới, bộ công cụ phát triển phần mềm CUDA 3.0 đã được phát hành vào tháng Ba năm 2010, nhằm hỗ trợ các tính năng phần cứng GPU mới sau đây: Hỗ trợ 64-bit GPU Hỗ trợ cơ chế đa sao chép (Multiple Copy Engine) Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ Nguyễn Thị Ngọc Thanh_CH1101132 Trang 8 Hỗ trợ việc báo cáo các lỗi kiểu ECC Hỗ trợ việc thực thi các nhân đồng hành (Concurrent Kernel Execution) Hỗ trợ gỡ rối trên phần cứng Fermi với công cụ cuda-gdb cho môi trường Linux Hỗ trợ đo đạc hiệu năng phần cứng Fermi cho các ứng dụng viết bằng CUDA C và OpenCL với công cụ Visual Profiler. Hình 2.4 – Quá trình tiến hóa của bộ công cụ phát triển phần mềm CUDA từ phiên bản 1.0 đến 3.0 [3] Ngoài các tính năng hỗ trợ phần cứng nêu trên, CUDA 3.0 còn mang lại cho chúng ta nhiều cải tiến khác, tạm chia thành 3 nhóm lớn là hỗ trợ ngôn ngữ lập trình C++ tốt hơn, cung cấp môi trường phát triển phần mềm tiện lợi hơn, và hỗ trợ tương tác giữa mức thực thi cấp thấp (mức trình điều khiển thiết bị – CUDA Driver API) và cấp cao hơn (mức môi trường thực thi ứng dụng – CUDA C Runtime API) (xem hình 5). Trong nhóm cải tiến liên quan đến sự hỗ trợ ngôn ngữ C++ trong phiên bản 3.0, nhờ có sự ra đời của kiến trúc tập chỉ thị PTX (Parallel Thread Execution) 2.0 mới, cơ chế lời gọi hàm gián tiếp dùng trong các hàm ảo của C++ đã được cài đặt thành công, đồng thời mô hình truy cập và đánh địa chỉ bộ nhớ thống nhất kiểu 64-bit cũng được hiện thực hóa. Phiên bản này lập trình viên đã có thể sử dụng tính năng thừa kế lớp và thừa kế template của C++ trong chương trình CUDA của mình nhằm cải thiện năng suất làm việc. Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ Nguyễn Thị Ngọc Thanh_CH1101132 Trang 9 Hình 2.5 – Các cải tiến do CUDA 3.0 mang lại [4] Dưới góc độ hỗ trợ phát triển phần mềm, CUDA 3.0: Khai sinh ra bộ công cụ gỡ rối/phân tích/đo đạc hiệu năng có tên gọi Parallel Nsight dùng chung với bộ phần mềm danh tiếng Visual Studio, là môi trường phát triển ứng dụng kết hợp CPU+GPU đầu tiên trên thế giới cho hệ điều hành Windows. Cung cấp chức năng hỗ trợ gỡ rối mức thấp với giao diện lập trình ứng dụng mức thiết bị CUDA. Cải tiến công cụ cuda-gdb cho việc gỡ rối các ứng dụng được phát triển bằng kỹ thuật JIT compiled kernel. Hiệu năng làm việc với cuda-gdb cũng được cải thiện rất nhiều trong phiên bản này. Giới thiệu CUDA Memory Checker, một công cụ mới cho phép báo cáo các lỗi canh chỉnh và vượt phạm vi vùng nhớ, có thể dùng dưới dạng độc lập hoặc như một chế độ gỡ rối bên trong cuda-gdb. cải tiến trình biên dịch NVCC cho ra kết xuất biên dịch các nhân CUDA C/C++ dưới dạng chuẩn ELF, và chuẩn bị loại bỏ định dạng .cubin cũ trong các lần phát hành kế tiếp. Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ Nguyễn Thị Ngọc Thanh_CH1101132 Trang 10 Loại bỏ chế độ mô phỏng thiết bị, vốn trong các phiên bản trước cho phép một chương trình CUDA có thể chạy mô phỏng theo kiểu đơn tiểu trình trên CPU mà không cần có phần cứng GPU hỗ trợ CUDA cài đặt trong hệ thống máy tính. Hoàn tất việc cài đặt đầy đủ các hàm có trong thư viện BLAS. Thư viện CUBLAS 3.0 hỗ trợ tất cả các hàm có trong đặc tả BLAS mức 1, mức 2, và mức 3, kể cả khi thao tác trên dữ liệu kiểu số phức với độ chính xác đơn và kép. Xét trên khía cạnh hỗ trợ tương tác giữa mức thực thi cấp thấp (mức trình điều khiển thiết bị) và cấp cao hơn (mức môi trường thực thi ứng dụng), CUDA 3.0 lần đầu tiên giới thiệu khái niệm liên thông trong việc truy cập đến các vùng đệm được sử dụng bởi các hàm trong CUDA Driver API và CUDA C Runtime API, hai giao diện lập trình khả dĩ dùng để truy cập đến phần cứng GPU có kiến trúc CUDA. Cho đến trước CUDA 3.0, lập trình viên chỉ có thể chọn sử dụng một trong hai cách tiếp cận này khi phát triển ứng dụng CUDA của mình. * Phiên bản 3.1 Ba tháng sau khi phát hành CUDA 3.0, vào tháng Sáu năm 2010, phiên bản CUDA 3.1 được tung ra và tiếp tục cung cấp thêm nhiều tính năng mới hỗ trợ cho phần cứng Fermi. CUDA 3.1 cho phép Ứng dụng thực thi đến 16 nhân song song khác nhau cùng một lúc trên các GPU có kiến trúc Fermi (16-way concurrency). Gọi hàm C cổ điển printf() trong các hàm nhân song song chạy trên GPU. Sử dụng con trỏ hàm và kỹ thuật đệ qui, tạo điều kiện thuận lợi cho việc chuyển mã nhiều thuật toán đang có sang các GPU kiểu Fermi. Công cụ Unified Visual Profiler hỗ trợ CUDA C/C++ và OpenCL, đồng thời hỗ trợ việc theo vết các hàm trong CUDA Driver API. Ngoài ra CUDA 3.1 còn mang lại rất nhiều cải tiến liên quan đến các thư viện toán học, bao gồm: [...]... CPU 0.6 GPU 0.4 0.2 0 500 700 900 1000 1500 2000 Hình 4.3 Thời gian thực hiện của thuật toán merge sort giữa CPU và GPU Nguyễn Thị Ngọc Thanh_CH1101132 Trang 24 Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ 5 Nhận xét Đa số thời gian thực hiện một thuật toán trên GPU sẽ nhanh hơn đáng kể khi dữ liệu lớn Có một số thuật toán trong thực nghiệm nhưng tốc độ thực hiện trên GPU không... Trang 19 Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ 4 So sánh tốc độ các thuật toán Trên môi trường CUDA để làm việc với GPU, thực hiện một số thuật toán phổ biến và so sánh tốc độ xử lý của chúng khi thực hiện trên CPU và GPU Thực nghiệm được thực hiện nhiều lần và lấy giá trị trung bình cộng làm kết quả đánh giá 4.1 Thuật toán sinh hoán vị của N phần tử * Thuật toán 1: Bước 1:... đoạn kết hợp kết quả tính toán sau cùng, giai đoạn này rất phức tạp trong xử lý Điều đó sẽ giúp cho thời gian thực hiện GPUGRID sẽ nhanh hơn đáng kể so với các phương pháp tính toán lưới thông thường Hiện nay hướng nghiên cứu GPUGRID là hướng nghiên cứu rất quan trọng trong tính toán hiệu năng cao trên các bài toán đang cần thiết trong ngành Tin-Sinh học Tham khảo thêm http://www.gpugrid.net/ Hình 5.1... Trang 13 Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ Ví dụ về kỹ thuật SLI với chương trình Direct3D Texture, một minh họa đơn giản cho việc sử dụng SLI và Direct3D cùng với CUDA C * Phiên bản 4.0 Hình 2.7 – Các tính năng của Cuda 4.0 [4] NVIDIA GPUDirect 2.0 Liên lạc giữa các GPU với nhau không cần sự chỉ thị của GPU chính Unified Virtual Addressing (UVA) Tính năng này tương... 249.670122 GPU Time 1 0.0024658 0.031808 0.038154 0.059298 GPU Time 2 0.00145 0.023368 0.026928 0.035222 300 250 200 CPU 150 GPU- 1 GPU- 2 100 50 0 4 chữ số 6 chữ số 8 chữ số 10 chữ số Hình 4.1 Thời gian thực hiện của thuật toán hoán vị giữa CPU và GPU * Số liệu chạy lần thứ 3 với 4 chữ số tốc độ CPU nhanh hơn GPU Nguyễn Thị Ngọc Thanh_CH1101132 Trang 22 GVHD: PGS.TS Nguyễn Phi Khứ Tìm hiểu GPUGRID - Tính toán. .. Ngọc Thanh_CH1101132 Trang 21 Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ Số chữ số 4 6 8 10 Lần 5: CPU Time 0.00253 0.04986 4.9863 262.4532 GPU Time 1 0.00261 0.03325 0.03867 0.06432 GPU Time 2 0.00131 0.02163 0.02745 0.02965 Số chữ số 4 6 8 10 Trung bình: CPU Time 0.002136 0.04967 5.1327 253.4673 GPU Time 1 0.00312 0.03324 0.03621 0.05468 GPU Time 2 0.00166 0.02364 0.02687 0.03478... 2000 Hình 4.2 Thời gian thực hiện của thuật toán bubble sort giữa CPU và GPU Nguyễn Thị Ngọc Thanh_CH1101132 Trang 23 GVHD: PGS.TS Nguyễn Phi Khứ Tìm hiểu GPUGRID - Tính toán lưới GPU 4.3 Thuật toán Merge Sort * Số phần tử random ngẫu nhiên Stt 1 2 3 4 5 6 Số phần tử 500 700 900 1000 1500 2000 CPU Time (ms) 0.082712 0.094907 0.182058 0.354706 0.582503 1.034106 GPU Time (ms) 0.045764 0.063853 0.082788... C là malloc() và free() trong các nhân tính toán CUDA C Hỗ trợ giao diện quản lý hệ thống NVIDIA (NVIDIA System Management Interface) qua chương trình nvidia-smi trong việc báo cáo mức độ bận rộn của GPU, cũng như nhiều bộ đo hiệu năng khác trên GPU Nguyễn Thị Ngọc Thanh_CH1101132 Trang 12 GVHD: PGS.TS Nguyễn Phi Khứ Tìm hiểu GPUGRID - Tính toán lưới GPU Có rất nhiều chương trình mẫu mới giúp... nhiên trong các mã chương trình chạy trên CPU và GPU Nguyễn Thị Ngọc Thanh_CH1101132 Trang 11 Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ Cải tiến hiệu năng thực thi của thư viện CUFFT cho các phép biến đổi có radix-3, -5, và -7 trên các GPU kiểu Fermi Cải tiến hiệu năng thực thi của thư viện CUBLAS từ 50% đến 300% trên các GPU kiểu Fermi cho phép nhân ma trận với mọi kiểu...Tìm hiểu GPUGRID - Tính toán lưới GPU GVHD: PGS.TS Nguyễn Phi Khứ Sải tiến hiệu năng thực thi của một số hàm chọn lọc trong họ log, pow, erf, và gamma, Cải tiến đáng kể hiệu năng thực thi của các phép biến đổi FFT có kích thước là lũy thừa của 2 với độ chính xác kép trên các GPU kiểu Fermi, Tối ưu hóa các phép toán biến đổi CUFFT từ thực sang phức (R2C) và . mới về xử lý song song, tính toán lưới, cũng như tính toán đám mây. Như vậy thuật ngữ tính toán lưới GPU thật chất là thực hiện công việc tính toán lưới trên các GPU thay vì trên các CPU Thanh_CH1101132 Trang 2 1. Giới thiệu tính toán lưới GPU Tính toán lưới rất giống tính toán nhóm, nhưng ở tỷ lệ lớn hơn có liên quan đến việc gom lại các cụm. Các giải pháp GPU cho phép xử lý không. rất nhiều so với tính toán lưới thông thường, vì mỗi đơn vị GPU bản thân nó là một nút thực hiện tính toán song song. Ta có thể hình dung tính toán lưới GPU như là một mạng lưới gồm nhiều máy