- vừa được xem lúc

[Lập trình song song] Bài 12: Atomic function

0 0 3

Người đăng: NgoHuuGiaHuy

Theo Viblo Asia

Ở bài này mình sẽ giới thiệu các bạn một cái built in function khá là xịn trong cuda, và 1 lưu ý là hãy đọc các bài này Data HazardSynchronization - Asynchronization trước khi đọc bài viết này

Atomic function

Thư viện này dùng khá đơn giản và mục đích mà NVIDIA viết ra thư viện này để tránh trường hợp data hazard hay có thể nói là để đồng bộ các thread trong quá trình xử lí các phép toán

Ví dụ chúng ta có 1 đoạn code đơn giản

for(int i=0;i<n;i++){ y+=x[i]; }

Nhưng nếu đưa về song song

 int tid = threadIdx.x + blockIdx.x * blockDim.x; if (tid < n) { *d_result += d_data[tid]; }

Thì sẽ dẫn đến data hazard do không có sự đồng bộ giữa các thread và dẫn đến output sai, vậy nên atomic sinh ra để giải quyết vấn đề này

Có thể hiểu đơn giản atomic function hoạt động na ná giống for-loop , đều duyệt qua từng thread một ( thread nào khởi động trước sẽ được duyệt trước ) KHI VÀ CHỈ KHI các thread cùng read-write cùng 1 value còn nếu không thì vẫn song song như bình thường

Đây là code khi xử dụng atomic

 int tid = threadIdx.x + blockDim.x * blockIdx.x; atomicAdd(result, array_add[tid]);

Và đây là 1 số atomic function

  • atomicAdd(result, array_add[tid]);
  • atomicSub(result, array_sub[tid]);
  • atomicMax(result, array_max[tid]);
  • atomicMin(result, array_min[tid]);

Ngoài ra còn 1 vài atomic function thú vị khác như atomicCAS, atomicExch

Full code mình sẽ để ở đây

Bình luận

Bài viết tương tự

- vừa được xem lúc

GPU programming với Golang

GPU programming với Golang. Ở bài trước mình có giới thiệu về kĩ thuật lập trình GPU với OpenCL bằng C/C++.

0 0 21

- vừa được xem lúc

Allocating Memory on HPC ( Slurm Scripts)

Bài viết này giải thích cách yêu cầu bộ nhớ trong các Slurm Scripts và cách xử lý các lỗi thường gặp liên quan đến bộ nhớ CPU và GPU. Lưu ý rằng "memory" luôn đề cập đến RAM .

0 0 15

- vừa được xem lúc

[Lập trình song song] Bài 1: Giới thiệu về CPU-GPU

Trước khi tìm hiểu thế nào là lập trình song song cũng như cách code thì mình phải biết 1 chút về lịch sử hình thành nên ở bài 1 mình sẽ giới thiệu sơ lược những điều bạn nên biết ở lĩnh vực này. Chắc

0 0 20

- vừa được xem lúc

[Lập trình song song] Bài 2: Cài đặt môi trường code CudaC

Trước khi code thì chúng ta phải setup môi trường để code thì ở bài này mình sẽ hướng dẫn các bạn cách setup và đối với những ai sở hữu máy tính mà không có GPU thì cũng đừng có lo vì chúng ta sẽ code

0 0 11

- vừa được xem lúc

[Lập trình song song] Bài bonus 1: Cách thức hoạt động của máy tính

Ở bài này mình sẽ nói qua về cách máy tính hoạt động trong việc lấy và xử lí data qua ví dụ cực kì trực quan và dễ hiểu . Và xin lưu ý là ví dụ này sẽ được nhắc lại khá nhiều trong các bài học về lập

0 0 13

- vừa được xem lúc

[Lập trình song song] Bài bonus 2: Các thuật ngữ trong lập trình song song

Ở bài này mình sẽ giải thích các thuật ngữ thường hay được đề cập tới trong lập trình song song. .

0 0 14