【问题标题】:How to use Eigen in CUDA?如何在 CUDA 中使用 Eigen?
【发布时间】:2021-02-28 15:33:47
【问题描述】:

本征版本:3.3.9 我在我的模拟项目中使用 Eigen。有一些大矩阵需要处理。如果使用cpu,太慢了。 有没有在 cuda 上使用 eigen 的简单示例?官方文档里没找到,现在不知道怎么开始第一步。

【问题讨论】:

    标签: c++ eigen


    【解决方案1】:

    以下内容摘自官网:

    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 代码对象)。

    【讨论】:

    • 是的,我永远不会错过它。但也许是因为我还没有掌握 cuda。我认为它可以像普通的 cuda 程序一样直接编程。了解了cuda之后,我会回来补充一个答案。谢谢
    • 或许你也可以参考这个链接stackoverflow.com/a/44606742/15299683
    • 你也可以参考这个,可能会有帮助:github.com/GPMueller/eigen-cuda
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多