zoukankan      html  css  js  c++  java
  • 关于CUDA 3.2 中的 printf 函数

    最近在对CUDA程序进行简单调试时,觉得可以尝试一下printf函数,来打印中间过程结果,以此辅助检查程序的正确性,这个是最初的想法。

    CUDA3.2当中引入的printf函数其实和ANSI C当中的printf相似,但是我感觉功能要弱不少。

     1,关于参数,在我的机器上(GTX460)一次打印超过4个参数时,就会报错,例如打印

         printf("%d , %d , %d , %d , %d\n",var1,var2,var3,var4,var5);

        去查手册,记不大清楚自己曾在哪里看到的printf,姑且留个疑问,//TODO

    2, 就是打印内容和host主机下打印结果不一致,这个很是恼人,开始我以为是程序逻辑出了错,翻来覆去写附属代码验证,后来将结果从显存倒腾至主存时,打印结果标明一切操作正常~~~~~泪奔。。。。要么是自己学艺不精,对于CUDA的printf实现需要深入学习,要么是NVIDIA的printf急需实现完整支持。。。要是后一种,那就是坑爹捏。。。。不过CUDA4已经出来,准备去查查看,应该是自己的问题。。这里也姑且留个疑问,//TODO

     3,  还是关于CUDA循环,我发现在二级循环下访存,总是会报错,神马Unspecified Launch Failure,

       例如,

        if(threadIdx.x == 0){
            for(int y=0; y<host_table_infos.state_number; y++){
                for(int x=0; x<1; x++){
                    state2 tmp_state_set = device_nfa_stt_16b_global[y*256+x];
                    printf("%2hd,%2hd ",tmp_state_set.state_1,tmp_state_set.state_2);
                }
                printf("\n");
            }
         }
        __syncthreads();

      当外层循环次数超过1次时(即host_table_infos.state_number > 1),打印结果开始错乱,大量陌生数字蹦出。。。甚是无语。。

       好吧,调整让外层就跑一次,内层循环次数超过1时,此时开始报错,伟大的unspecified launch failure。。。。现在还不确定错误原因,   待 吾 查查 手册 ~~~~

       : TODO

       这个问题大概是因为,cuda中的printf,他只有在几个特定时刻才会清空缓冲区,即flush,唯有此时才能输出,由于该时刻与CPU下的机制有些区别,因此,实际的输出会与自己的预期有差距。。。

  • 相关阅读:
    native2ascii转码工具的使用
    文件查找工具Everything小工具的使用
    sql中decode()重要函数使用
    java中随机生成汉字
    java中Random(long seed)方法与rRandom()方法的使用产生随机数
    WEB项目web.xml文件中classpath: 跟classpath*:使用的区别
    170809、 把list集合中的数据按照一定数量分组
    170808、生成为CVS文件
    170807、intellij idea maven集成lombok实例
    170804、使用Joda-Time优雅的处理日期时间
  • 原文地址:https://www.cnblogs.com/superniaoren/p/2078897.html
Copyright © 2011-2022 走看看