我在Ubuntu终端中使用命令行。 我正在尝试编译CUDA_Compiler_Driver_NVCC.pdf中提供的三个文件。当我使用文档中给出的这三个文件的命令行时,我会得到以下错误:nvcc致命错误:“不知道如何处理'-dc'”。如果我删除命令行中的-dc,则也会出现以下错误:nvcc致命错误:“不知道如何处理'-arch=sm=20'”。
有人知道我该如何解决这个问题吗?非常感谢您的帮助。
以下是我在终端输入的命令行和文件。
使用的命令行:
nvcc – arch = sm_20 – dc a.cu b.cu
nvcc – arch = sm_20 a.o b.o
文件代码(只需复制文档):(看起来粘贴时代码样式改变了,对此小问题表示抱歉)
******* b.h ***********
#define N 8
extern __device__ int g[N];
extern __device__ void bar(void);
******* b.cu***********
#include "b.h"
__device__ int g[N];
__device__ void bar (void)
{
g[threadIdx.x]++;
}
******* a.cu ***********
#include <stdio.h>
#include "b.h"
__global__ void foo (void) {
__shared__ int a[N];
a[threadIdx.x] = threadIdx.x;
__syncthreads();
g[threadIdx.x] = a[blockDim.x - threadIdx.x - 1];
}
bar();
int main (void) {
unsigned int i;
int *dg, hg[N];
int sum = 0;
foo<<<1, N>>>();
if(cudaGetSymbolAddress((void**)&dg, g)){
printf("couldn't get the symbol addr\n");
return 1;
}
if(cudaMemcpy(hg, dg, N * sizeof(int), cudaMemcpyDeviceToHost)){
printf("couldn't memcpy\n");
return 1;
}
for (i = 0; i < N; i++) {
sum += hg[i];
}
if (sum == 36) {
printf("PASSED\n");
} else {
printf("FAILED (%d)\n", sum);
}
return 0;
}
-dc
或--arch
这样的标志。此外,我认为--arch
指定目标硬件架构,所以我不明白为什么要给两次。 - Filip Malczak-code
中使用-arch
,它的值可能相同。此外,请阅读其他选项,以便它们可用(也许它们仅在某些特殊编译阶段使用?)。 - Filip Malczak