// SPDX-License-Identifier: BSD-3-Clause #include #include #include #define CHECK(x) do { cudaError_t e_=(x); if(e_!=cudaSuccess){printf("CUDA_ERROR %s L%d\n", cudaGetErrorString(e_), __LINE__); printf("BLK512 DONE FAIL\n"); return 1;} } while(0) __global__ void w512(int *out){ int i = (blockIdx.x*512 + threadIdx.x)*4; out[i]=i; out[i+1]=i+1; out[i+2]=i+2; out[i+3]=i+3; } __global__ void w256(int *out){ int i = (blockIdx.y*16 + threadIdx.y)*256 + blockIdx.x*16 + threadIdx.x; out[i]=i; } int main(void){ int *d2, *d1; const int n=16384; int *h=(int*)malloc(n*4); int bad1=0,bad2=0,i; setvbuf(stdout,NULL,_IONBF,0); CHECK(cudaMalloc(&d2, n*4)); CHECK(cudaMalloc(&d1, n*4)); CHECK(cudaMemset(d2,0,n*4)); CHECK(cudaMemset(d1,0,n*4)); w512<<<8,512>>>(d2); CHECK(cudaGetLastError()); CHECK(cudaDeviceSynchronize()); CHECK(cudaMemcpy(h,d2,n*4,cudaMemcpyDeviceToHost)); for(i=0;i>>(d1); CHECK(cudaGetLastError()); CHECK(cudaDeviceSynchronize()); CHECK(cudaMemcpy(h,d1,n*4,cudaMemcpyDeviceToHost)); for(i=0;i