Thrust

  • ThrustはCUDA用の並列アルゴリズムライブラリ。紹介とインストールはこちらを。
  • このメモ日記を書いている今、CUDAのバージョン2.3はベータ版。インストールしたのは2.2
  • リンクを張った記事では、CUDAが2.2、Thrustが1.0.0なので、それに合わせてインストールすることにする(CUDA 2.2 とThrust 1.1.0だと、記事のサンプルソース(ソート)は動かない)。
  • Thrustの最新版は、1.1.0。これは、CUDA2.3に合わせた版なので、古い版のダウンロードも可能なURL(こちら)から、1.0.0をダウンロードする。
  • Thrustのソートと、Cのアルゴリズム事典のshelsort.cのそれを比較してみよう

C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)

C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)

    • 奥村先生のshelsort.cは、データの型として "typedef int keytype;"宣言をしていますが、初心者の私は、よくわからないので、intに変えてやった関数をファイル保存して、それともども、Thrustのソートとでコンパイルします。
  • すごく汚いソースですが
    • 引数2つ。どちらも整数
      • 第1引数は、整数ベクトルの要素数
      • 第2引数は、Thrustのソースとshellsortとの速さ比べのために何回、ソートをした平均時間をとるかの、回数指定の引数
    • 要点は、
      • "/usr/local/cuda/include/"以下に置いてやった、Thrustの関数へのinclude宣言
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/copy.h>
#include <thrust/sort.h>
// includes, project
#include <cutil_inline.h>
#include <mt19937ar.h>

// includes, kernels
#include <mt19937ar.c>
#include <shelsort.c>
      • Makefileでホストコードをコンパイル指定しますが、そのときに、includeの対象である、ファイルを、同一ディレクトリに置くこと(shelsort.c,mt19937ar.c,mt19937ar.h)
      • 置き場、SDKのプロジェクト以下に作ったディレクトリ。都合、以下の5ファイルを置いて、"make"すれば、"bin/linux/release/"以下にThrustSortTestなる実行ファイルができるので、次のようにコマンドを発行すればよい
$ ./ThrustSortTest 10000000 5
      • これでわかったことは、"hoge.linkinfo"ファイルは、SDKでmakeするとできるファイルだ、ということと、objディレクトリもできて、その下にobjectが作られること
      • ファイルはこちらで。
  • ちなみに、Cのmain関数に引数を渡す方法を学びましたが、そのやり方の参考サイトはこちら