0

OpenCL を使用してヒストグラム ツールの例をプログラムしようとしています。まず、各ビンをアトミックにインクリメントすることに興味がありました。次のカーネルコードを思いつきました:

__kernel void Histogram(
    __global const int* input, 
    __global int* histogram, 
    int numElements) {
    // get index into global data array
    int iGID = get_global_id(0);

    // bound check, equivalent to the limit on a 'for' loop
    if (iGID >= numElements) {
        return;
    }

    if( iGID < 100 ) {
                // initialize histogram
        histogram[iGID] = 0;
    }

    barrier(CLK_GLOBAL_MEM_FENCE);

    int bin = input[iGID];

    atomic_inc(&histogram[bin]);
}

しかし、出力ヒストグラムはすべてのビンでゼロです。何故ですか?さらに、最後の行に printf(" ") を配置すると、本当に奇妙なことが起こります。突然、それは機能します。私は完全に道に迷っています。なぜこれが起こるのか誰か分かりますか?

PS私はすべての拡張機能を有効にしました

4

1 に答える 1

2

私は自分で問題を解決しました。

何も問題が解決しなかった後、CLDevice を CPU に変更しようとしました。すべてが想定どおりに進みました(残念ながら非常に遅い:D)。しかし、これはコードの問題ではなく、OpenCL インフラストラクチャの問題である可能性があるという考えを与えてくれました。

AMD の OpenCL プラットフォームを更新したところ、すべてが機能するようになりました。

あなたが私の問題について考えた場合に備えて、ありがとう。

于 2013-02-24T19:30:37.073 に答える