1

我有一个例程,旨在在三种处理模式中的任何一种下调用;SingleCpuThread、ParallelCpuThreads 和 ParallelGpuThreads。

在例程中,使用 Alea.DeviceFunction 执行数学运算,以便在 ParallelGpuProcessing 模式下调用例程时与 Alea 兼容。

问题:当在其他两种模式下调用相同的例程,并且使用 DeviceFunction 执行数学运算时,是否使用 Gpu 并产生开销和编组等?如果是这样(这会很糟糕),让同一个例程使用 dot net 的 .Math 函数而不是 .DeviceFunction 的最佳方法是什么,而不需要为单独的 Cpu-happy 和 Gpu-happy 版本的例程复制整个例程?

4

1 回答 1

1

正如术语设备函数所说,这些函数在 GPU 上运行,假设所有数据都在那里。因此没有编组开销。

为了简化 CPU / GPU 代码重用,大多数设备功能都实现在 CPU 上运行。然而,一些设备功能在 CPU 上没有意义,例如投票功能。这意味着您可以只使用设备功能,然后您就会知道 Alea GPU 在 GPU 上的速度最快。编译器还将一些 .NET 数学函数自动映射到 GPU 设备函数。

于 2017-08-19T07:39:06.813 回答