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

[NVIDIA Tools] Bài 12: Compute - Memory Bound Phần 2

0 0 3

Người đăng: CisMine

Theo Viblo Asia

Ở bài trước chúng ta đã sử dụng SoL để xác định liệu code của chúng có bị memory/compute bound hay không thì ở bài này mình sẽ hướng dẫn các bạn 1 phương pháp khác để xác định là roofline chart

Roofline chart

image.png

Trước khi giải thích sâu về roofline chart thì mình sẽ đi qua về các định nghĩa cần nên biết

Arithmetic Intensity (FLOP/byte): thể hiện mức độ tận dụng hiệu quả tài nguyên tính toán và băng thông bộ nhớ

image.png

Như chúng ta biết, math sẽ nhanh hơn memory rất nhiều nên chúng ta cần phải cân bằng tỉ lệ sao cho phù hợp để tránh các trường hợp memory/compute bound, thì mỗi máy tính sẽ có tỉ lệ khác biệt và để xác định bằng cách click vào ô vuông như trong hình

image.png

Chúng ta sẽ phân tích sâu hơn về hình vẽ này

image.png

  • Peak FLOP/s : tốc độ tính toán tối đa mà máy tính có thể đạt được
  • Bandwidth GB/s: tốc độ máy tính load/store memory và đạt peak ở giao nhau giữa đường màu đỏ và xanh và điểm đó còn gọi là key point - knee point

Key point (knee point): là điểm chuyển đổi giữa hai giai đoạn:

  • Giai đoạn bị memory bound.
  • Giai đoạn bị compute bound.

Về lý thuyết: nếu chúng ta đạt được tỉ lệ key point (như trong hình là AI =0.55 ) là đoạn code của chúng ta quá hoàn hảo ( cân bằng giữa math và memory )

Về thực tế: việc chúng ta đạt được điểm nằm trên đường chéo như ở trong hình là rất tốt rồi

Tình trạng xuất hiện bottle neck:

image.png

P (FLOP/s): thể hiện tốc độ task có thể thực thi

P (peak): tốc độ tính toán tối đa mà máy tính có thể đạt được ( tốc độ lý thuyết )

I . b ( flop/byte * byte/s) tốc độ thực tế để chạy đoạn code đó

Khi chúng ta dùng min để xác định liệu rằng compute hay memory bound

  • Nếu P(peak) min ==> compute bound: vì tốc độ thực tế để chạy đoạn code đó cao hơn nhưng máy tính chúng ta giới hạn chỉ tính toán tới mức peak là cùng, không thể vượt qua nữa ==> cách khắc phục: sử dụng unit size lớn hơn
  • Nếu I . b min ==> memory bound: chúng ta chưa thực sự dùng hết khả năng máy tính ==> cách khắc phục: coarsening

Như vậy qua 2 phần chúng ta có thể xác định đoạn code của chúng ta gặp vấn đề trong việc tính toán hay là load/store data. Ở các bài sau mình sẽ hướng dẫn cách khắc phục cụ thể từng trường hợp

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 29

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

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

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

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

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