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

[NVIDIA Tools] Bài 5: NVIDIA Compute Sanitizer Phần 2

0 0 9

Người đăng: NgoHuuGiaHuy

Theo Viblo Asia

Ở bài viết này mình sẽ viết tiếp về cách sử dụng NVIDIA Compute Sanitizer, hãy đọc những bài này: NVIDIA Compute Sanitize phần 1, Data Hazard trước khi đọc bài viết này

NVIDIA Compute Sanitizer

Nối tiếp ở phần 1, phần 2 này sẽ đi qua 2 cái còn lại là:

  • Racecheck, a shared memory data access hazard detection tool
  • Synccheck for thread synchronization hazard detection

Racecheck

theo như nvidia đã đề cập về NVIDIA Compute Sanitizer thì cái racecheck dùng để check khi sử dụng trên shared memory nên nếu các bạn test trên global memory thì sẽ không có kết quả nha

Code

__global__ void sumWithSharedMemory(int* input) { __shared__ int sharedMemory[4]; int tid = threadIdx.x; int i = blockIdx.x * blockDim.x + threadIdx.x; sharedMemory[tid] = input[i]; for (int stride = 1; stride < blockDim.x; stride *= 2) { // __syncthreads(); -----> barrier if (tid % (2 * stride) == 0) { sharedMemory[tid] += sharedMemory[tid + stride]; } } printf("blockIdx.x=%d --> %d\n", blockIdx.x, sharedMemory[tid]); }

đoạn code này y chang đoạn code ở bài data hazard và đây là nguyên lí hoạt động của nó

image.png

chỉ khác 1 chỗ là thay vì chúng ta xử dụng global memory thì ở đây chúng ta dùng shared memory

Shared memory mình sẽ nói riêng vì đây là phần kiến thức rất quan trọng khi nói về cuda nên ở bài viết này bạn chỉ cần hiểu là thay vì dùng global memory để thực hiện phép cộng 1+2+3+4 bằng 1 cách song song thì dùng shared memory

và bây giờ chúng ta dùng NVIDIA Compute Sanitizer để check có bị data hazard hay không bằng dòng lệnh

compute-sanitizer --tool racecheck --show-backtrace no ./a.out 

image.png

Ở đây bạn sẽ thấy 1 điều bất ngờ là kết quả vẫn ra đúng mặc dù đã bị data hazard, như ở bài trước mình đã nói về hiện tượng "undifined behavior" thì đây chính là nó, chúng ta sẽ không thể xác định được liệu nó có gây ra lỗi hay là không, có thể máy mình ra kết quả đúng NHƯNG máy của các bạn thì lại khác ==> nên hiện tượng "undifined behavior" khá là phiền phức

Lúc này nếu chúng ta dùng __syncthread() thì sẽ giải quyết vấn đề này image.png

Còn về Synccheck thì theo mình test cũng như tìm các tư liệu trên nvidia blog thì thấy họ không đề cập gì về code hết nên mình cũng không thể minh họa cho các bạn nên mình sẽ bỏ qua, nếu mình tìm được thì mình sẽ bổ sung sau ( nếu các bạn tìm thấy thì hãy bình luận ở dưới nha)

Bài tập

image.png

Đúng ra lỗi của chúng ta chỉ là 4 data hazard ( N =4 ) nhưng tại sao bức ảnh ở phía trên chúng ta lại bị 2 lỗi data hazard ( 4 và 8 )

Gợi ý: 1 data hazard = 1read or 1 write

4 data hazard là 4 read hay 4 write?

8 data hazard là 8 read hay 8 write hay 4 read và 4 write

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 28

- 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 27

- 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 28

- 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 19

- 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 20

- 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 24