我正在尝试使用Clang 3.0将简单的CUDA程序转换为LLVM IR。该计划如下,
#include <stdio.h>
#include <clang/test/SemaCUDA/cuda.h>
__global__ void kernfunc(int *a)
{
//kernel definition
*a = threadIdx.x + blockIdx.x * blockDim.x;
}
int main()
{
int *h_a, *d_a, n;
n = sizeof(int);
h_a = (int*)malloc(n);
*h_a = 5;
cudaMalloc((void*)&d_a, n);
cudaMemcpy(d_a, h_a, n, cudaMemcpyHostToDevice);
//kernel call
kernelfunc<<<1,1>>>(d_a);
cudaMemcpy(h_a, d_a, n, cudaMemcpyDeviceToHost);
printf("%d", *h_a);
return 0;
}
应该包含哪些其他头文件? Clang 3.0目前不支持哪部分代码?
答案 0 :(得分:1)
你的Clang版本太旧了。对CUDA的支持是added in Clang 3.8。升级后,对于名为hello.cu
的文件,命令为:
$ clang++ -o hello -I<CUDA install path>/samples/common/inc -L<CUDA install path>/<lib64 or lib> hello.cu -lcudart_static -lcuda -ldl -lrt -pthread
有关详细信息,请参阅official documentation。