1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tiểu luận môn tính toán lưới Giới thiệu tính toán lưới GPU

26 544 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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

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

Trang 1

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

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

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

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á

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

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

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)

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

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

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:

Trang 11

 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à ngược lại (C2R) có kích thước dữ liệu là lũy thừa của 2,

 Hỗ trợ chồng lấp thời gian các thao tác sao chép dữ liệu và tính toán bằng cách sử dụng streaming API trong thư viện CUBLAS,

 Cải tiến hiệu năng thực thi của các trình con GEMV và SYMV trong CUBLAS, và

 Cung cấp các cài đặt được tối ưu hóa cho các trình con chia và nghịch đảo trên kiến trúc Fermi

Nhiều mã chương trình SDK được viết mới hoặc cập nhật nhằm minh họa:

 Cách sử dụng các con trỏ hàm trong các nhân CUDA C/C++

 Kỹ thuật chia sẻ vùng đệm giữa OpenCL và Direct3D

 Mô hình Markov ẩn trong OpenCL

Cách thức gọi một hàm Excel thực thi trên GPU thông qua ví dụ Microsoft

Excel GPGPU

* Phiên bản 3.2

Các thư viện CUDA mới và cải thiện hiệu năng với các thư viện đã có:

 CUSPARSE, một thư viên mới bao gồm các trình con làm việc với ma trận

thưa được tăng tốc nhờ GPU cho các phép toán thưa/thưa và dày/thưa

 CURAND, một thư viện mới bao gồm các trình con phục vụ cho việc sinh

số ngẫu nhiên (RNG) được tăng tốc nhờ GPU, hỗ trợ các trình con kiểu

Sobol tựa ngẫu nhiên và XORWOW giả ngẫu nhiên trong các mã chương

trình chạy trên CPU và GPU

Trang 12

 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 dữ liệu và các

biến thể chuyển vị

 Các thư viện nén/giải nén video trước đây chỉ có thể tìm thấy trong bộ GPU

Computing SDK giờ đây được phát hành như một phần của bộ công cụ

CUDA

 Hỗ trợ các sản phẩm Quadro và Tesla với 6GB bộ nhớ DRAM trên GPU

 Hỗ trợ gỡ rối chương trình trên các GPU có nhiều hơn 4GB bộ nhớ DRAM

trên GPU

 Hỗ trợ Integrated Tesla Compute Cluster (TCC) trên các gói trình điều

khiển thiết bị Windows

 Các công cụ phát triển phần mềm được cải tiến tốt hơn

 Hỗ trợ gỡ rối chương trình sử dụng nhiều GPU trong cuda-gdb và Parallel

Nsight

 Hỗ trợ việc sử dụng cuda-memcheck trên các GPU kiểu Fermi

 Các cải tiến về giao diện của phần mềm Visual Profiler nhằm giúp tạo

luồng làm việc phân tích dữ liệu đạt năng suất hơn

 Trình biên dịch NVCC hỗ trợ Intel C Compiler (ICC) v11.1 trên các bộ

phân phối Linux 64-bit

 Hỗ trợ việc gọi các hàm hệ thống cố điển của 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

Trang 13

 Có rất nhiều chương trình mẫu mới giúp lập trình viên hiểu cách sử dụng

thư viện CURAND, bao gồm các chương trình có

tênMonteCarloCURAND, EstimatePiInlineP, EstimatePiInlineQ,

EstimatePiP, EstimatePiQ, và SingleAsianOptionP

 Chương trình mẫu Conjugate Gradient Solver minh họa việc dùng kết hợp

2 thư viện CUBLAS và CUSPARSE với nhau

 Chương trình mẫu Function Pointers chỉ cách sử dụng các con trỏ hàm

trong việc cài đặt bộ lọc Sobel Edge Detection cho các ảnh đơn sắc 8-bit

 Chương trình mẫu Interval Computing minh họa cách sử dụng các phép

toán số học trên khoảng thông qua các khái niệm C++ template và kỹ thuật

đệ qui

 Chương trình mẫu Simple Printf minh họa các cách dùng tốt nhất hàm

printf và cuprintf trong các nhân tính toán

Hình 2.6 – Các tính năng mới trong CUDA 3.2 RC [4]

 Chương trình Bilateral Filter, một bộ lọc trơn phi tuyến bảo toàn cạnh cho

bài toán phục hồi/khử nhiễu ảnh, minh họa cách cài đặt bằng CUDA C và

hiển thị kết quả bằng OpenGL

Ngày đăng: 09/04/2015, 18:58

TỪ KHÓA LIÊN QUAN

w