关于您的第二个问题:
从计算能力2.0的GPU开始,支持在kernel内使用printf()函数,您可以通过在kenrel内printf()输出一些信息来检验您的代码运行情况,有没有BUG等。
需要说明的是:
1:各个线程的printf顺序是不被保证的,也就是说,这个是乱序的。
2:您需要在整个程序结束之前添加适当的同步,以保证printf()的正确输出。如在main()函数return之前添加cudaDeviceReset()。
3:您可以使用kernel内部的printf()作为您调试的一个辅助手段,但是推荐您将nsight等调试工具作为主力手段。在某些情况下,即便printf()看上去输出的正确的,您的kernel也可能运行不正确乃至已经挂掉。
4:您的代码在编译的时候,需要指定合适的编译参数。如果按照1.x计算能力编译,将无法在kernel中使用printf。
至于您说的“宏”的情况,请您补充相关问题描述。
大致如此,祝您好运~ |