2011-04-06 20 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