我是新手,刚开始学习。现在学着编写了一个矢量加法,不知道为什么当N大于80000就出错了。但是我在matlab平台下用cuda尝试80000个元素的矩阵相加是可以。我的显存有1G,应该是够的吧。
求高手指导一下
我用的是VS2010,CUDA 5.5.
#include “cuda_runtime.h”
#include “device_launch_parameters.h”
#include
using namespace std;
#define N 10000
global void add( int *a, int b, int c)
{
int tid=threadIdx.x+blockIdx.xblockDim.x;
while (tid<N)
{
c[tid]=b[tid]+a[tid];
tid+=blockDim.xgridDim.x;
}
}
int test( int *a, int *b, int *c)
{
for(int i=0;i<N;i++)
{
if (a[i]+b[i]!=c[i])
return 0;
}
return 1;
}
int main(void)
{
int i=0;
int a[N],b[N],c[N];
int dev_a,dev_b,dev_c;
for(i=0;i<N;i++)
{
a[i]=i,b[i]=ii;
}
cudaMalloc((void)&dev_a,Nsizeof(int));
cudaMalloc((void**)&dev_c,Nsizeof(int));
cudaMalloc((void**)&dev_b,N*sizeof(int));
cudaMemcpy(dev_a,a,Nsizeof(int),cudaMemcpyHostToDevice);
cudaMemcpy(dev_b,b,Nsizeof(int),cudaMemcpyHostToDevice);
add<<<128,128>>>(dev_a,dev_b,dev_c);
cudaMemcpy(c,dev_c,N*sizeof(int),cudaMemcpyDeviceToHost);
cudaFree(dev_a);
cudaFree(dev_b);
cudaFree(dev_c);
if (test(a,b,c))
cout<<“successful”<<endl;
else
cout<<“failed”<<endl;
system(“pause”);
return 0;
}