如何在 CUDA 内核中使用 Eigen

2024-01-04

Eigen 是一个 C++ 线性代数库http://eigen.tuxfamily.org http://eigen.tuxfamily.org.

使用基本数据类型(例如基本浮点数组)很容易,只需将其复制到设备内存并将指针传递给 cuda 内核即可。但是特征矩阵是复杂类型,那么如何将其复制到设备内存并让cuda内核读取/写入它呢?


自 2016 年 11 月(Eigen 3.3 发布)以来,出现了一个新选项:直接在 CUDA 内核中使用 Eigen - see 这个问题 https://stackoverflow.com/q/41119365/4069571.

链接问题的示例:

__global__ void cu_dot(Eigen::Vector3f *v1, Eigen::Vector3f *v2, double *out, size_t N)
{
    int idx = blockIdx.x * blockDim.x + threadIdx.x;
    if(idx < N)
    {
        out[idx] = v1[idx].dot(v2[idx]);
    }
    return;
}

复制数组Eigen::Vector3f至设备:

Eigen::Vector3f *host_vectors = new Eigen::Vector3f[N];
Eigen::Vector3f *dev_vectors;
cudaMalloc((void **)&dev_vectors, sizeof(Eigen::Vector3f)*N)
cudaMemcpy(dev_vectors, host_vectors, sizeof(Eigen::Vector3f)*N, cudaMemcpyHostToDevice)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 CUDA 内核中使用 Eigen 的相关文章

随机推荐