khi đang gọi đến chức năng cudaDeviceSynchronize
thực sự cần thiết ?.Khi nào cần gọi cudaDeviceSynchronize?
Theo như tôi hiểu từ tài liệu CUDA, hạt CUDA không đồng bộ, vì vậy có vẻ như chúng ta nên gọi cudaDeviceSynchronize
sau mỗi lần khởi chạy hạt nhân. Tuy nhiên, tôi đã thử cùng một mã (đào tạo mạng thần kinh) có và không có bất kỳ cudaDeviceSynchronize
, ngoại trừ một trước khi đo thời gian. Tôi đã tìm thấy rằng tôi nhận được kết quả tương tự nhưng với một tốc độ lên từ 7-12x (tùy thuộc vào kích thước ma trận).
Vì vậy, câu hỏi đặt ra là nếu có bất kỳ lý do nào để sử dụng cudaDeviceSynchronize
ngoài việc đo thời gian.
Ví dụ:
Có cần thiết trước khi sao chép dữ liệu từ GPU trở lại máy chủ với
cudaMemcpy
?Nếu tôi nhân ma trận như
C = A * B D = C * F
tôi nên đặt cudaDeviceSynchronize
giữa cả hai?
Từ thử nghiệm của tôi Có vẻ như tôi không làm vậy.
Tại sao cudaDeviceSynchronize
làm chậm chương trình?
Một trường hợp sẽ là nếu bạn có bất kỳ câu lệnh in nào trong hạt nhân, bộ đệm sẽ không in cho đến khi sự kiện đồng bộ hóa. –