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

[NVIDIA Tools] Bài 1: Giới thiệu Nsight Systems - Nsight Compute

0 0 12

Người đăng: NgoHuuGiaHuy

Theo Viblo Asia

Ở bài này mình sẽ giới thiệu sơ lược Nsight Systems - Nsight Compute để các bạn có 1 cái nhìn tổng quát nên sử dụng công cụ nào cho phù hợp với nhu cầu của mình

Xin lưu ý là bài viết này chỉ là giới thiệu sơ qua về 2 công cụ này chứ sẽ không đi sâu vào từng vấn đề 1, nên nội dung dưới đây chỉ là nói qua các thứ chúng ta cần để ý và chú tâm, còn việc giải thích cũng như debug/optimize sẽ là ở những bài sau này

Nsight Systems - Nsight Compute

Trước khi đi qua 2 công cụ này thì mình sẽ lấy 1 ví dụ để các bạn dễ hình dung hơn: Khi các bạn đi khám bác sĩ để kiểm tra sức khỏe định kì thì chúng ta sẽ khám tổng quát đầu tiên và nếu ổn thì thôi còn nếu thấy có vấn đề ( ví như tim, phổi, ... ) thì chúng ta sẽ khám kĩ hơn ở các phần chúng ta thấy không ổn ( như ở đây là tim, phổi, .. ). Thì ở đây performance code của chúng ta giống như sức khỏe vậy, đầu tiên chúng ta sẽ dùng Nsight Systems để kiểm tra tổng thể xem code chúng ta có vấn đề ở phần nào không ( ở đây là các function hay là copy data có vấn đề ), nếu có thì chúng ta sẽ dùng Nsight Compute để xác định trong function/copy data bị vấn đề gì mà optimize cũng như debug.

Như trong hình các bạn có thể thấy là chúng ta sẽ xuất phát ở Nsight Systems ( kiểm tra tổng thể ) sau đó là tới Nsight compute ( kiểm tra chi tiết các kernel - hay còn gọi là function ở GPU ). Và lưu ý là mình sẽ không đi qua Nsight Graphics vì nó thuộc về lĩnh vực đồ họa - game nhưng đừng vì vậy mà thất vọng vì các thông số cũng khá giống như Nsight compute.

1 lưu ý là 2 công cụ Compute và Systems CHỈ DÙNG ĐƯỢC cho các chương trình sử dụng GPU để chạy nên đó là lý do tại sao ở series này mình chỉ hướng dẫn xem các chương trình được lập trình song song hoặc là các model trong Deep Learning. Để hiểu rõ hơn về outcome của series này thì bạn có thể đọc qua lời mở đầu

Nsight Systems

Như trong hình bạn có thể thấy Nsight Systems đầu tiên dùng để phân tích chương trình, vậy thì ở đây cụ thể là phân tích những thứ gì?

Thời gian/tốc độ/dung lượng khi chuyển data từ Host sang Device và ngược lại

Dựa vào 3 bức ảnh trên ta có thể thấy chúng ta có thể cải thiện việc copy từ Host về Device

Tiếp đến chúng ta có thể xem overview kernel của chúng ta ( kernel tên: mygemm)

Các thông số mà chúng ta sẽ cần tập trung để phân tích là: Grid/block/Theoretical occupancy

Tóm lại sau khi khám tổng quát thì chúng ta thấy có thể cải thiện code thêm ở 2 mục: copy data và kernel

Nsight Compute

Sau khi xác nhận là 2 vấn đề cần xử lí là copy data và kernel thì chúng ta sẽ dùng Nsight Compute để phân tích rõ hơn bị vấn đề gì.

Đầu tiên là ở "summary" sẽ cho chúng ta thấy chúng ta gặp vấn đề cụ thể ở đâu và cách giải quyết ( Ở đây mình sẽ không đi quá sâu mà chỉ giải thích sơ qua )

Như hình bạn có thể thấy chúng ta có thể cải thiện 3 mục, trong đó có 2 mục mà mình đã phân tích phía trên:

  • Theoretical warps speedup 33,33% : bạn để ý sẽ thấy ở bức hình overview kernel ở mục Theoretical occupancy là 66,66% tức là chúng ta có thể cải thiện thêm nữa ( về lý thuyết có thể đạt 100% )
  • DRAM Execessive Read Sectors: tức là việc chúng ta phân bổ, tổ chức memory chưa được tối ưu dẫn đến việc Read/Write có vần đề trong quá trình transfer data.

Tiếp đến là "Source" sẽ cho chúng ta thấy dòng code nào thực hiện công việc nặng nhất ( tốn nhiều thời gian/memory)

Tiếp đến là "Detail" cũng sẽ mục khó nhất cũng là nơi chứa nhiều thông tin cần phân tích nhất. Trong Detail sẽ chứa nhiều thông tin nhưng chúng ta sẽ để ý đến những thứ này:

  • GPU Speed of Light Throughput

  • Memory Workload Analysis và các thông số cực kì chết não

  • Scheduler Statistics

  • Occupancy

Tóm tắt

Qua bài viết này bạn có lẽ mường tượng được công dụng của Nsight Systems - Nsight Compute. Ở các bài sau mình sẽ đi chi tiết hơ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 27

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

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

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