【问题标题】:Using Alea Gpu DeviceFunction when the routine is processed on Cpu在 Cpu 上处理例程时使用 Alea Gpu DeviceFunction
【发布时间】:2017-08-19 15:39:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: aleagpu


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。如果我理解正确,那么....当应用程序在处理模式ParallelGpuThreads(我的枚举)下运行时,我的数据在Gpu上,而DeviceFunctions在Gpu上执行,没有问题。但是,当应用程序在处理模式 SingleCpuThread、ParallelCpuThreads(我的枚举)下运行时,我的数据在 Cpu 上,而 DeviceFunctions 可能在也可能不在 Gpu 上执行,这可能是也可能不是问题,因为那会要求将数据不必要地编组到 Gpu(性能下降)。
    • 由于DeviceFunctions是否能够在Cpu上的确定是逐个函数的,是否有任何文档或有任何其他方法可以确定?我的例程使用的 DeviceFunction 是... - DeviceFunction.IsNaN - DeviceFunction.Log10 - DeviceFunction.Sqrt - DeviceFunction.Abs
    猜你喜欢
    • 2018-05-26
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2013-12-28
    • 2018-02-12
    • 2019-03-03
    • 1970-01-01
    相关资源
    最近更新 更多