C# 异步API

C# 异步API,c#,.net,asynchronous,opencl.net,C#,.net,Asynchronous,Opencl.net,考虑到OpenCL是一个异构编程的API,几乎从定义上讲,它会带来巨大的延迟损失。因此,它必须有一个异步API 然而,我发现在OpenCL.net中很难找到异步API。我发现了OpenCl.Net.Eventstruct,它似乎是大多数API调用中的out参数。但是,我无法找到与事件相关联的回调,因为opencl.net中似乎缺少clSetEventCallback 有人知道如何在opencl.net中等待异步操作吗?我对opencl.net不太了解,但是命令队列不就是你想要的吗?您可以使用Fi

考虑到OpenCL是一个异构编程的API,几乎从定义上讲,它会带来巨大的延迟损失。因此,它必须有一个异步API

然而,我发现在OpenCL.net中很难找到异步API。我发现了
OpenCl.Net.Event
struct,它似乎是大多数API调用中的
out
参数。但是,我无法找到与事件相关联的回调,因为
opencl.net
中似乎缺少
clSetEventCallback


有人知道如何在
opencl.net
中等待
异步操作吗?

我对opencl.net不太了解,但是
命令队列不就是你想要的吗?您可以使用
Finish
命令将所有aynch任务排队,直到所有任务完成为止

例如:在下,图像处理部分

因为我只找到了clFinish或clWaitForEvents

关于你的声明:

似乎opencl.net中缺少clSetEventCallback

对不起,我找不到任何方法来做你想做的事

编辑
这似乎是非常有趣的字符串:。您应该看看OpenCL.cs和Event.cs。我想他们解决了你的问题。

你说的延迟是什么意思?是函数在等待结果时调用块的时间吗?例如,在OpenCL中,您需要将数据加载到目标
设备的内存中。这是通过将加载内存操作排队来完成的。示例代码显示了如何同步执行此操作(通过将async设置为false,并忽略
out
事件
对象
)。从实现的角度来看,将数据加载到GPU是“慢”的,因为延迟很高(即使我们只是考虑GDDR5延迟)。当我们通过PCI-E总线往返数百次到GPU时,我们将失去所有性能增益。因此,我希望能够将操作排队并收到完成通知。我对openCl不是很熟悉,但我们谈论的openCl批处理不是吗?你想要的是花尽可能多的时间排队等待数据,而花尽可能少的时间等待结果(或其他任何事情),对吗?@Eric Batch processing肯定是值得做的事情。但是,考虑到需要执行多个操作(加载数据/加载内核(计算)/刷新操作/等待完成/将数据导出回RAM),使计算异步进行仍然很重要。@Eric,让您知道这一点。我想扩展到支持批处理和异步处理。目前异步似乎更容易。不幸的是,这不是我想要的。我正在寻找如何在
阻塞
设置为
false
的情况下使用这些命令,这与我目前找到的每个教程都相反。本教程用于执行阻塞/同步API。这是什么:(clFinish)?抱歉,如果我完全错了,请尝试帮助:)“阻止,直到命令队列中以前排队的所有OpenCL命令都被发送到相关设备并完成。”根据定义,这与异步相反。确定,但是我不理解你问题的这一部分:
有人知道如何在opencl.net中等待异步操作吗?
@Aron好的,现在我理解并更新了我的帖子,但是在当前的opencl.net版本中找不到任何解决方案,抱歉。