Ich muss mit einer Float2-Matrix als 1D-Array arbeiten. Ich wollte ein paar Dinge überprüfen, und ich habe diesen Code geschrieben:Float2-Matrix (als 1D-Array) und CUDA
#include <stdio.h>
#include <stdlib.h>
#define index(x,y) x+y*N
__global__ void test(float2* matrix_CUDA,int N)
{
int i,j;
i=blockIdx.x*blockDim.x+threadIdx.x;
j=blockIdx.y*blockDim.y+threadIdx.y;
matrix_CUDA[index(i,j)].x=i;
matrix_CUDA[index(i,j)].y=j;
}
int main()
{
int N=256;
int i,j;
//////////////////////////////////////////
float2* matrix;
matrix=(float2*)malloc(N*N*sizeof(float2));
//////////////////////////////////////////
float2* matrix_CUDA;
cudaMalloc((void**)&matrix_CUDA,N*N*sizeof(float2));
//////////////////////////////////////////
dim3 block_dim(32,2,0);
dim3 grid_dim(2,2,0);
test <<< grid_dim,block_dim >>> (matrix_CUDA,N);
//////////////////////////////////////////
cudaMemcpy(matrix,matrix_CUDA,N*N*sizeof(float2),cudaMemcpyDeviceToHost);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%d %d, %f %f\n",i,j,matrix[index(i,j)].x,matrix[index(i,j)].y);
}
}
return 0;
}
Ich war wie für einen Ausgang warten:
0 0, 0 0
0 1, 0 1
0 2, 0 2
0 3, 0 3
...
Aber das, was ich finde, ist:
0 0, -nan 7.265723657
0 1, -nan 152345
0 2, 25.2135235 -nan
0 3, 52354.324534 24.52354234523
...
That bedeutet, dass ich einige Probleme mit der Speicherzuweisung habe (nehme ich an), aber ich kann nicht finden, was mit meinem Code falsch ist. Könnte mir jemand helfen?
[Überprüfen Sie die CUDA fordert Fehler] (http://stackoverflow.com/questions/14038589/what-is-the-canonical-way-to-check-für-Fehler-Verwendung der-Cuda-Laufzeit-API. – tera