c++ - 让应用程序拥有 CPU 和 GPU 计算后端的最佳方式是什么

标签 c++ cuda eigen

我有一个涉及使用 Eigen 编写的大量矩阵乘法的应用程序。我想为其制作一个 GPU 计算后端,同时保持仅在 CPU 上运行并在可用时由 MKL 加速的能力。

问题: 以与 CPU 后端共享尽可能多的代码的方式添加 GPU 计算后端。

实现 GPU 加速的最简单方法是使用 Eigen-magma,但这非常有限,因为每次操作都会从主内存到 GPU 内存进行不必要的来回复制,这限制了性能增益可以从 GPU 获取。

知道我必须完全放弃 Eigen 并重写应用程序,但在没有完全独立的 CPU 和 GPU 计算后端代码路径的情况下,最好的方法是什么?

最佳答案

借助 CUDA6 和自动管理内存功能,您可以通过让驱动程序在确实需要时执行这些额外的拷贝来轻松避免这些额外的拷贝。应该很容易适应特征岩浆以利用该功能。这就是我们计划在 Eigen 中原生支持 CUDA 的方式。

关于c++ - 让应用程序拥有 CPU 和 GPU 计算后端的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25993967/

相关文章:

cuda - 确定 CUDA SM 中允许的扭曲数量

c++ - 找到稀疏矩阵( Eigen )最大值的有效方法

c++ - 如何将自定义特征张量类存储到 std::vector 中?

c++ - fprintf unicode字符的正确方法

c++ - 使用 C++ 11 进行重构

c++ - CapnProto - 在回调中向其他服务器请求

cuda - 如果同时从多个 pthread 调用 CUDA 内核会怎样?

c++ - CMake & QT5 - QT5_WRAP_UI 不生成 ui 头文件

multithreading - 多个 GPU 中的固定内存

c++ - 如果我还需要使用 ODE,我应该从 Eigen 切换到 MTL4 吗?