我的一个程序不正常,逐个语句删除,累死我了,最后剩下如下这个最简单的cuda程序部分。让我很奇怪的是,一个变量是否使用,居然会影响我的程序结果。这到底是怎么回事啊,我要崩溃了:dizzy:
我是在windows xp上,使用vc 2008 、 cuda 5.x(前几天刚升级的)、Geforce 9800 GT(计算能力1.1的老显卡,没办法,穷啊)。编译命令行只是 nvcc why_thread2.cu
#include <stdio.h>
#include <stdlib.h>
global void why(int picnum, int dev_matchPair)
{
int i=threadIdx.x + blockIdx.xblockDim.x;
int j=threadIdx.y + blockIdx.yblockDim.y;
dev_matchPair[j+ipicnum]=12;
}
int main(void)
{
int picnumR=36, TotalPtL=31199;
int matchedPointNum=0;
int i=0, j=0;
int *host_matchPair=NULL;
int *dev_matchPair=NULL;
int *dev_TotalPointNumLastPicR=NULL;
host_matchPair=(int )calloc(TotalPtLpicnumR, sizeof(int));
for (i=0;i<TotalPtL;i++)
for(j=0;j<picnumR;j++)
host_matchPair[j+ipicnumR]=-1;
cudaMalloc((void**)&dev_matchPair, TotalPtLpicnumRsizeof(int));
cudaMemcpy(dev_matchPair, host_matchPair,
TotalPtLpicnumR*sizeof(int),
cudaMemcpyHostToDevice) ;
//如果注释掉下面这句分配dev_TotalPointNumLastPicR,最后输出matchedPointNum = 0
//如果有这一句,最后输出matchedPointNum = 31199
cudaMalloc((void**)&dev_TotalPointNumLastPicR, picnumR* sizeof(int)); //这句到底怎么了??
why<<<2000,16>>>(picnumR, dev_matchPair);
cudaMemcpy(host_matchPair, dev_matchPair,
TotalPtLpicnumRsizeof(int),
cudaMemcpyDeviceToHost) ;
for (i=0;i<TotalPtL;i++)
for(j=0;j<picnumR;j++)
if (host_matchPair[j+i*picnumR]!=-1)
matchedPointNum++;
printf(“matchedPointNum = %i\n”, matchedPointNum);
free(host_matchPair);
cudaFree(dev_matchPair);
cudaFree(dev_TotalPointNumLastPicR);
}