Main Content

arrayfun

关数gpu上上配列の各要素にするするする

说明

メモ

この関数の動作は MATLAB®关数arrayfuncpu gpuではなくではなくではなく,,关数のではなくではなくではなく行われる点点でで异なり异なりまだまだまだまだまだ。。。。。。。上上上上にははははははははgpuででされ。すべての出力引数はははははオブジェクトオブジェクトオブジェクトオブジェクト收集を使用して gpuArray データを取得できます。

b= arrayfun(FUN,,,,一个は,关数FUNを gpuArray一个の各に适用ます。次にarrayfunFUNの出力を連結して gpuArraybの出力生成します。b一个と同じサイズ,b(i,j,...) = FUN(A(i,j,...))です。入力引数FUN1つのつの引数を受け入れ,スカラー値を返す返す返す关数关数关数关数ハンドルですですFUNは,一个の要素と同じ呼び出されます。

arrayfunでのbの要素顺序指定たり特定顺序でされる要素に依存依存したりするすることはできでき

b= arrayfun(FUN,a1,...,an)は,b(i,j,...)=有趣(a1(i,j,...),...,An(i,j,...))となるようにFUNを配列一个1,,,,。。。,,,,一个nの要素に適用します。関数FUNは,n个のを受け入れスカラーを返さばませませ。。入力一个1,,,,。。。,,,,一个n1でないささ次元が一致しなけれなりませ。。あるいはあるいは,入力入力入力ががスカラースカラースカラースカラーでばばなりませませませんんん。。1FUNに入力される前に実質的に複製されます。

[b1,...,bm] = arrayfun(FUN,,,,___は,关数FUNm個の出力値を返す場合に複数の出力配列B1,...,BMを返します。arrayfunは毎回、arrayfunの呼び出し出力数と同じ回数すなわちすなわちmFUNを呼び出します。FUNでサポート数よりの出力引数指定てててarrayfunを呼び出した場合、MATLAB はエラーを生成します。FUNは异なるをもつ引数を返すます,,,FUNの各,出力のデータ型でなければなりませ。。

すべて折りたたむ

次の例では、小さな関数で測定データの配列に補正データを適用しています。ファイルmycal.mで定義されている関数を以下に示します。

functionc = mycal(rawdata,gain,offset)c =(rawdata。* gain) + offset;结尾

この关数は,rawdata配列の各要素にゲイン係数とオフセットを適用する際に、要素単位の演算のみを実行します。

ノミナル测定値作成します。

MEAT =一个(1000)*3;%1000 x-1000矩阵

この关数は,ゲインををrawdataとサイズにする,个个々测定に补正ををを适用适用できできできますます。。はは,,ををををををををををに済みます。

gn = rand(1000,“ gpuarray”)/100+ 0.995; offs = rand(1000,“ gpuarray”)/50-0.01;

gpuでキャリブレーションを実行ます。。

更正= arrayfun(@mycal,mes,gn,offs);

この关数は,入力引数GNおよびgpuメモリメモリに格纳れためためためためでで実行されます。关数が実行実行される前前measがgpuarrayにに変换れます。。

補正された結果を GPU から MATLAB ワークスペースに取得します。

结果=收集(更正);

matlab关数をのに定义でき。。

function[o1,o2] = aGpuFunction(a,b,c) o1 = a + b; o2 = o1 .* c + 2;结尾

この関数を GPU で評価します。

s1 = rand(400,“ gpuarray”);s2 = rand(400,“ gpuarray”);s3 = rand(400,“ gpuarray”);[O1,O2] = arrayfun(@agpufunction,s1,s2,s3);谁是
名称大小字节类属性O1 400x400 1280000 GPUARRAY O2 400x400 1280000 GPUARRARY S1 400X400 1280000 GPUARRAY S2 400x400 1280000 GPUARRAR

gpuからmatlabワークワークにをする,,,收集を使用します。

d = gather(o2);

关数myfun。mは乱数rを生成て使用し。。

functiony = myFun(x)r = rand();y = R.*x;结尾

arrayfunを使用し、gpuArray である入力変数を指定してこの関数を実行すると、関数は GPU で実行されます。生成される乱数の要素数はXのサイズ决まり。次のコードでではは,,,,,Gをgpu上上myfunに渡しています。

g = 2*一个(4,4,“ gpuarray”)H = arrayfun(@myfun, G)

Gは4 行 4 列の gpuArray であるため、myfunr16个の値要素,,,,Gの要素计算にににつずつつずつ生成し。。

入力引数

すべて折りたたむ

入力配列の要素に適用する関数。関数ハンドルとして指定します。FUNはスカラー値を返さなければなりません。各出力引数について、FUNは呼び出さに同じの値をなけれなりなりんん。FUN逻辑ののデータを受け入れなけれなりません。。

FUNはmatlab言语言语记述れた关数のでばなりませ。。FUNをmex关数关数ハンドル指定ことことできませ。。

FUNには、以下の MATLAB の組み込み関数および演算子を含めることができます。

ABS和ACOS ACOSH ACOSH ACOT ACSC ACSC ACSCH ASEC ASEC ASEC ASICHASINH ATAN 2 ATAN2 ATANH BETA BETA BETALN BITAND BITCMP BITCMP BITOT BITOR BITSET BITSET BITSHIFT BITXOR cOST Cos cosh Cos cos cos cos cos cosh cosh cosh coth coth coth coth coth coth coth coth coth coth coth coth cots csc csc csc
CSCH双EPS EQ ERF ERFC ERFCERFCINV ERFCX ERFCX ERFINV EXP1 false Fix fix floes gama gama ge gt gt gt hypot hypot im im int8 int16 int16 int32 intmax intmax intmax intmin intmin isfinite isfinite isinf isinf isinf isinf isinn ldivide le log le log
log2 log11 log1p逻辑lt max min min minus mod nan ne ne n n n ne no n n n n n n n n n n n n n n n n n n n n n n n n n ne n n n ne ne n n ne ne n n ne n n ne n n n ne ne n n n ne n n n ne n n n ne n n ne ne rand rand randi randn rdivide real realmax Realmax Realmin Realmin Realmin Realmin Realsqrt Realsqrt
sin single sinh sqrt tan tanh times true uint8 uint16 uint32 uint64 xor zeros + - .* ./ .\ .^ == ~= < <= > >= & | ~ && ||

以下の拡张バージョン:

*/\ \^
分岐::
打破我们继续e else elseif for if return while

配列をする关数(Inf那些兰德兰迪兰德)ははを入力引数としてサポートていんませにに,,生成生成さされる配列ののサイズはは,,关数关数のの入力変数変数のののサイズによってによってによって决まります。入力配列要素生成さます。クラスと“喜欢”の両方の構文を使用して、データ型を指定できます。以下の例で、配列作成関数でサポートされる構文を示します。

a = rand;b =一个();c =零(“喜欢”, X);d = inf(“单身的”);e = randi([0 9],,"uint32");

FUN内で兰德兰迪および兰德を使用して乱数を生成する場合、各要素は異なるサブストリームから生成されます。GPU での乱数発生の詳細については、GPU 上の乱数ストリームを参照しください。

入力配列,,行列または多配列として指定し。。arrayfunを GPU 上で実行するには、少なくとも 1 つの入力配列引数が gpuArray でなければなりません。CPU メモリに格納された各配列は、関数が評価される前に gpuArray に変換されます。同じ配列を指定してarrayfunを复数呼び出す,その配列配列ををにににとより效率ににますます

データ型:单身的|double|int8|int16|int32|INT64|UINT8|uint16|UINT32|Uint64|逻辑

出力引数

すべて折りたたむ

出力配列。gpuArray として返されます。

ヒント

  • GPU で特定の関数を呼び出すために最初にarrayfunを呼び出すで,,実行のためのに若干のオーバーヘッドヘッド时间が発生しします。同じ同じ关数关数をarrayfunの呼び出しでは、処理速度が向上します。

  • 入力配列さががでないでないは他入力大き大きさががががでないでないでないでないでないとと一致なければばなりませませませんん一个1,,,,。。。,,,,一个nはサイズが互いに等しいか、1 でなければなりません。入力配列の次元がシングルトン (1と等価) である場合は常に、arrayfun1のますます大きさ大きさがががのの次元にてて実质実质的的にに复制复制复制しし,,その次元次元のサイズサイズサイズをを最大のの他ののの配列配列一致一致1で,引数の対応するがであるである,arrayfunは実質的に大きさが 1 の次元を0に减じます。

    出力配列bの各次元は、非ゼロ サイズの次元では入力配列のうち最大の配列と同じサイズに、それ以外ではゼロになります。次のコードは、サイズ1の次元を、他の引数内の対応する次元のサイズと一致させるためにどのように増減しているかを示します。

    r1 = rand(2,5,4,“ gpuarray”);r2 = rand(2,1,4,3,“ gpuarray”);r3 = rand(1,5,4,3,“ gpuarray”);r= arrayfun(@(x,y,z)(x+y.*z),R1,R2,R3); size(R)
    2 5 4 3
    r1 = rand(2,2,0,4,“ gpuarray”);r2 = rand(2,1,1,4,“ gpuarray”);r= arrayfun(@plus,R1,R2); size(R)
    2 2 0 4
  • arrayfunによりサポートて演算演算厳密に要素であり,各の各计算计算はは他他他のの要素ととしして実行実行実行さされるためため

    • 入出力配列形状サイズはできません。

    • 兰德などの关数,サイズををいん。。乱数の配列配列は,要素ごとにに独立独立ししした

  • MATLABのarrayfunと同様に、行列のべき乗、乗算および除算 (^*/\ \)では要素単位の計算のみが実行されます。

  • 入出力配列(cat重塑など)のまたはを変更する演算されていんん

  • 読み取り専用のインデックス付け (subsref)と,の亲()关数外侧关数关数スペースの変数アクセスアクセスがサポートサポートさされています。。。。。ででで关数を评価评価入れ子关数中このな変数をしたりそれをsubasgnインデックス化はサポートさません。されいる使用法の例は,gpuでの演算を参照しください。

  • 无名关数そののワークスペースにアクセスできません。

  • サポートさいる关数オーバーロードは许可れ。。。

  • コードからをことはできませ。。

  • 代入されていない計算結果を格納するans変数はん必ずすべての结果を的変数に代入代入ます。

  • サポートされていない言語機能として、永続変数またはグローバル変数、parforSPMDswitchtryおよびcatchが挙げられ。

  • pコードファイル,,,データデータデータあるarrayfunの呼び出し含めることできません。

バージョン履歴

r2010b で導入