メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

gpucoder.sort

MATLAB 関数 sort の最適化された GPU 実装

説明

B = gpucoder.sort(A) は、配列 A の要素を並べ替えます。また、gpucoder.sort から生成された CUDA® コードは、GPU 上で並べ替え操作を実行します。関数は、大きさが 1 でない最初の次元に沿って A を並べ替えます。以下に例を示します。

  • A がベクトルの場合、gpucoder.sort(A)A の要素を並べ替えます。

  • A が行列の場合、gpucoder.sort(A)A の各列の要素を並べ替えます。

B の並べ替えられた出力の型とサイズは A と同じになります。

B = gpucoder.sort(A,dim) のオプション引数 dim は、並べ替え操作を実行するときに沿う次元を指定します。

B = gpucoder.sort(A,direction) のオプション引数 direction は、並べ替えの方向を指定します。direction は次の 2 つのいずれかの値をとることができます。

  • 'ascend' - 昇順に並べ替えます。これは既定のオプションです。

  • 'descend' - 降順に並べ替えます。

[B,I] = gpucoder.sort(A,...) は、並べ替え後の出力 B を取得するために A の要素が再配置された方法を指定する並べ替えインデックス I を返します。

  • A がベクトルである場合、B = A(I) になります。

  • A が m 行 n 列の行列で、dim = 1 である場合、以下になります。

    for j = 1:n
      B(:,j) = A(I(:,j),j);
    end

この並べ替えの順序は安定しています。つまり、複数の要素の値が同じである場合、並べ替えられた出力 B では同等の要素の順序が維持され、同等の要素に関するインデックス I は昇順になります。

gpucoder.sort が MATLAB® から呼び出された場合、組み込み関数 sort が使用されます。

すべて折りたたむ

この例では、行列の列を降順に並べ替えるための CUDA コードを生成します。

1 つのファイル内に、行列入力 A を受け入れるエントリポイント関数 mySort を記述します。関数 gpucoder.sort を使用して A の列を降順に並べ替えます。

function B = mySort(A)
     B = gpucoder.sort(A, 1, 'descend');
end

関数 codegen を使用して CUDA MEX 関数を生成します。

codegen -config coder.gpuConfig('mex') -args {ones(1024,1024,'double')} -report mySort

入力引数

すべて折りたたむ

入力配列。ベクトル、行列、または多次元配列として指定します。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char

動作する対象の次元。正の整数スカラーとして指定します。値を指定しない場合、既定値は、サイズが 1 ではない最初の配列の次元です。

dimndims(A) より大きい場合、sortA を返します。A が cell 配列の場合、dim はサポートされないため、sort は、サイズが 1 でない最初の配列の次元のみに沿って動作します。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

並べ替える方向。'ascend' または 'descend' として指定します。A が cell 配列の場合、direction はサポートされないため、sort は昇順でのみ並べ替えを実行します。

出力引数

すべて折りたたむ

並べ替えられた配列。ベクトル、行列、または多次元配列として返されます。B のサイズと型は A と同じです。B 内の要素の順序は、A 内の等しい要素の順序を維持します。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char

並べ替えインデックス。ベクトル、行列、または多次元配列として返されます。I のサイズは A と同じです。インデックス ベクトルは sort が作用する次元に沿って方向付けされます。たとえば、A が 2 行 3 列の行列である場合、[B,I] = sort(A,2)A の各行の要素を並べ替えます。出力 I は 1 行 3 列の行インデックス ベクトルの集合で、A の各行の並べ替えを表しています。

制限

  • gpucoder.sort は、複素数をサポートしていません。

  • gpucoder.sort は、MATLAB の sort 関数でサポートされる 'MissingPlacement' および 'ComparisonMethod' の名前と値のペアをサポートしていません。

バージョン履歴

R2018b で導入

すべて展開する