Код: Выделить всё
#include
__global__ void testKernel(int *data, int n){
size_t tid = threadIdx.x + blockIdx.x * blockDim.x;
if(tid >= n) return;
int v = data[tid];
if(tid < 8) printf("%d: %d\n", tid, v);
}
int main(){
int n = 128;
auto h_data = new int[n];
for(int i = 0; i < n; i++) h_data[i] = i;
int *d_data;
cudaMalloc((void**)&d_data, sizeof(int) * n);
cudaMemcpy(d_data, h_data, sizeof(int) * n, cudaMemcpyHostToDevice);
testKernel(d_data, n);
cudaDeviceSynchronize();
cudaFree(d_data);
delete[] h_data;
return 0;
}
Код: Выделить всё
0: 0
1: 0
2: 0
3: 0
4: 0
5: 0
6: 0
7: 0
Код: Выделить всё
printf("%lu: %d\n", tid, v);
Код: Выделить всё
0: 0
1: 1
2: 2
3: 3
4: 4
5: 5
6: 6
7: 7
Кроме того, я попробовал тот же формат печати на процессоре следующим образом:
Код: Выделить всё
for(int i = 0; i < 8; i++){
size_t x = i;
printf("%d: %d\n", x, h_data[i]);
}
/*
0: 0
1: 1
2: 2
3: 3
4: 4
5: 5
6: 6
7: 7
*/
Подробнее здесь: https://stackoverflow.com/questions/791 ... uda-printf
Мобильная версия