Một đoạn mã mà mất hơn 1 phút trên dòng lệnh đã được thực hiện chỉ trong vài giây trong NVIDIA trực quan Profiler (chạy .exe cùng). Vì vậy, câu hỏi tự nhiên là tại sao? Có điều gì đó sai trái với dòng lệnh, hay Visual Profiler làm một cái gì đó khác nhau và không thực sự thực hiện tất cả mọi thứ như trên dòng lệnh?Tại sao mã CUDA chạy nhanh hơn rất nhiều trong NVIDIA Visual Profiler?
Tôi đang sử dụng CUBLAS, Thrust và cuRAND.
Ngẫu nhiên, có một sự chậm trễ đáng chú ý trong mã được biên dịch trên máy của tôi rất gần đây, thậm chí mã cũ trước đó đã chạy nhanh, do đó tôi nhận được sự nghi ngờ.
Cập nhật:
- Tôi đã kiểm tra rằng tính sản lượng trên dòng lệnh và Visual Profiler là giống hệt - ví dụ: tất cả các mã cần thiết đã được chạy trong cả hai trường hợp.
- Cá mập GPU chỉ ra rằng trạng thái hiệu suất của chúng tôi là không thay đổi tại P0 khi tôi chuyển từ dòng lệnh sang Visual Profiler.
- Tuy nhiên, GPU sử dụng đã được báo cáo tại 0.0% khi chạy với trực quan Profiler, nhưng đã cao như 98% khi chạy off line lệnh.
- Hơn nữa, đến nayít bộ nhớ hơn được sử dụng với Visual Profiler. Khi chạy khỏi dòng lệnh, trình quản lý tác vụ cho biết mức sử dụng 650-700MB bộ nhớ (tăng đột biến tại cuộc gọi
cudaFree(0)
đầu tiên). Trong Visual Profiler con số đó giảm xuống ~ 100MB.
Đăng đoạn mã có thể giúp ích rất nhiều. –
Vâng, đoạn mã được đề cập thực sự là một dự án trải rộng 15 tệp phụ thuộc lẫn nhau, vì vậy có thể nằm ngoài phạm vi của câu hỏi này. Tôi chỉ đơn giản là tự hỏi nếu có ai khác đã gặp phải hiện tượng Visual Profiler và đã có một lời giải thích cho nó. – mchen
Các trình biên dịch CUDA (Nsight VSE, Visual Profiler, nvprof, và trình biên dịch dòng lệnh CUDA) đặt GPU ở trạng thái P cao nhất để đảm bảo các kết quả nhất quán. Điều này không nên tạo sự khác biệt nhiều hơn một vài phần trăm. Nguyên nhân nhiều khả năng là ứng dụng của bạn bị lỗi khi bạn chạy trình lược tả. Vui lòng xác nhận rằng ứng dụng của bạn chạy đến khi hoàn thành và không có lỗi nào xảy ra? –