起因
C++原有实现有点慢,尝试CUDA加速,突发奇想,能不能在kernel或者device函数里面使用eigen,因为eigen是header file only的。然后发现居然真的可以,不过对于kernel函数而言,视乎有点绕。
实例
在原来CUDA的实例上又搞了一个用eigen的例子。指定图像中的某一个像素为中心,在这个像素附近的窗内对所有像素计算e的指数,再求平方,再窗内像素的结果求和。CUDA实现中没有使用二维的grid和block,这与我那时的需求有关系。
在Ubuntu16.04上利用CMake创建项目。大致思路是所有CUDA实现都编译到一个静态库内,非CUDA的部分对这个库进行连接。所有CUDA实现的代码管理在项目的子文件夹中。文件目录结构为
- /Root
- /Includes
- /CUDARoutines
- Add.hpp
- CUDACommon.hpp
- KernelEigen.hpp
- Common.hpp
- /CUDARoutines
- /Src
- /CUDARoutines
- Add.cu
- CMakeLists.txt
- KernelEigen.cu
- CMakeLists.txt
- main.cpp
- /CUDARoutines
- /Includes
其中KernelEigen.cu就是在kernel