编译错误

1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 5.0.targets(592,9): error MSB3721: 命令““C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\nvcc.exe” -gencode=arch=compute_10,code="sm_10,compute_10" -gencode=arch=compute_20,code="sm_20,compute_20" -gencode=arch=compute_30,code="sm_30,compute_30" -gencode=arch=compute_35,code="sm_35,compute_35" --use-local-env --cl-version 2010 -ccbin “C:\Program Files\Microsoft Visual Studio 10.0\VC\bin” -I"./" -I"…/…/common/inc" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -G --keep-dir “Debug” -maxrregcount=0 --machine 32 --compile -g -DWIN32 -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MTd " -o “Win32/Debug/template.cu.obj” “C:\ProgramData\NVIDIA Corporation\CUDA Samples\my Cuda\template\template.cu””已退出,返回代码为 2。

代码如下:

// includes, system
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include
#define F(x) (x^2-x+1)

// includes CUDA
#include <cuda_runtime.h>

// includes, project
#include <helper_cuda.h>
#include <helper_functions.h> // helper functions for SDK examples

////////////////////////////////////////////////////////////////////////////////
// declaration, forward
void runTest(int argc, char **argv);

extern “C”
void computeGold(float *reference, float *idata, const unsigned int len);

////////////////////////////////////////////////////////////////////////////////
//! Simple test kernel for device functionality
//! @param g_idata input data in global memory
//! @param g_odata output data in global memory
////////////////////////////////////////////////////////////////////////////////
device void FindAandB(float a,floatb)
{
int tid=threadIdx.x;
int bid=blockIdx.x;
float New_a=a+(b-a)/64(tid+bidblockDim.x);
float New_b=a+(b-a)/64(tid+bidblockDim.x+1);
if((New_a
New_a-New_a+1)
(New_b*New_b-New_b+1)<0)
{
a[0]=New_a;
b[0]=New_b;

}

}

global void
FindAnswer(float *g_A,float *g_B, float g_C)
{
int tid=blockIdx.x
blockDim.x+threadIdx.x;
float a=*g_A;
float b=*g_B;
if(tid==0)
{
do
{
FindAandB(g_A,g_B);
}
while((&g_A-&g_B)<10^6);
if(a==g_A[0]&&b==g_B[0])
{
printf(“在该范围内无解 \n”);
}
else
{
g_C[0]=(*g_A+*g_B)/2;
}
}
}

////////////////////////////////////////////////////////////////////////////////
// Program main
////////////////////////////////////////////////////////////////////////////////
int
main(int argc, char **argv)
{
runTest(argc, argv);
}

////////////////////////////////////////////////////////////////////////////////
//! Run a simple test for CUDA
////////////////////////////////////////////////////////////////////////////////
void
runTest(int argc, char **argv)
{
bool bTestResult = true;

printf(“%s Starting…\n\n”, argv[0]);

// use command-line specified CUDA device, otherwise use device with highest Gflops/s
int devID = findCudaDevice(argc, (const char **)argv);

StopWatchInterface *timer = 0;
sdkCreateTimer(&timer);
sdkStartTimer(&timer);

unsigned int num_threads = 32;
unsigned int mem_size = sizeof(float) *1;

// allocate host memory
float *h_A = (float *) malloc(mem_size);
float *h_B = (float *) malloc(mem_size);
// initalize the memory
h_A[0]=0;
h_B[0]=1;

// allocate device memory
float *d_A;
float *d_B;
checkCudaErrors(cudaMalloc((void **) &d_A, mem_size));
checkCudaErrors(cudaMalloc((void **) &d_B, mem_size));
// copy host memory to device
checkCudaErrors(cudaMemcpy(d_A, h_A, mem_size,
cudaMemcpyHostToDevice));
checkCudaErrors(cudaMemcpy(d_B, h_B, mem_size,
cudaMemcpyHostToDevice));

// allocate device memory for result
float *d_C;
checkCudaErrors(cudaMalloc((void **) &d_C, mem_size));

// setup execution parameters
dim3 grid(2, 1, 1);
dim3 threads(num_threads, 1, 1);

// execute the kernel
FindAnswer<<<grid,thread>>>(d_A, d_B,d_C);

// check if kernel execution generated and error
getLastCudaError(“Kernel execution failed”);

// allocate mem for the result on host side
float *h_C = (float *) malloc(mem_size);
// copy result from device to host
checkCudaErrors(cudaMemcpy(h_C, d_C, sizeof(float) * num_threads,
cudaMemcpyDeviceToHost));

sdkStopTimer(&timer);
printf(“Processing time: %f (ms)\n”, sdkGetTimerValue(&timer));
sdkDeleteTimer(&timer);
printf(“解为: \n”,h_C);

// compute reference solution
//float *reference = (float *) malloc(mem_size);
//computeGold(reference, h_idata, num_threads);

// check result
/* if (checkCmdLineFlag(argc, (const char **) argv, “regression”))
{
// write file for regression test
sdkWriteFile(“./data/regression.dat”, h_odata, num_threads, 0.0f, false);
}
else
{
// custom output handling when no regression test running
// in this case check if the result is equivalent to the expected soluion
bTestResult = compareData(reference, h_odata, num_threads, 0.0f, 0.0f);
}*/

// cleanup memory
free(h_A);
free(h_B);
free(h_C);
//free(reference);
checkCudaErrors(cudaFree(d_A));
checkCudaErrors(cudaFree(d_B));
checkCudaErrors(cudaFree(d_C));

cudaDeviceReset();
exit(bTestResult ? EXIT_SUCCESS : EXIT_FAILURE);
}

