GPU 上での複素数の処理
MATLAB® の複素数を扱う関数や複素数を返す関数の多くは、GPU を使用して高速化できます。このページでは、複素数を扱う場合やデータが gpuArray である場合に認識しておく必要がある条件について説明します。代わりに MATLAB で実行されるカスタム CUDA® コードで複素数データを扱う場合の詳細については、CUDA コードを含む MEX 関数の実行を参照してください。
GPU 上での複素数の処理条件
GPU で実行される関数の出力が複素数になる可能性がある場合は、関数 complex を使用して、明示的に入力引数を複素数として指定しなければなりません。これは、gpuArray オブジェクトに対して直接演算を行う関数と、arrayfun を使用して gpuArray データに対して演算を行う関数に適用されます。
たとえば、G が負の要素を含む gpuArray である sqrt(G) を正しく計算するには、G を複素数として指定します。
x = [-1 0 1]; G = gpuArray(complex(x)); rootG = sqrt(G)
0.0000 + 1.0000i 0.0000 + 0.0000i 1.0000 + 0.0000i
結果が複素数データからなる gpuArray で、すべての虚数部がゼロの場合、虚数部は保持されてデータは複素数のままになります。これにより、sort や isreal などを使用してデータに対して演算を行う際に、不要な計算が実行される可能性があります。
出力が複素数になる可能性がある関数を arrayfun を使用して適用する場合は、arrayfun の呼び出し内で関数入力を複素数として指定します。
x = [-1 0 1]; G = gpuArray(x); A = arrayfun(@(p) sqrt(complex(p)),G)
0.0000 + 1.0000i 0.0000 + 0.0000i 1.0000 + 0.0000i
複素数データを返す関数
次の表に、複素数データを返す可能性がある関数を、出力が実数となる入力範囲と共に記載します。