Hi, I am

Ngô Tôn

I am a programmer.

Home / HCMUS / Parallel Programming on a GPU / Lập trình song song trên GPU bằng CUDA

Lập trình song song trên GPU bằng CUDA

CUDA là gì?

CUDA (Compute Unified Device Architecture) là ngôn ngữ C/C++ được mở rộng, cho phép viết chương trình chạy trên CPU (những phần tính toán tuần tự) và GPU (những phần tính toán song song).

CPU có một vài core, mỗi core mạnh và phức tạp. Tập trung tối ưu hóa độ trễ (latency)

Độ trễ = thời gian hoàn thành một công việc

GPU có rất rất nhiều core, mỗi core yếu và đơn giản. Tập trung tối ưu hóa băng thông (throughput)

Băng thông = số lượng công việc hoàn thành trong một đơn vị thời gian

Cấu trúc của một chương trình CUDA

Một số khái niệm:

Host: CPU và bộ nhớ của nó

Device: GPU và bộ nhớ của nó

Hàm kernel <<<…>>>: cấu hình thực thi, được gọi từ host

__global__: hàm sẽ chạy trên device và được gọi từ host

__host__: hàm sẽ chạy trên host và được gọi từ host

__device__: hàm sẽ chạy trên device và được gọi từ device

Những phần tính toán tuần tự chạy ở host (CPU), những phần tính toán song song (mức độ lớn) chạy ở
device (GPU)

Từ host, để nhờ device tính toán song song:

  • Host cấp phát các vùng nhớ ở device bằng hàm cudaMalloc
  • Host chép các dữ liệu cần thiết sang các vùng nhớ ở device bằng hàm cudaMemcpy
  • Host gọi hàm kernel
  • Host chép kết quả từ device về bằng hàm cudaMemcpy
  • Host giải phóng các vùng nhớ ở device bằng hàm cudaFree

Hàm kernel dược thực thi song song ở device bởi rất nhiều tiểu trình (thread)

Các tiểu trình này được tổ chức thành 2 cấp: lưới tiểu trình (grid) gồm các khối tiểu trình (block) có cùng kích thước, khối gồm các tiểu trình.

Khi host gọi hàm kernel cần cho biết grid gồm bao nhiêu block, mỗi block có bao nhiêu thread (blockSize, gridSize).

Trong hàm kernel, mỗi biến tiểu trình có thể sử dụng các biến hệ thống blockIdx, threadIdx, blockDim, gridDim để xác định phần dữ liệu mà mình sẽ phụ trách tính toáncuda_memory

 

grid

threadIdx_blockIdx

Một tính chất của hàm kernel là “không đồng bộ” (asynchronous): sau khi host gọi hàm kernel ở device, host sẽ được tự do tiếp tục làm các công việc của mình mà không phải chờ hàm kernel ở device thực hiện xong.

Ở các bài sau, Ngô Tôn .IT xin giới thiệu một số chương trình CUDA đơn giản như cộng 2 vector, cộng 2 ma trận, nhân 2 ma trận,… để các bạn có thể thực thành lập trình song song trên GPU.

CUDA là gì? CUDA (Compute Unified Device Architecture) là ngôn ngữ C/C++ được mở rộng, cho phép viết chương trình chạy trên CPU (những phần tính toán tuần tự) và GPU (những phần tính toán song song). CPU có một vài core, mỗi core mạnh và phức tạp. Tập trung tối ưu hóa độ trễ (latency) Độ trễ = thời gian hoàn thành một công việc GPU có rất rất nhiều core, mỗi core yếu và đơn giản. Tập trung tối ưu hóa băng thông (throughput) Băng thông = số lượng công việc hoàn thành trong một đơn vị thời gian Cấu trúc của…

User Rating: 4.78 ( 2 votes)

About ngoton

Ngô Tôn is a programmer with passion for tailored software solutions. Comes with 6+ years of IT experience, to execute beautiful front-end experiences with secure and robust back-end solutions.

Leave a Reply

Your email address will not be published. Required fields are marked *