这个报错是为什么呢?

初学CUDA,按照《程序员》上的一篇文章运行程序,结果很简单的程序报错了,关键报的错误我还看不懂,各位前辈帮我看看吧
错误如下
CUDAWinApp2.exe 中的 0x00401083 处未处理的异常: 0xC0000005: 写入位置 0x003b6000 时发生访问冲突

这是什么意思,应该如何改呢?为什么会有这样的错误呢?

程序如下

#include <stdio.h>
#include <assert.h>
#include <cuda.h>
int main(void)
{
float *a_h,*b_h;
float *a_d,b_d;
int N=14;
int i;
a_h=(float
)malloc(sizeof(float)N);
b_h=(float
)malloc(sizeof(float)*N);
cudaMalloc((void **)&a_d,sizeof(float)*N);
cudaMalloc((void **)&b_d,sizeof(float)*N);
for (i=0;1<N;i++){
a_h[i]=10.f+i;
b_h[i]=0.f;
}
cudaMemcpy(a_d,a_h,sizeof(float)*N,cudaMemcpyHostToDevice);
cudaMemcpy(b_d,a_d,sizeof(float)*N,cudaMemcpyDeviceToDevice);
cudaMemcpy(b_h,b_d,sizeof(float)*N,cudaMemcpyDeviceToHost);

for (i=0;1<N;i++)
{
assert(a_h[i]==b_h[i]);
}
free(a_h);free(b_h);
cudaFree(a_d);cudaFree(b_d);
}

按照我的理解给你修改了下
数据经过host传到device
然后device之间传递数据
最后传回host
验证下数据能否正确传输?

#include <stdio.h>
#include <assert.h>
#include <cuda.h>
int main(void)
{
float *a_h,*b_h;
float *a_d,b_d;
int N=14;
int i;
a_h=(float
)malloc(sizeof(float)N);
b_h=(float
)malloc(sizeof(float)*N);
cudaMalloc((void **)&a_d,sizeof(float)*N);
cudaMalloc((void **)&b_d,sizeof(float)*N);
for (i=0;i<N;i++)
{
a_h[i]=10.0f+i;
b_h[i]=10.0f;
}
cudaMemcpy(a_d,a_h,sizeof(float)*N,cudaMemcpyHostToDevice);
cudaMemcpy(b_d,a_d,sizeof(float)*N,cudaMemcpyDeviceToDevice);
cudaMemcpy(b_h,b_d,sizeof(float)*N,cudaMemcpyDeviceToHost);

for (i=0;i<N;i++)
{
if(a_h[i]==b_h[i])
{
printf(“data[%d] is yes!\n”,i);
}
else
{
printf(“data[%d] is no!\n”,i);
}
}
free(a_h);
free(b_h);
cudaFree(a_d);
cudaFree(b_d);
}

[ 本帖最后由 wscuiqiu 于 2010-11-2 17:29 编辑 ]

真的错的位置好像就是这里,我也不知道什么意思啊,书上就是这样写的啊

红色那个你看看吧。。我就不说错在哪里了。。
而且发现个问题
【i】貌似不显示出来啊

谢谢wscuiqiu ,但是还是不对啊,改的那两行报错a value of
我感觉a_h[i]=10.0f+i是每个不同的地方赋值,而a_h=10.0f+i;是都赋值到一个地方了吧

这个论坛赋值之后不显示【i】,a_h【i】=10.0f+i,b_h【i】=10.0f。。
下面的a_h【i】==b_h【i】相同。。

可以使用插入代码功能

风辰可以说的详细点吗?主要我初学,有点看不懂,谢谢啦