2014-11-01 16 views
6

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.

+0

Ý 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

+0

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

+0

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

Trả lời

1

Tôi không biết nhiều về OpenCL.net, nhưng không phải là số CommandQueue những gì bạn đang tìm kiếm? Bạn có thể enqueue tất cả các nhiệm vụ aynch của bạn một fait với lệnh Finish cho đến khi tất cả các nhiệm vụ được hoàn thành?

Ví dụ ở đây: GPGPU image processing basics using OpenCL.NET dưới Hình ảnh phần chế biến

Đối clSetEventCallback tôi chỉ tìm thấy clFinish hoặc clWaitForEvents.

đề cập đến tuyên bố của bạn:

như nó có vẻ clSetEventCallback là mất tích từ opencl.net

tôi không thể tìm thấy bất cứ cách nào để làm những gì bạn muốn, xin lỗi.

CHỈNH SỬA: Điều này có vẻ rất nghiêm trọng: Google-Code/GPUTracer. Bạn nên xem OpenCL.cs và Event.cs. Tôi nghĩ rằng họ đã giải quyết được vấn đề của bạn.

+0

Thật không may đây không phải là những gì tôi đang tìm kiếm. Tôi đang tìm cách sử dụng các lệnh đó với 'Blocking' được đặt thành' false', điều ngược lại với mọi hướng dẫn mà tôi đã tìm thấy từ trước tới nay. Hướng dẫn này là để thực hiện API chặn/đồng bộ. – Aron

+0

Điều gì là với điều này: https://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clFinish.html (clFinish)? Xin lỗi nếu tôi hoàn toàn sai, chỉ cần cố gắng trợ giúp :) – BendEg

+0

"Chặn cho đến khi tất cả các lệnh OpenCL xếp hàng trước đó trong một hàng đợi lệnh được cấp cho thiết bị liên quan và đã hoàn thành". Mà theo định nghĩa là OPPOSITE không đồng bộ. – Aron

Các vấn đề liên quan