【发布时间】:2021-02-28 15:33:47
【问题描述】:
本征版本:3.3.9 我在我的模拟项目中使用 Eigen。有一些大矩阵需要处理。如果使用cpu,太慢了。 有没有在 cuda 上使用 eigen 的简单示例?官方文档里没找到,现在不知道怎么开始第一步。
【问题讨论】:
本征版本:3.3.9 我在我的模拟项目中使用 Eigen。有一些大矩阵需要处理。如果使用cpu,太慢了。 有没有在 cuda 上使用 eigen 的简单示例?官方文档里没找到,现在不知道怎么开始第一步。
【问题讨论】:
以下内容摘自官网:
https://eigen.tuxfamily.org/dox/TopicCUDA.html
免责声明:此页面是关于 Eigen 中的实验性功能。
从 CUDA 5.0 开始,CUDA 编译器 nvcc 能够正确解析 Eigen 的代码(几乎)。对 Eigen 代码的一些修改已经允许在您自己的 CUDA 内核中使用 Eigen 的某些部分。为此,您需要 Eigen 的 devel 分支,CUDA 5.0 或更高版本的 GCC。
已知问题:
-nvcc 与 MS Visual Studio 不工作(欢迎补丁)
-nvcc 与 clang 不工作(补丁欢迎)
-nvcc 5.5 与 gcc-4.7(或更高版本)的标准头文件存在问题。要解决此问题,您可以在包含任何其他文件之前添加以下内容:
// workaround issue between gcc >= 4.7 and cuda 5.5
#if (defined __GNUC__) && (__GNUC__>4 || __GNUC_MINOR__>=7)
#undef _GLIBCXX_ATOMIC_BUILTINS
#undef _GLIBCXX_USE_INT128
#endif
-在 64 位系统上,Eigen 使用 long int 作为索引和大小的默认类型。在 CUDA 设备上,默认为 32 位 int 是有意义的。但是,为了保持主机和 CUDA 代码兼容,这不能由 Eigen 自动完成,因此用户需要在他的整个代码中将 EIGEN_DEFAULT_DENSE_INDEX_TYPE 定义为 int (或者如果主机和 CUDA 代码之间没有通过 Eigen 的交互,则仅用于 CUDA 代码对象)。
【讨论】: