Tôi mới bắt đầu sử dụng gói CUDArt của Julia để quản lý tính toán GPU. Tôi tự hỏi làm thế nào để đảm bảo rằng nếu tôi đi để kéo dữ liệu từ gpu (ví dụ: sử dụng to_host()
) mà tôi không làm như vậy trước khi tất cả các tính toán cần thiết đã được thực hiện trên nó.Làm thế nào để đồng bộ hóa với Julia CUDArt?
Thông qua một số thử nghiệm, có vẻ như to_host(CudaArray)
sẽ bị trễ trong khi CudaArray cụ thể đang được cập nhật. Vì vậy, có lẽ chỉ cần sử dụng này là đủ để đảm bảo an toàn? Nhưng có vẻ như một chút chancy.
Hiện tại, tôi đang sử dụng chức năng launch()
để chạy hạt nhân của tôi, như được mô tả trong gói documentation.
Tài liệu CUDArt cung cấp ví dụ sử dụng macro @sync
của Julia, có vẻ như nó có thể đáng yêu. Nhưng với mục đích của @sync
Tôi đã làm xong với "công việc" của mình và sẵn sàng chuyển ngay khi hạt nhân được khởi chạy với launch()
, chứ không phải khi nó kết thúc. Theo như tôi hiểu hoạt động của launch()
- không có cách nào để thay đổi tính năng này (ví dụ: để làm cho nó chờ để nhận được đầu ra của hàm nó "khởi chạy").
Làm cách nào để tôi có thể thực hiện đồng bộ hóa như vậy?
Điểm tốt. Tôi nghĩ 'device_synchronize' vẫn có thể hữu ích trong một số cài đặt. 1. Bạn có thể sử dụng nó cùng với các chức năng khác, chẳng hạn như các hàm từ CUBLAS, CUSPARSE, v.v. không lấy luồng làm đối số. Ngoài ra, nếu bạn chỉ làm việc với một GPU, bạn có thể thậm chí không cần luồng, và vì vậy 'device_synchronize' có thể dẫn đến một ứng dụng đơn giản hơn một chút. –