3

私は、Matlab R2012b の Parallel ツールボックスを初めて使用し、次の問題を解決する最善の方法は何かと考えていました。

画像内のすべてのピクセルの近傍を分析しています。これは、並列化の非常に良いケースです。しかし、私はそれを機能させることができないようです。

この問題の主な問題は、いくつかの「定数」引数を関数に渡す必要があることです。そのため、関数はすべてのピクセルに対して呼び出す必要がありますが、周囲のピクセルにもアクセスする必要があります。(画像をある種の定数パラメータと分析するピクセルの座標として渡すことをお勧めします)。

出力は、ピクセルごとに 1 つの値です。

現時点で私はこれを持っています:

z2 = arrayfun(@(x) analyze(x, image, const1, ...), gpuArray(1:m*n));

ここで、x はダミー変数、image は画像の輝度値を含む 2D マトリックス、const1 (およびその他) は関数定数 (分析ウィンドウのサイズなど) です。m と n は、画像の寸法のサイズです。

ただし、このエラーが発生します

gpuArray/arrayfun の使用エラー 機能ワークスペースの使用はサポートされていません。

何か案は?

乾杯、ルーベン

4

2 に答える 2

2

残念ながら、これはR2012bのParallelComputingToolboxではサポートされていません。arrayfunのgpuArrayバージョンは、現在、無名関数ハンドルへの定数データのバインドをサポートしていません。Arrayfun引数は直接渡す必要があり、すべてスカラーまたは同じサイズである必要があります。

定数引数をバインドできる場合は、次に、現在それらにインデックスを付けることができない(またはそれらに対して非スカラー演算を実行できない)ことに気付くでしょう。

おそらく、CONV2やFILTER2などのサポートされているルーチンを使用してアルゴリズムを構築できる可能性があります。

于 2012-11-06T07:24:35.063 に答える
0

これは非常に古い投稿ですが、同様の問題に苦しんでいたので、これについてわかったことを共有したいと思いました。

の呼び出しを関数内に置くと、定数配列にアクセスできる入れ子関数として関数arrayfunを実装できる場合があります。analyzeただし、ネストされた関数内ではanalyze完全な配列を他の関数に渡すことができないため、コードを書き直すのにかなりの労力が必要になる場合があります。つまり、定数の単一のインデックス付き配列エントリのみを使用するようにすべてを書き直す必要があります。たとえば、配列に対する for ループ内。したがって、などの関数のすべての呼び出しは機能sizeせず、外部に移動する必要がありますanalyze(少なくとも、これは私が使用している Matlab2015b の場合です)。これがどのように行われるかの例です(私のものではありません):

https://devblogs.nvidia.com/high-performance-matlab-gpu-acceleration/

一番、

ハンス・マルタン

于 2019-04-26T12:45:45.707 に答える