2011-06-28 57 views
1

夥計們!我將一個結構完整的數據傳遞給我的內核,我遇到了以下使用它的困難(非常簡單): [編輯:在mac book pro上的mac osx/xcode 3.2;這個編譯顯然是CPU]傳入參數觸摸的全局變量變得不可用

typedef struct 
    { 
    float xoom; 
    int sizex; 
    } varholder; 

float zX, xd; 

__kernel void Harlan(__global varholder * vh) 
    { 
    int X = get_global_id(0), Y = get_global_id(1); 

    zX = ((X - vh->sizex/2)/vh->xoom + vh->sizex/2); // (a) 

    xd = zX;            // (b) BOOM!! 
    } 

執行線(a),線標記(b)中,一個簡單的賦值後,給出 「LLVM編譯器無法編譯的函數」。但是,如果我們不執行第(a)行,那麼第(b)行很好。

因此,通過用這個函數繞過LOT,看起來好像它是賦值語句(a),它使用傳入的參數來擾亂變量zX的未來訪問。但是,我當然需要能夠使用計算結果進一步下線。

我有zX和xd在文件級別聲明,因爲我的幫助函數需要它們。

有什麼想法? 謝謝!大衛

p.s.我現在已經註冊了,所以能夠upvote和接受答案,我很遺憾無法爲幫助我的最後一個人做些什麼(使用相同的用戶名進行註冊,但似乎無法對舊帖子投票;對不起! )。

回答

1

不,不是這樣!

我真誠地希望這不是對我自己的問題「正確」的答案。我在另一個論壇找到(雖然同樣的問題問!)以下,恐怕它指的是什麼,我試圖做的:

(報價)

你做標準禁止的東西。 6.5節說:

'All program scope variables must be declared in the __constant address space.' 

換句話說,程序範圍變量不能是可變的。

(完報價)

...好,TCHA !!!!什麼驚人不便的限制!我相信這背後有推理。

[編輯:一點都不方便!事實上,在第二天早上重新開始的時候,它實際上非常容易解決。 (和無酒精。)

你們&娃娃都知道這一點,正確的,並沒有足夠的心臟告訴我?...