CUDA 与 Direct X 10 用于并行数学。你有什么想法吗?
5 回答
如果您知道您的目标架构使用的是 nVidia 芯片,那么 CUDA 可能是一个更好的选择。您可以完全控制数据传输、指令路径和操作顺序。当您在较低级别上工作时,您还可以使用更少的 __syncthreads 调用。
我认为 DirectX 10 会更容易与接口交互,但如果你真的想推动速度优化,你必须绕过额外的层。DirectX 10 也不知道何时使用纹理内存、常量内存和共享内存,这取决于您的特定算法。
如果您可以使用 Tesla C1060 或类似设备,那么 CUDA 无疑是更好的选择。如果你知道你的 GPGPU 的细节,你真的可以加快速度——我已经看到特斯拉和我的台式机上的一种特定算法的速度提高了 188 倍。
我觉得 CUDA 很尴尬。它不是 C,而是它的一个子集。它本身不支持双精度浮点并且是模拟的。不过对于单精度来说没关系。这取决于你扔给它的任务类型。您必须花费更多的时间进行并行计算,而不是花费在传递数据上才能使其值得使用。但这个问题并不是 CUDA 独有的。
我会等待 Apple 的 OpenCL,它似乎将成为并行计算的行业标准。
好吧,CUDA 是便携式的……如果你问我,那是一个很大的胜利……
CUDA 与支持双精度浮点运算无关。这取决于可用的硬件。9、100、200 和 Tesla 系列支持双精度浮点运算tesla。
在它们之间做出决定应该很容易。
如果您的应用程序可以容忍特定于 Windows,您仍然可以考虑 DirectX 计算。否则,请使用 CUDA 或 OpenCL。
如果您的应用不能容忍 NVIDIA 上的供应商锁定,则不能使用 CUDA,您必须使用 OpenCL 或 DirectX Compute。
如果您的应用程序正在执行 DirectX 互操作,请考虑 CUDA/OpenCL 在执行图形 API 互操作时会产生上下文切换开销,而 DirectX Compute 不会。
除非其中一项或多项标准影响您的应用程序,否则请使用大规模并行工具链的曾祖父:CUDA。