2

我使用模板元编程为 CPU 编写了一个向量表达式模板库。但是,我很难为给定的表达式创建 GPU 内核。请告知我如何在给定表达式树的情况下创建表达式字符串 (c = a + b),以及作为内核参数传递的参数列表。我已经在论文中阅读了有关这些技术的信息,但很难将其放入代码中。一个问题是我不知道如何存储要在表达式中使用的变量 (a,b,c) 的名称。我想只是给他们随机的唯一名称,如 x0、x1、x2 可能会起作用。一个代码片段会很有帮助。谢谢

以下是内核的模板,以及 c=a+b 的实际内核,取自“CUDA 表达式模板” https://pdfs.semanticscholar.org/5d08/a871b72f12a7ee40aeb2a69bca27a23733db.pdf

extern "C" __global__ void kernel ( float∗ a ,
/∗ parameterlist ∗/ , unsigned int size ) {
    idx = blockDim . x ∗ blockIdx . x + threadIdx . x ;
    if ( idx < size ) {
       a [ idx ] = / ∗ evaluation line ∗ / ;
    }
}
Listing 4: The Kernel prototype.

extern "C" __global__ void kernel ( float∗ a ,
   float* b, float* c , unsigned int size ) {
   idx = blockDim . x ∗ blockIdx . x + threadIdx . x ;
   if ( idx < size ) {
      a [ idx ] = b [ idx ] + c [ idx ] ;
   }
}
Listing 5: Kernel generated by compiling Listing 2.
4

0 回答 0