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

[NVIDIA Tools] Bài 11: Compute - Memory Bound Phần 1

0 0 1

Người đăng: CisMine

Theo Viblo Asia

Khi nói về performance trong 1 đoạn code thì chúng ta sẽ xem xét 2 khái niệm chính là memory và compute

Vậy memory và compute là gì mà lại quan trọng như vậy?

Memory - Compute

  • Compute - hay khả năng tính toán, còn được đánh giá thông qua một khái niệm phổ biến khác là FLOPS rate - là đơn vị đo lường hiệu năng của máy tính trong việc thực hiện các phép tính số thực động ( dấu chấm động ) trong 1 giây

FLOPS rate: floating point operations per second

  • Memory ở đây không phải là lượng bộ nhớ sử dụng mà nó là memory bandwidth - tốc độ mà dữ liệu load/store giữa bộ nhớ và các thành phần xử lý

Memory Bandwidth: bytes per second

Làm thế nào để xác định một mức FLOPS rate hoặc Memory bandwidth là tốt?

Desired compute to memory ratio (OP/B)

Là thước đo quan trọng để xác định sự cân bằng giữa khả năng xử lí của máy tính và khả năng load/store trong bộ nhớ

Tại sao lại cân bằng? Vì nó đảm bảo rằng tài nguyên phần cứng được sử dụng hiệu quả nhất, tránh các bottleneck

  • Nếu OP/B tỉ lệ thấp: máy tính đang xử lí tác vụ nặng nhưng khả năng tính toán lại không đáp ứng kịp ==> compute bound ( hạn chế về khả năng tính toán )
  • Nếu OP/B tỉ lệ cao: không thể đáp ứng đủ data ( data starvation ) cho máy tính xử lí ==> memory bound ( hạn chế về khả năng load/store memory )

Vậy Compute/Memory Bound là gì ? Và làm thế nào để biết liệu code của chúng ta đang gặp phải và cách khắc phục

Compute/Memory Bound

  • Compute bound xảy ra khi hiệu năng của máy tính bị giới hạn bởi khả năng tính toán mà nó có thể thực hiện được. Thường xuất hiện tình trạng này khi chúng ta thực hiện nhiều phép toán phức tạp.
  • Memory bound xảy ra khi hiệu năng bị giới hạn bởi khả năng truy cập dữ liệu từ bộ nhớ. Thường xảy ra khi chúng ta load/store 1 lượng lớn data

Cách xác định liệu code chúng ta bị Compute/Memory Bound

Speed Of Light Throughput (SoL)

image.png

trong Nsight Compute đã giúp chúng ta xác định liệu Compute/Memory bound bằng SoL.

SoL thể hiện mức độ hoạt động của máy tính ( chứ không phải performance của code )

Ở đây mong muốn của chúng ta là compute/memory đều được sử dụng với tỉ lệ đồng đều ( không quá chênh lệch )

image.png

Phân tích từng trường hợp:

  • Latency ( M & SM < 60 ): như đã trình bày ( SoL thể hiện mức độ hoạt động của máy tính ) nhưng ở đây ta có thể thấy M và SM đều không được sử dụng tối đa hiệu suất
  • Compute bound ( SM > 60 || M < 60 ): tức là chúng ta có đủ khả năng để xử lí data ( M < 60 ) nhưng lại sử dụng quá nhiều SM cho việc tính toán ( SM > 60 ==> phép toán đang xử lí phức tạp )
  • Memory bound ( SM < 60 || M > 60 ): việc load/store cần phải hoạt động hiệu suất rất lớn trong khi phép tính thì đơn giản ==> data starvation ( không cung cấp kịp data cho tính toán )
  • Compute/Memory bound ( SM & M >60 ): có thể đoạn code đã tốt hoặc có thể chúng ta bắt gặp các tình huống trên

image.png

  • SM: Inst Executed Pipe Lsu(%) : nếu % này cao tức là SM thay vì tính toán thì tốn thời gian load/store unit
  • SM: Pipe Fma/Alu Cycles Active (%): % SM thực hiện tính toán

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