CUDA:推力を使用して別の配列で定義された順序に従って配列を並べ替えます

Driss DS Idrissi

私は10個のアレイを持っています。並べ替えたいです。ただし、それらの要素の動作は同じであるため、計算を保存して1つだけを並べ替え、その他は並べ替えられた配列に基づいて並べ替えます。推力を使っています。それを行う最適な理由はありますか?前もって感謝します。

ロバート・クロベラ

コメントから、私の提案は次のとおりでした。

thrust::sort_by_key最初のデータセット(配列)で使用し、最初のデータセットをキーとして渡し、インデックスシーケンス(0、1、2、...)を値として渡します。次に、スラストギャザーまたはスキャッター操作で再配置されたインデックスシーケンスを使用して、残りの配列を再配置します。

要求に応じて、これが実際の例です。

$ cat t282.cu
#include <thrust/sort.h>
#include <thrust/device_vector.h>
#include <thrust/host_vector.h>
#include <thrust/copy.h>
#include <thrust/sequence.h>
#include <iostream>
#include <thrust/iterator/permutation_iterator.h>
#include <thrust/iterator/zip_iterator.h>

const size_t ds = 5;
typedef float ft;

int main(){
  ft a1[ds] = {0.0f, -3.0f, 4.0f, 2.0f, 1.0f};
// data setup
  thrust::device_vector<ft> d_a1(a1, a1+ds);
  thrust::device_vector<ft> d_a2(ds);
  thrust::device_vector<ft> d_a3(ds);
  thrust::device_vector<ft> d_a2r(ds);
  thrust::device_vector<ft> d_a3r(ds);
  thrust::device_vector<size_t> d_i(ds);
  thrust::sequence(d_i.begin(), d_i.end());
  thrust::sequence(d_a2.begin(), d_a2.end());
  thrust::sequence(d_a3.begin(), d_a3.end());
// sort
  thrust::sort_by_key(d_a1.begin(), d_a1.end(), d_i.begin());
// copy, using sorted indices
  thrust::copy_n(thrust::make_permutation_iterator(thrust::make_zip_iterator(thrust::make_tuple(d_a2.begin(), d_a3.begin())), d_i.begin()), ds, thrust::make_zip_iterator(thrust::make_tuple(d_a2r.begin(), d_a3r.begin())));
// output results
  thrust::host_vector<ft> h_a1 = d_a1;
  thrust::host_vector<ft> h_a2 = d_a2r;
  thrust::host_vector<ft> h_a3 = d_a3r;
  std::cout << "a1: " ;
  thrust::copy_n(h_a1.begin(), ds, std::ostream_iterator<ft>(std::cout, ","));
  std::cout << std::endl << "a2: " ;
  thrust::copy_n(h_a2.begin(), ds, std::ostream_iterator<ft>(std::cout, ","));
  std::cout << std::endl << "a3: " ;
  thrust::copy_n(h_a3.begin(), ds, std::ostream_iterator<ft>(std::cout, ","));
  std::cout << std::endl;
}
$ nvcc -o t282 t282.cu
$ cuda-memcheck ./t282
========= CUDA-MEMCHECK
a1: -3,0,1,2,4,
a2: 1,0,4,3,2,
a3: 1,0,4,3,2,
========= ERROR SUMMARY: 0 errors
$

ここでは、thrust::gatherorthrust::scatter操作の代わりに、並べ替えを実行するために、単にaを使用thrust::copy_nていthrust::permutation_iteratorます。を使用して並べ替える残りの配列を結合しますthrust::zip_iteratorが、これが唯一の方法ではありません。

私は10アレイではなく、3アレイでそれを行っていることに注意してください。ただし、これはメソッドを説明する必要があります。10アレイへの拡張は、機械的なものでなければなりません。ただし、thrust::tuple10項目に制限されているため、10〜11を超える配列の場合はメソッドを多少変更する必要があることに注意してください変更として、thrust::copy_nを使用するのではなく、配列を並べ替えるたびに1回、ループを呼び出すだけで済みますzip_iteratorこれが効率に大きな違いをもたらすとは思わない。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

PHPは、別の配列で定義された順序に従って配列を並べ替えます

分類Dev

別の配列で定義された並べ替え順序に従って、配列を所定の位置に並べ替えます

分類Dev

順序付けられた配列パターンに従ってbash配列を並べ替えます

分類Dev

awkを使用してbashで別の順序付けられた配列パターンを使用して、複数行の配列を並べ替えます

分類Dev

コンパレータを使用して別の配列(長さが異なる)に従って配列を並べ替えると、順序が正しくなくなります

分類Dev

JavaScriptで別の配列に従って配列を並べ替えたいですか?

分類Dev

PHPの値に従って配列を並べ替えます

分類Dev

