+1

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

Ở 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


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí