5

任何地方都没有真正提到的东西(至少我可以看到)是哪些库函数暴露给内联 CUDA 内核。

具体来说,我正在做不值得单独卸载到 GPU 的小/愚蠢的矩阵乘法,但正在卸载包含此乘法的算法的更大部分。没有人喜欢使用他们自己的 linalg 函数,因为有人总是做得更好。

TLDR 在 PyCUDA 下的内联内核中我可以使用哪些库?

4

1 回答 1

1

我不知道,而且我一直认为拥有它会很有用。

对于我通常处理的问题的大小(有限元方法中出现的小矩阵和张量),我只是编写了 C++ 模板来执行操作。对函数进行模板化允许编译器在编译时知道行程计数,并且它可以展开循环并将结果或中间结果保存在寄存器中,这往往对内核吞吐量非常有效。所以矩阵-矩阵乘积被声明为

template < typename Real, unsigned int l, unsigned int m, unsigned int n >
__device__ __host__ 
void matmul(const Real *a,
            const Real *b,
                  Real *c)
{
    for(int i=0; i<l; i++) {
        for(int j=0; j<n; j++) {
            Real dotprod = Real(0);
               for(int k=0; k<m; k++) {
                   dotprod += a[idx2c(i,k,l)] * b[idx2c(k,j,m)];
                }
                c[idx2c(i,j,l)] = dotprod;
           }
     }
}

对于我的内核中出现的那种尺寸(2x2、3x3、4x4、8x8、9x9),执行上述操作并让编译工作完成似乎与我尝试过的任何其他方法一样好。因为在线程级别 CUDA 是有效的标量,所以没有任何向量基元或类似的东西可用于加速这类小型操作。

于 2011-04-13T03:01:17.637 回答