Cho rằng OpenCL có nghĩa là một API cho lập trình không đồng nhất, theo định nghĩa gần như có một hình phạt trễ lớn liên quan đến nó. Do đó PHẢI là một API không đồng bộ cho nó.API không đồng bộ
Tuy nhiên, tôi thấy khó tìm thấy API không đồng bộ trong OpenCL.net. Tôi đã tìm thấy cấu trúc OpenCl.Net.Event
, có vẻ như là tham số out
trong hầu hết các cuộc gọi API. Tuy nhiên, tôi không thể tìm thấy cách nào để liên kết một cuộc gọi lại trong sự kiện, vì có vẻ như clSetEventCallback
bị thiếu trong số opencl.net
.
Có ai biết cách await
hoạt động không đồng bộ trong opencl.net
không?
EDIT: Tôi ghét nó khi mọi người downvote mà không ít nhất đưa ra một bình luận. Đối với hồ sơ, tôi đã googled khá một chút xung quanh chủ đề, hiện đang đọc một cuốn sách trên OpenCL, thậm chí tải về mã nguồn cho dự án OpenCL.net vô ích. Có rất ít tài liệu quý giá trên OpenCL.net.
Ý của bạn là gì theo độ trễ? Đó là về thời gian chức năng chặn cuộc gọi trong khi chờ kết quả? – Eric
Ví dụ trong OpenCL, bạn sẽ cần tải dữ liệu của mình vào bộ nhớ của mục tiêu 'device'. Điều này được thực hiện bằng cách enqueuing một hoạt động bộ nhớ tải. Mã mẫu cho thấy làm thế nào để thực hiện điều này một cách đồng bộ (bằng cách thiết lập async false, và bỏ qua 'out'' Event' 'object'). Từ quan điểm thực hiện, việc tải dữ liệu lên GPU là "chậm" trong độ trễ đó là cao (ngay cả khi chúng tôi chỉ tính đến thời gian trễ GDDR5). Khi chúng tôi có hàng trăm chuyến đi khứ hồi tới GPU thông qua bus PCI-E, chúng tôi sẽ mất tất cả các lợi ích về hiệu năng. Vì vậy, tôi muốn có thể enqueue hoạt động và được thông báo hoàn thành. – Aron
Tôi không phải là rất quen thuộc với openCl nhưng không phải là xử lý hàng loạt của openCl chúng tôi đang nói về? Những gì bạn muốn là dành nhiều thời gian nhất có thể xếp hàng dữ liệu và càng ít thời gian chờ đợi kết quả (hoặc bất kỳ điều gì khác) đúng không? – Eric