0

OpenCL で FFT を実行しようとしています。このようなカーネルでうまくいきました。

     __kernel void butterfly(__global float2* twid, __global float2* X,
                    const int n,}
     {

        /* Butterfly structure*/
     }

私はこのカーネルを何千回も呼んでいます。したがって、グローバル メモリへの READ/WRITE には時間がかかりすぎます。twid(float2) 配列は読み取られるだけで、操作されることはなく、配列 X は READ & WRITE タイプの配列です。

1.これに最も適したメモリのタイプはどれですか? 2. ローカル メモリを使用する場合、グローバル メモリにコピーせずに別のカーネルに引数として渡すことはできますか?

私はOpenCLの初心者です。

4

2 に答える 2

0

ローカル メモリはワーク グループ内でのみ使用できます。他のワーク グループからは見えず、他のカーネルからは使用できません。グローバルメモリと画像のみで、それらのことを行います。

ローカル メモリは、ワーク グループ内の同じグローバル メモリへの複数のアクセスを高速化するために使用されるユーザー管理のキャッシュと考えてください。

于 2014-03-25T05:46:50.430 に答える
0

小さなブロックに対して FFT を実行している場合は、プライベート メモリに収まる可能性があります。それ以外の場合は、Dithermaster が言ったように、ローカル メモリを使用します。

また、いくつかの FFT カーネルを実装しましたが、100% 確実でない限り、バタフライ スキームの使用を避けることを強くお勧めします。ベクトル化と適切なメモリ アクセス パターンにより、単純なスキーム (行列の乗算でさえも) により良い結果が得られる場合があります。バタフライ スキームは、順次処理用に最適化されています。GPU では、パフォーマンスが低下する場合があります。

于 2014-03-25T08:03:59.677 に答える