我的计算具有二叉树的结构,其中在每个节点处,一堆高度向量化的函数接受先前分支的输出以产生新的分支(同一级别上的节点是独立的)。由于函数是矢量化的,因此它们在CPU或GPU上运行良好,后者自然会大大加快执行速度。
我很快就可以访问4-GPU 2-CPU工作站来运行我的代码,我想尽可能地使用它。我了解如何仅在GPU上使用parfor
或在CPU上使用parfor
。仅核心,但我想合理地分配GPU和CPU之间的工作负载,因为GPU执行只会让许多CPU核心处于空闲状态,即使它们比GPU慢得多,它们仍然足够快,值得注意对总执行时间的影响。
(Q1)由于每个节点中的函数都是矢量化的,因此在每个单核节点模式下运行独立节点实际上是否合理?或者这严格取决于具体情况?是否有拇指的规则"对于这种困境?
(Q2)假设在(Q1)中,每个核心同时执行1个节点是次优的,是否有办法为一个工作者分配多个CPU核心?< / p>
(Q3)有没有办法以高效的方式在GPU和CPU之间分发gpuDevice
工作人员?
以下是(Q3)中我不特别考虑的高效:根据循环索引,循环实例可以执行GPU代码给定parfor
或CPU(核心)。了解GPU和CPU执行之间的性能差异,可以推断出分配给CPU执行的索引的适当比例。这个问题是{{1}}没有以任何特定的顺序选择循环索引,这反过来很容易导致它试图在同一GPU上执行两个独立任务的实例,这是低效的,因为它必须序列化任务。
谢谢!