2011-04-06 77 views
1

我在启用了printf扩展的ATI卡上使用OpenCL。我写了一个函数来打印变量:传递给函数的char *自变量带有ATI OpenCL printf扩展问题

void printVar(constant char* name, float var) 
{ 
    printf("%s: %f\r\n", name, var); 
} 

此代码的工作时,作为普通的C编译如预期,但如果我的OpenCL与

printVar("foo", 0.123); 

调用它的结果总是有些随意char后跟0.123而不是“foo:0.123”。我猜编译器在识别char *字符串时遇到了问题,是否有解决方法或修复方法,以便我可以使用该函数?

+0

我也得到了这种行为。值得注意的是,如果内核运行在我的CPU上(使用AMD APP SDK 2.3),而不是在我的HD 5870上运行,那么它的工作方式和预期一样。我想这可能是GPU上的缺陷或printf的未记录限制。 – Quantumboredom 2011-04-06 18:52:37

+0

为了完整:我刚刚阅读了AMD APP SDK 2.4开发人员发行说明,他们声明printf目前不支持打印字符串。 – Quantumboredom 2011-04-07 09:18:07

回答

0

正如我在我的评论中提到的,我也得到了相同的行为,但是我可以为你展示的用例提出一个简单的解决方法,即。当编译时已知字符串时,我们可以使用define语句来代替:

#define PRINTVAR(N,X) (printf(N ": %f\r\n", X)) 
+0

完美地工作。非常感谢。 – 2011-04-06 20:03:52