2011-06-28 10 views
1

人!渡されたパラメータでタッチされたグローバル変数は使用できなくなります

私は、データの完全なデータを自分のカーネルに渡して、それを使って次のような難しさに遭遇しています(非常に削除されています): [編集:mac osx/xcode 3.2 on mac book pro;このコンパイルは、(a)は、ライン(b)は、単純な代入をマークされた行を実行した後

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!! 
    } 

] CPUのは明らかである、 "LLVMコンパイラは、関数のコンパイルに失敗しました" 与えます。

ただし、行(a)を実行しないと、行(b)は正常です。

これを使ってたくさんの手伝いをすると、引き渡されたパラメータを使用する代入文(a)のようになり、変数zXの将来のアクセスが崩れてしまいます。しかし、もちろん、私は計算結果をさらに下に使う必要があります。

私のヘルパー関数が必要とするため、ファイルレベルでzXとxdを宣言しました。

どのような考えですか? ありがとう! David

p.s.私は今登録されているので、私を助けてくれた最後の人には悲しいことにアップアップして回答を受け入れることができるように登録されています(登録に同じユーザー名を使用しましたが、古い投稿には投票できないようです。 )。

答えて

1

いいえ、そうではありません。

これは私自身の質問に対する「正しい」答えではないことを心から願っています。私は別のフォーラム(!しかしない同じ質問を尋ねた)以下で見つかった、と私はそれは私が何をしようとしているを参照していることを恐れています:

(引用)

あなたがやっています標準で禁止されているもの。 6.5章には、

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

というように、プログラムスコープ変数を変更することはできません。

(終了引用)

...よく、tcha !!!!何が驚くほど不都合な制限!私はそれの背後に推論があると確信しています。

[編集:Not At All All inconvenient!翌朝、新鮮なスタートがあった場合、実際には驚くほど簡単に回避できました。 (そして何アルコールません。)]

君たち&人形はすべての権利、これを知っていた、と私に教えて心を持っていなかった?...

関連する問題