我想用并行计算求方程x^2-x+1=0的跟,使用templates模版修改后,就出现了这问题我不知道问题出在哪了

LZ您好,您表示编译出错,但是没有提供编译的错误信息,请您提供。(可以从VS的选项的项目和解决方案的的构建和运行选项里设置输出错误信息)

根据目测您的代码,有一些明显的错误先予以指出:

1:您的代码中使用“a^b”表示a的b次方,这是不对的,在c语言中,这表示a和b异或运算。因此可能发生了大量的奇怪问题。

2:您在#define F(x)的时候,使用了全角括号,这可能是一处错误。

3:您的kernel只有tid==0的线程干活,这可能有潜在的逻辑问题。

4:您的代码“while((&g_A-&g_B)<10^6)”中,对指针取地址然后用来计算,请确认此做法是合乎您本意的,以及后面的10^6依然是异或运算而非乘方运算。

目测暂且看出这几个问题,请LZ确认并修正这些问题,以及反馈具体的编译错误。

祝您调试愉快~

的确,编译的错误提示楼主你没有给出哦。。。

是哦,LZ快出来吧~

我把错误信息放在帖子的开头了,我调试时的问题是:双击错误信息,然后打开了CUDA5.0 targets文件,然后文件里很多函数下打了红色的波浪线,我猜测问题出在main函数最后退出时
您说的第一个问题:我不知道怎么表示a的b次方
第二个问题: 我照着您的改,宏定义可以用了,谢谢您
第三个问题:我也有这个顾虑,但是在GPU里不需要并行计算的部分,怎么办?
第四个问题:您说的对,我改成这样了while(fabs(*g_A-*g_B)<1e-6)

[attach]3024[/attach]

LZ您好:

a的b次方可以使用"double pow(double x, double y);“这个函数实现,需要math.h。如果仅仅是x的平方,那么也可以写为"x*x”。

如果您贴出的部分确实是主观需要单线程完成的,那么可以使用if tid==0这样的形式。
附送一个c语言函数的手册
[attach]3025[/attach]

根据您提供的截图

您在72行少一个分号,请补上。
下面一个提示只是表明已经异常退出了,无法判断问题。

下面多个intellisense的报错都可以无视,这个不是编译错误,之所以会出现和您项目配置有关,本版其他帖子有讨论,可供您参考。

祝您好运~

谢谢您的帮助,我的程序编译通过了

您就是人间的天使,太感谢您了,我现在不明白为什么我每次编译的时候都这么慢呢?

额,您过奖了,能帮您解决问题是我和其他版主的荣幸。

CUDA项目编译要过一遍NVCC的,确实比较慢,这个目前还没什么好办法。如果您使用更NB的CPU以及SSD硬盘的话,估计会快一些。

祝您好运!