“不知道如何处理' nvcc 致命错误
Posted
技术标签:
【中文标题】“不知道如何处理\' nvcc 致命错误【英文标题】:"don't know what to do with' nvcc fatal error“不知道如何处理' nvcc 致命错误 【发布时间】:2014-03-29 11:27:34 【问题描述】:我在 Ubuntu 的终端中使用命令行。
我正在尝试编译 CUDA_Compiler_Driver_NVCC.pdf 中的三个文件
当我使用这 3 个文件的文档中给出的命令行时,我确实收到以下错误:
nvcc 致命:不知道如何处理'-dc'
如果我在命令行中删除 -dc,我也会收到以下错误: nvcc 致命:不知道如何处理'-arch=sm=20'
有谁知道我该如何解决这个问题?
非常感谢您的帮助
吉博
下面是我在终端中输入的命令行,以及文件。
使用的命令行: nvcc –arch=sm_20 –dc a.cu b.cu nvcc –arch=sm_20 a.o b.o
文件代码(只是文档的复制粘贴): (好像粘贴的时候codepolicy变了,这个小问题见谅)
******* 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;
【问题讨论】:
您能提供上述 PDF 的链接吗?我检查了nvcc manpage,它没有像-dc
或--arch
这样的标志。另外,我假设--arch
指定了目标硬件架构,所以我不明白为什么要给出两次。
是的 Filip,这里是 p46-47:docs.nvidia.com/cuda/pdf/CUDA_Compiler_Driver_NVCC.pdf
阅读第 6 章(本 pdf 的第 29 页)以了解 -arch
标志的说明。仍在搜索任何提及-dc
-arch 用于指定我使用的架构类型。我尝试了所有 sm_21 sm_13 等。似乎错误不是来自于此。我想知道是出于配置目的还是其他原因。我可能是错的,因为我是 Ubuntu 新手
但是您没有指定代码。我仍处于“搜索主题”阶段,而不是“阅读那些主题”,但据我所知,您总是使用-arch
和-code
,其值可能相同。另外,请阅读您应该使用哪些其他选项以使它们可用(也许它们仅用于某些特殊的编译阶段?)。
【参考方案1】:
确保您使用的是正确版本的 nvcc。我遇到了这样的问题,这是因为我使用的是 NVCC 5.5 而不是 6.0。
还要确保破折号的符号正确:使用 - (0x2D) 而不是 - (0xD0)。
【讨论】:
它为我完成了这项工作!我从互联网上复制粘贴了一些东西以及 - 符号是如何混合的!以上是关于“不知道如何处理' nvcc 致命错误的主要内容,如果未能解决你的问题,请参考以下文章