gpt4 book ai didi

c# - GPU 的动态线程池

转载 作者:太空宇宙 更新时间:2023-11-03 15:37:12 26 4
gpt4 key购买 nike

到目前为止,我已经使用线程池范例实现了一个简单的程序,其中我有许多线程在处理许多任务。一次所有可用的任务都是相互独立的。对于每个任务,我都会有一些输出,通常会生成一些任务。 (例如

函数(a,b):
tasks.enque((a+b, b+1), (a*b, b+2));
返回 sin(a);

实际上可能有更多的任务,为每个完成的任务生成,所以工作量增长得非常快。为了保持合理的低计算时间,我想我可以使用 GPU 生成树,因为任务是独立的,一旦它们被创建。

有了这个,我提出了我的问题:是否有可能以某种方式直接做到这一点,例如使用 OpenCL?
我想知道这是不是个好主意。到目前为止,我还没有看到在 OpenCL 中将任务动态添加到队列的可能性,如果我说:好的 - 首先我计算第一个队列,并生成一个新队列,稍后我再次开始,我担心 GPU 和 CPU 之间内存复制的开销可能太大以至于它不再有效我打算做的计算。我不确定,如果我能够将数据保存在 GPU 的 RAM 中,或者它是否自动提取,因此需要在那里复制并再次复制回来。(我打算用OpenCL.net)

谢谢你用你的知识启发我,因为我绝对是多线程和 GPU 的初学者

最佳答案

从 OpenCL 2.0 开始,无需主机交互即可从设备中对内核进行排队。看看OpenCL™ 2.0: Device Enqueue and Workgroup Built-in Functions .

但是我怀疑您会找到 OpenCL 2.0 的 .Net 绑定(bind),据我所知,目前还没有 C++ 绑定(bind)。

关于c# - GPU 的动态线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31427527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com