cudaで計算するときは本当ですが、計算にもっと大きな数を使用するときは、
このリンクとしてTdrLevelを設定する必要があり
ます。しかし、tdrlevelを設定した後、これとして間違った結果が得られます。(-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080- 431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080-431602080)
どこに問題があるのかわからない。私のブロックのカウントは 512 で、各ブロックのスレッドのカウントは 1024 です。私は私の平均を見つけることを願っています。
that's my program code for fibunatchi program it work without tdrlevel but have above result by tdrlevel :
#include <stdio.h>
#include <cuda.h>
#include <dos.h>
__global__ void fibunat_array(float *a,int N )
{
for (int x=0; x< N; x += 1)
{
a[x]=0;
}
a[0]=1;a[1]=1;
for (int i=0; i< N; i += 1)
{
a[i+2]=a[i]+a[i+1];
}
}
int main( void )
{
time_t start,end;
double dif;
time ( &start );
float *a_h,*a_d;
const int N = 100;
size_t size = N * sizeof( float );
a_h = (float *)malloc( size );
cudaMalloc( (void **)&a_d, size );
cudaMemcpy( a_d, a_h, size, cudaMemcpyHostToDevice );
int block_size = 9<<1;
int n_blocks = (N+ block_size-1) /block_size;
square_array <<< n_blocks , block_size >>> ( a_d, N );
cudaMemcpy( a_h, a_d, sizeof( float ) * N, cudaMemcpyDeviceToHost );
for (int i = 0; i<N/3+10 ; i++)
printf( "%d ",(int)a_h[i] );
free( a_h );
cudaFree( a_d );
time ( &end );
dif=difftime(end,start);
printf ( "\n\n");
printf ( "total time for this calculate is : %d second\n\n",(int)dif);
}