CUDAレジスタリソーステスト実験
2896 ワード
CUDAレジスタリソーステスト実験
前言
最近エンコーディングでエラーが見つかりました:an illegal memory access was encountered.newから出たグローバルメモリを使いすぎたとき.まず、このエラーの原因は、メモリが境界を越えているか、複数のメモリ要求が同じメモリにアクセスしているためです.このため、ブロックが申請できるグローバルメモリが限られているため、このエラーが発生したことを実験的に検証しました.デバイス:GTX 1050 Ti
じっけんコード
/*
*
*
* by jieeeeeeeeeeeeee
*/
#include
#define safeCall(err) __safeCall(err, __FILE__, __LINE__)
inline void __safeCall(cudaError err, const char *file, const int line)
{
if (cudaSuccess != err) {
fprintf(stderr, "safeCall() Runtime API error in file , line %i : %s.
", file, line, cudaGetErrorString(err));
exit(-1);
}
}
__global__ void kerenl(){
int size = 6.4*1024/sizeof(float);
float* a = new float[size];
for(int i = 0;iprintf("a: %f
",a[100]);
}
int main(){
kerenl<<<1,1024>>>();
safeCall( cudaGetLastError() );
safeCall(cudaDeviceSynchronize());
return 0;
}
int size=6.5*1024/sizeof(float);そしてkerenl<<11024>>();エラーが発生しました:an illegal memory access was encountered.
int size=6.4*1024/sizeof(float);そしてkerenl<<11024>>();に設定されています.
gird数を2に増やすとkerenl<<21024>>();
int size=2.5*1024/sizeof(float);そしてkerenl<<21024>>();エラーが発生しました:an illegal memory access was encountered.
int size=2.1*1024/sizeof(float);そしてkerenl<<21024>>();に設定されています.