gpt4 book ai didi

cuda - 无法在cuda内核函数中使用printf

转载 作者:行者123 更新时间:2023-12-02 09:05:57 31 4
gpt4 key购买 nike

似乎printf在cuda代码的内核中不起作用

#include "Common.h"
#include<cuda.h>
#include <stdio.h>

__device__ __global__ void Kernel(float *a_d , float *b_d ,int size)
{
int idx = threadIdx.x ;
int idy = threadIdx.y ;
//Allocating memory in the share memory of the device
__shared__ float temp[16][16];

//Copying the data to the shared memory
temp[idy][idx] = a_d[(idy * (size+1)) + idx] ;


printf("idx=%d, idy=%d, size=%d\n", idx, idy, size);


for(int i =1 ; i<size ;i++) {
if((idy + i) < size) { // NO Thread divergence here
float var1 =(-1)*( temp[i-1][i-1]/temp[i+idy][i-1]);
temp[i+idy][idx] = temp[i-1][idx] +((var1) * (temp[i+idy ][idx]));
}
__syncthreads(); //Synchronizing all threads before Next iterat ion
}
b_d[idy*(size+1) + idx] = temp[idy][idx];
}

编译时,它说:

 error: calling a host function("printf") from a __device__/__global__ function("Kernel") is not allowed

cuda版本为4

最佳答案

引用CUDA编程指南“Formatted output is only supported by devices of compute capability 2.x and higher”。有关更多信息,请参阅编程指南。

计算能力<2.x的设备可以使用cuPrintf。

如果您使用的是 2.x 及更高版本的设备并且您正在尝试使用 printf,请确保您已指定 arch=sm_20(或更高版本)。默认值是 sm_10,它没有足够的功能来支持 printf。

NVIDIA 为 CUDA 提供了三种源代码级调试器。您可能会发现这些比 printf 对于检查变量更有用。 - Nsight Visual Studio 版 CUDA 调试器 - Nsight Eclipse 版 CUDA 调试器 - cuda-gdb

关于cuda - 无法在cuda内核函数中使用printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13315787/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com