2014-11-01 60 views
6

鑑於OpenCL旨在成爲異構編程的API,幾乎定義它具有與其相關的巨大延遲懲罰。因此必須有一個異步API。異步API

但是我發現很難在OpenCL.net中找到異步API。我找到了OpenCl.Net.Event結構,在大多數API調用中這似乎是一個out參數。不過,我無法找到關聯該事件的回調,因爲opencl.net似乎缺少clSetEventCallback

有沒有人知道如何在opencl.netawait異步操作?

編輯:我討厭人們downvote沒有至少發表評論。對於這個記錄,我已經圍繞這個主題搜索了很多內容,目前我正在讀一本關於OpenCL的書,甚至將源代碼下載到OpenCL.net項目中也無濟於事。 OpenCL.net上有很少的文檔。

+0

你是什麼意思等待時間?是否在等待結果時函數調用阻塞的時間? – Eric 2014-11-04 07:19:40

+0

例如在OpenCL中,您需要將數據加載到目標'設備'的內存中。這是通過排隊加載內存操作完成的。示例代碼展示瞭如何同步執行此操作(通過設置async false並忽略out事件對象)。從實現的角度來看,將數據加載到GPU上的速度「很慢」,因爲延遲很高(即使我們只考慮了GDDR5延遲)。當我們通過PCI-E總線進行數百次往返GPU時,我們失去了所有的性能提升。因此,我希望能夠排隊操作並通知完成。 – Aron 2014-11-04 07:26:11

+0

我對openCl不是很熟悉,但不是我們正在談論的openCl的批處理?你想要的是花盡可能多的時間排隊數據,儘可能少的時間等待結果(或其他)是正確的? – Eric 2014-11-04 07:50:09

回答

1

我對OpenCL.net瞭解不多,但不是CommandQueue你在找什麼?您可以使用Finish命令將所有異步任務排入隊列,直到完成所有任務爲止?

例如這裏:GPGPU image processing basics using OpenCL.NET圖像處理部分

對於clSetEventCallback我只找到clFinish或clWaitForEvents。

關於你聲明:

,因爲它似乎clSetEventCallback從opencl.net

失蹤我找不到任何方式做你想做的,對不起。

編輯: 這似乎是非常intenstring:Google-Code/GPUTracer。你應該看看OpenCL.cs和Event.cs。我認爲他們解決了你的問題。

+0

不幸的是,這不是我所期待的。我正在尋找如何在'Blocking'設置爲'false'的情況下使用這些命令,這與我目前發現的每個教程都是相反的。本教程適用於阻塞/同步API。 – Aron 2014-11-06 15:46:49

+0

這是什麼:https://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clFinish.html(clFinish)?對不起,如果我完全錯了,只是試圖幫助:) – BendEg 2014-11-06 15:52:41

+0

「阻塞,直到命令隊列中以前排隊的所有OpenCL命令都發布到相關設備並完成。」根據定義,它是異步的對立面。 – Aron 2014-11-06 15:53:43