Microsoft C++ 异常: 内存位置 0x0012f278 处的 cudaError

wts_net 2009-06-16 10:23:41
如题,我的程序出现了如上的问题,这是那里出错了呢?有知道的大虾请不吝赐教!
...全文
536 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangwenjianqin 2010-04-20
  • 打赏
  • 举报
回复
我也出现了这个问题,你解决没?
zhao_wei2003zj 2010-01-06
  • 打赏
  • 举报
回复
是的防守对方
wts_net 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 l7331014 的回复:]
程序已经有错误了.无所谓结果不结果.
[/Quote]
请问能帮我看一下这个代码有什么错误吗?怎么每次输出newpop中的路径,总是只有前两条路径为非0,后面的为0.
struct Gene
{
int num;
float x;
float y;
};
struct Chrom
{
Gene chrom_gene[CityNumber]; //染色体(到各城市去的顺序)
float varible; //路程总开销

};

__global__ void immnueoperate(Chrom *mutationnewpop,
Chrom *newpop,
Chrom *stVac,
float *g_imp,

int *g_vacpos

)
{
unsigned int tid = threadIdx.x;
unsigned int index = blockIdx.x * blockDim.x + threadIdx.x;

__shared__ float s_imp[256];
__shared__ int s_vacpos[256];
__shared__ float s_accp[256];

CUT_BANK_CHECKER(s_imp , threadIdx.x) = g_imp[blockIdx.x * blockDim.x + threadIdx.x];
CUT_BANK_CHECKER(s_vacpos , threadIdx.x) = g_vacpos[blockIdx.x * blockDim.x + threadIdx.x];


float k = s_imp[threadIdx.x];
Chrom chr ;
Chrom chrtemp;
for(int i = 0; i < CityNumber ;i++)
{
chr.chrom_gene[i] = mutationnewpop[blockIdx.x * blockDim.x + threadIdx.x].chrom_gene[i];
chrtemp.chrom_gene[i] = mutationnewpop[blockIdx.x * blockDim.x + threadIdx.x].chrom_gene[i];
}
chr.varible = mutationnewpop[blockIdx.x * blockDim.x + threadIdx.x].varible;

chrtemp.varible = mutationnewpop[blockIdx.x * blockDim.x + threadIdx.x].varible;


if(k < pim)
{
Gene temp1[CityNumber];
int vacpos = s_vacpos[tid];
int gene1 = stVac[vacpos].chrom_gene[0].num;
int gene2 = stVac[vacpos].chrom_gene[1].num;
Gene gen = stVac[vacpos].chrom_gene[1];
int pick1 = 0,pick2 = 0;
int u = 0;//v,m,n,t,q,r,s,y,w;
float temp = chr.varible;
for(int j = 0 ;j < CityNumber ; j++)
{
if(gene1 == chr.chrom_gene[j].num )
{
pick1 = j;
}
if(gene2 == chr.chrom_gene[j].num )
{
pick2 = j;
}
}
__syncthreads();
if(pick1<pick2)
{
//after move elements
for(int i = pick2-1 ;i > pick1;i--)
{
chr.chrom_gene[i+1] = chr.chrom_gene[i];
}
chr.chrom_gene[pick1+1] = stVac[vacpos].chrom_gene[1];
}
else
{
//before move
for(int i = pick2 ; i < pick1 ; i++)
{
chr.chrom_gene[i] = chr.chrom_gene[i+1];
}
chr.chrom_gene[pick1] = stVac[vacpos].chrom_gene[1];
}

float sum =0;

for(int i =0;i< CityNumber-1;i++)
{
Gene cid = chr.chrom_gene[i];
Gene cnextid = chr.chrom_gene[i+1];

sum +=sqrt(pow((cid.x-cnextid.x),2)+pow((cid.y-cnextid.y),2));
}
Gene q,s;
q =chr.chrom_gene[0];
s =chr.chrom_gene[CityNumber-1];
sum += sqrt(pow((q.x-s.x),2)+pow((q.y-s.y),2));
chr.varible = sum;

if(chr.varible < chrtemp.varible)
{
for(int i = 0;i < CityNumber;i++)
{
newpop[index].chrom_gene[i] = chr.chrom_gene[i];
}
newpop[index].varible = chr.varible;
}
else
{
for(int i = 0;i < CityNumber;i++)
{
newpop[index].chrom_gene[i] = chrtemp.chrom_gene[i];
}
newpop[index].varible = chrtemp.varible;
//newpop[index].fitness = chrtemp.fitness;
}

}
else
{
for(int i = 0;i < CityNumber;i++)
{
newpop[index].chrom_gene[i] = chr.chrom_gene[i];
}
newpop[index].varible = chr.varible;
//newpop[index].fitness = chr.fitness;
}


__syncthreads();
}
  • 打赏
  • 举报
回复
程序已经有错误了.无所谓结果不结果.
wts_net 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 l7331014 的回复:]
引用 1 楼 wts_net 的回复:
引用楼主 wts_net 的帖子:
如题,我的程序出现了如上的问题,这是那里出错了呢?有知道的大虾请不吝赐教!


补充一下问题:一开始把数据拷贝到device中然后进行运算,运算过程中没有报错,但是输出结果都为0,在下面的调试栏中出现了Microsoft C++ 异常: 内存位置 0x0012f278 处的 cudaError 这样的提示,有知道问题所在地的请指导一下!



HOST程序越界.单步跟踪吧.
[/Quote]
在host端输出结果中有几个结果不为0,但是大部分为0。
wts_net 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 wts_net 的帖子:]
如题,我的程序出现了如上的问题,这是那里出错了呢?有知道的大虾请不吝赐教!
[/Quote]
补充一下问题:一开始把数据拷贝到device中然后进行运算,运算过程中没有报错,但是输出结果都为0,在下面的调试栏中出现了Microsoft C++ 异常: 内存位置 0x0012f278 处的 cudaError 这样的提示,有知道问题所在地的请指导一下!
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wts_net 的回复:]
引用楼主 wts_net 的帖子:
如题,我的程序出现了如上的问题,这是那里出错了呢?有知道的大虾请不吝赐教!


补充一下问题:一开始把数据拷贝到device中然后进行运算,运算过程中没有报错,但是输出结果都为0,在下面的调试栏中出现了Microsoft C++ 异常: 内存位置 0x0012f278 处的 cudaError 这样的提示,有知道问题所在地的请指导一下!
[/Quote]

HOST程序越界.单步跟踪吧.
darkstorm2111203 2009-06-16
  • 打赏
  • 举报
回复
一般是访问了不该访问的地方

589

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