このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
bsxfun
gpuArray の 2 つの項をシングルトン拡張する関数
説明
例
入力引数
出力引数
ヒント
GPU で特定の関数を呼び出すために最初に
bsxfun
を呼び出す時点では、GPU 実行のための関数の設定に若干のオーバーヘッド時間が発生します。同じ関数を指定したその後のbsxfun
の呼び出しでは、処理速度が向上します。入力配列の大きさが 1 でない次元は他の入力配列の大きさが 1 でない次元と一致しなければなりません。つまり、引数
A
、B
などの対応する次元はサイズが互いに等しいか、1 でなければなりません。入力配列の次元がシングルトン (1 と等価) である場合、bsxfun
は常にシングルトン拡張を使用します。大きさが 1 の次元に沿って配列を複製し、その次元のサイズを最大の他の配列と一致させます。一方の入力配列の 1 つの次元の大きさが 1 で、もう一方の引数配列の対応する次元がゼロである場合、bsxfun
は実質的に大きさが 1 の次元をゼロに減じます。出力配列
C
の各次元は、非ゼロ サイズの次元では入力配列のうち最大の配列と同じサイズに、それ以外ではゼロになります。次のコードは、サイズ 1 の次元を、他の引数内の対応する次元のサイズと一致させるためにどのように増減しているかを示します。R1 = rand(2,5,4,'gpuArray'); R2 = rand(2,1,4,3,'gpuArray'); R = bsxfun(@plus,R1,R2); size(R)
2 5 4 3
R1 = rand(2,2,0,4,'gpuArray'); R2 = rand(2,1,1,4,'gpuArray'); R = bsxfun(@plus,R1,R2); size(R)
2 2 0 4
bsxfun
によりサポートされている演算は厳密に要素単位であり、各要素の各計算は他の要素と独立して実行されるため、一定の制約が適用されます。入出力配列の形状やサイズは変更できません。
rand
などの関数は、サイズ指定をサポートしていません。乱数の配列は、要素ごとに独立したストリームを有しています。
MATLAB の
bsxfun
と同様に、行列のべき乗、乗算および除算 (^
、*
、/
、\
) では要素単位の計算のみが実行されます。入出力配列 (
cat
、reshape
など) のサイズまたは形状を変更する演算はサポートされていません。読み取り専用のインデックス付け (
subsref
) と、入れ子関数の中から親 (外側) 関数ワークスペースの変数へのアクセスがサポートされています。GPU で関数を評価する前に、その関数内にある変数にインデックスを付けることができます。入れ子関数の中からこのような変数を代入したりそれをsubsasgn
インデックス化することは、サポートされません。サポートされている使用法の例は、GPU でのステンシル演算を参照してください。無名関数はその親関数のワークスペースにはアクセスできません。
サポートされている関数のオーバーロードは許可されません。
コードからスクリプトを呼び出すことはできません。
代入されていない計算結果を格納する
ans
変数はありません。必ずすべての計算結果を明示的に変数に代入します。サポートされていない言語機能として、永続変数またはグローバル変数、
parfor
、spmd
、switch
、try
およびcatch
が挙げられます。P コード ファイルに、gpuArray データがある
bsxfun
の呼び出しを含めることはできません。
バージョン履歴
R2012a で導入