C++ 如何在CUDA中使用Eigen?

C++ 如何在CUDA中使用Eigen?,c++,eigen,C++,Eigen,Eigen的版本:3.3.9 我正在我的模拟项目中使用Eigen。有一些大矩阵需要处理。如果使用cpu,速度太慢。 有没有在cuda上使用eigen的简单示例?我没有在官方文档中找到它,现在我不知道如何开始第一步。以下是从官方页面获取的内容: 免责声明:本页介绍的是Eigen中的一项实验功能 从CUDA 5.0开始,CUDA编译器nvcc能够正确解析Eigen的代码(几乎)。Eigen代码的一些修改已经允许在您自己的CUDA内核中使用Eigen的某些部分。为此,您需要Eigen的devel分支

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

以下是从官方页面获取的内容:

免责声明:本页介绍的是Eigen中的一项实验功能

从CUDA 5.0开始,CUDA编译器nvcc能够正确解析Eigen的代码(几乎)。Eigen代码的一些修改已经允许在您自己的CUDA内核中使用Eigen的某些部分。为此,您需要Eigen的devel分支、CUDA 5.0或更高版本以及GCC

已知问题:

-使用MS Visual Studio的nvcc不起作用(欢迎使用修补程序)

-带clang的nvcc不起作用(欢迎修补程序)

-带有gcc-4.7(或更高版本)的nvcc 5.5与标准头文件存在问题。要解决此问题,可以在包含任何其他文件之前添加以下内容:

// 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代码兼容,这不能由Egeng自动完成,因此用户需要在其代码中将Egeng_default_densite_INDEX_TYPE定义为int(如果主机和CUDA代码之间没有通过Eigen对象进行交互,则仅适用于CUDA代码).

是的,我从来没有错过过。但可能是因为我还没有掌握cuda。我认为它可以像普通的cuda程序一样直接编程。在我了解cuda后,我会回来添加一个答案。谢谢您也可以参考此链接。您也可以参考此链接,它可能会有所帮助: