Cuộc gọi cudaMalloc đầu tiên chậm (như 0,2 giây) do một số thao tác khởi chạy trên GPU. Có chức năng nào chỉ khởi tạo, để tôi có thể tách thời gian không? cudaSetDevice dường như giảm thời gian xuống 0.15 giây, nhưng vẫn không loại bỏ tất cả các chi phí đầu vào của init.Bất kỳ chức năng cụ thể nào để khởi tạo GPU khác với lệnh gọi cudaMalloc đầu tiên?
Trả lời
Một cuộc gọi đến
cudaFree(0);
là cách kinh điển để buộc thành lập bối cảnh lười biếng trong thời gian chạy CUDA. Bạn không thể giảm chi phí, đó là một chức năng của trình điều khiển, thời gian chạy và thời gian chờ của hệ điều hành. Nhưng cuộc gọi ở trên sẽ cho phép bạn kiểm soát cách thức/khi các chi phí vượt quá đó xảy ra trong quá trình thực thi chương trình.
EDIT vào năm 2015 thêm rằng các chẩn đoán của khởi ngữ cảnh trong API runtime đã khéo léo thay đổi theo thời gian để cudaSetDevice
tại thiết lập một bối cảnh, vì vậy cuộc gọi cudaFree()
không cần rõ ràng để intialise một bối cảnh, bạn có thể sử dụng cudaSetDevice
để thay thế. Cũng lưu ý rằng một số thời gian thiết lập sẽ vẫn được phát sinh khi khởi chạy hạt nhân đầu tiên, trong khi trước đây không phải như vậy. Đối với thời gian hạt nhân, tốt nhất là bao gồm một cuộc gọi khởi động trước trước khi khởi chạy hạt nhân, bạn sẽ có thời gian để loại bỏ độ trễ thiết lập này. Dường như các công cụ lược tả khác nhau có đủ độ chi tiết được tích hợp để tránh điều này mà không cần bất kỳ cuộc gọi API hoặc cuộc gọi hạt nhân nào khác.
Chính xác! Nó nắm bắt tất cả thời gian khởi tạo! Cảm ơn! – szli