【问题标题】:printf makes error and don't show the resultprintf 出错并且不显示结果
【发布时间】:2013-06-26 17:35:35
【问题描述】:

opencl 中的 printf 有问题 这是我的代码的一部分:

clGetEventProfilingInfo(timing_event, CL_PROFILING_COMMAND_START,
sizeof(time_start), &time_start, NULL);
clGetEventProfilingInfo(timing_event, CL_PROFILING_COMMAND_END,sizeof(time_end),
&time_end, NULL);
total_time = time_end - time_start;
printf("\nAverage Time In Nanoseconds  = %lu\n" , total_time );

我已经声明了这样的变量:

cl_event timing_event;
cl_ulong time_start, time_end;
cl_ulong total_time;

但是当我编译程序时 mingw32-gcc 会出现这个错误:

format %lu expects argument of type 'long unsigned int' but argument 2 has type 'cl_ulong' 
[-Wformat]

并且 *.exe 不运行。那么有什么机构可以帮助我吗?我对这个错误很困惑!!!

【问题讨论】:

    标签: printf opencl


    【解决方案1】:

    cl_ulong 在所有平台上都是 64 位无符号的,以匹配 OpenCL C 类型的 ulong。它可能与 C 类型的“unsigned long”不同。在 printf 中尝试 %llu。

    【讨论】:

    • 嗨,我尝试使用 %llu,现在它出现了这个新错误:(格式中的未知转换类型字符 'l')
    【解决方案2】:

    cl_ulong 在 cl_platform 中定义为:

    typedef unsigned __int64 cl_ulong;
    

    所以 %llu 是正确的。要使 %llu 与 mingw 一起使用,请在包含文件之前添加以下行:

    #define __USE_MINGW_ANSI_STDIO 1
    

    如果没有此定义,您必须使用非标准的 Microsoft 等效项 %I64u。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      相关资源
      最近更新 更多