到目前为止,我已经用线程池范例实现了一个简单的程序员,在这个范例中,我有许多线程在处理许多任务。一次可用的所有任务都是相互独立的。对于每个任务,我都会有一些输出,通常还会生成一些任务。(例如
func(a, b): tasks.enque((a+b, b+1), (a*b, b+2)); return sin(a);
在现实中,可能会有更多的任务,为每个完成的任务生成,因此工作负载增长非常快。为了保持合理的计算时间,我想我可以使用GPU生成树,因为任务是独立的,只要它们被创建。
于是我提出了我的问题:有没有可能以某种方式直截了当地做到这一点,比如使用OpenCL?
我想知道这是不是一个好主意。到目前为止,我还没有看到在OpenCL中动态添加任务到队列的可能性,如果我说: Ok,首先我计算第一个队列,并生成一个新队列,然后再开始,我担心在GPU和CPU之间进行内存复制的开销可能太大,以至于对于我想要做的简单计算来说,它将不再有效。我不确定,我是否能够将数据保留在GPUs中,或者它是否被自动提取,因此需要反复复制。(我计划使用OpenCL.net)
感谢你用你的知识启发我,因为我对多线程和GPU都是一个绝对的初学者
发布于 2015-07-15 20:11:39
从OpenCL 2.0开始,可以在没有主机交互的情况下将内核从设备入队。看看OpenCL™ 2.0: Device Enqueue and Workgroup Built-in Functions吧。
然而,我怀疑你是否能找到OpenCL 2.0的.Net绑定,据我所知,现在还没有C++绑定。
https://stackoverflow.com/questions/31427527
复制相似问题