文字列の配列を並べ替え、別の文字列の配列を使用して順序を決定します

分類Dev

Javascriptアンダースコアを使用して、別の配列順序に基づいて配列順序を並べ替えます

分類Dev

javaScriptで指定されたインデックスに従って配列を並べ替えます

分類Dev

事前定義された配列に従って配列(結果セット)を並べ替える

分類Dev

事前定義された順序に基づいてJavascriptで配列を並べ替える

分類Dev

Rでtable(A、B)を使用した後、特定の順序に従って列と行を並べ替えるにはどうすればよいですか?

分類Dev

Python-指定された属性の順序に従ってオブジェクトの配列を二重に並べ替える方法は?

分類Dev

別の配列の並べ替え順序に基づいて複数の配列を並べ替えるにはどうすればよいですか?

分類Dev

配列を並べ替えると、配列の順序が狂ってしまいます

分類Dev

キーと並べ替え順序を使用してネストされた配列に並べ替えを実装する方法

分類Dev

javascriptの別の配列に従って配列を並べ替える方法は?

分類Dev

最初の配列に従って配列を並べ替える

分類Dev

値のカスタム並べ替えを定義し、その並べ替えに従って配列から最大値と最小値を取得する-PHP

分類Dev

Swiftの与えられたインデックスに従って配列を並べ替えます

分類Dev

Pythonで新しい配列を生成するために、別の配列に従ってリストを並べ替える方法

分類Dev

別の配列に基づいて複数の配列を並べ替える並べ替え順序

分類Dev

別の配列の並べ替え順序に基づいて配列を並べ替える

分類Dev

配列から元のデータを削除せずに、指定されたユーザーIDに従って配列を並べ替えます

分類Dev

別の配列で指定された特定の順序で配列値を並べ替える

分類Dev

別の配列の順序で配列を並べ替える

分類Dev

大きな行列を並べ替えるか、列ペアの値によって決定される特定の順序で行を抽出します

分類Dev

子配列の数に従って配列の配列を並べ替える

Related 関連記事

  1. 1

    PHPは、別の配列で定義された順序に従って配列を並べ替えます

  2. 2

    別の配列で定義された並べ替え順序に従って、配列を所定の位置に並べ替えます

  3. 3

    順序付けられた配列パターンに従ってbash配列を並べ替えます

  4. 4

    awkを使用してbashで別の順序付けられた配列パターンを使用して、複数行の配列を並べ替えます

  5. 5

    コンパレータを使用して別の配列(長さが異なる)に従って配列を並べ替えると、順序が正しくなくなります

  6. 6

    JavaScriptで別の配列に従って配列を並べ替えたいですか?

  7. 7

    PHPの値に従って配列を並べ替えます

  8. 8

    文字列の配列を並べ替え、別の文字列の配列を使用して順序を決定します

  9. 9

    Javascriptアンダースコアを使用して、別の配列順序に基づいて配列順序を並べ替えます

  10. 10

    javaScriptで指定されたインデックスに従って配列を並べ替えます

  11. 11

    事前定義された配列に従って配列(結果セット)を並べ替える

  12. 12

    事前定義された順序に基づいてJavascriptで配列を並べ替える

  13. 13

    Rでtable(A、B)を使用した後、特定の順序に従って列と行を並べ替えるにはどうすればよいですか?

  14. 14

    Python-指定された属性の順序に従ってオブジェクトの配列を二重に並べ替える方法は?

  15. 15

    別の配列の並べ替え順序に基づいて複数の配列を並べ替えるにはどうすればよいですか?

  16. 16

    配列を並べ替えると、配列の順序が狂ってしまいます

  17. 17

    キーと並べ替え順序を使用してネストされた配列に並べ替えを実装する方法

  18. 18

    javascriptの別の配列に従って配列を並べ替える方法は?

  19. 19

    最初の配列に従って配列を並べ替える

  20. 20

    値のカスタム並べ替えを定義し、その並べ替えに従って配列から最大値と最小値を取得する-PHP

  21. 21

    Swiftの与えられたインデックスに従って配列を並べ替えます

  22. 22

    Pythonで新しい配列を生成するために、別の配列に従ってリストを並べ替える方法

  23. 23

    別の配列に基づいて複数の配列を並べ替える並べ替え順序

  24. 24

    別の配列の並べ替え順序に基づいて配列を並べ替える

  25. 25

    配列から元のデータを削除せずに、指定されたユーザーIDに従って配列を並べ替えます

  26. 26

    別の配列で指定された特定の順序で配列値を並べ替える

  27. 27

    別の配列の順序で配列を並べ替える

  28. 28

    大きな行列を並べ替えるか、列ペアの値によって決定される特定の順序で行を抽出します

  29. 29

    子配列の数に従って配列の配列を並べ替える

ホットタグ

アーカイブ