- 2008-06-21 (Sat) 1:24
- Uncategorized

少し前から気になっていた、インテルによる並列プログラミングライブラリIntel Threading Building Block (TBB) を試してみました。
id:nishidakeisukeさんも最近書かれていましたね。
オライリーの本自体は4月ぐらいに読み終わっていたのだが、実際に試してなかったので試してみた。
ダウンロードして来てビルド。
pficore% wget "http://www.threadingbuildingblocks.org/uploads/77/111/2.1/tbb21_20080605oss_src.tgz" pficore% tar vzxf tbb21_20080605oss_src.tgz pficore% cd tbb21_20080605oss/ pficore% make pficore% sudo make install Password: make: *** ターゲット `install' を make するルールがありません. 中止.
なんかmake installが無い。とりあえずビルドされたものが出来てるディレクトリに謎のシェルスクリプトを発見。sourceしてみた。
pficore% cat build/linux_em64t_gcc_cc4.1.2_libc2.5_kernel2.6.20_release/tbbvars.sh
#!/bin/sh
[ -z "${TBB21_INSTALL_DIR}" ] && export TBB21_INSTALL_DIR="/home/kzk/tarball/tbb21_20080605oss" #
tbb_bin="${TBB21_INSTALL_DIR}/build/linux_em64t_gcc_cc4.1.2_libc2.5_kernel2.6.20_release" #
if [ -z "$CPATH" ]; then #
export CPATH="${TBB21_INSTALL_DIR}/include" #
else #
export CPATH="${TBB21_INSTALL_DIR}/include:$CPATH" #
fi #
if [ -z "$LIBRARY_PATH" ]; then #
export LIBRARY_PATH="${tbb_bin}" #
else #
export LIBRARY_PATH="${tbb_bin}:$LIBRARY_PATH" #
fi #
if [ -z "$LD_LIBRARY_PATH" ]; then #
export LD_LIBRARY_PATH="${tbb_bin}" #
else #
export LD_LIBRARY_PATH="${tbb_bin}:$LD_LIBRARY_PATH" #
fi #
#
pficore% source build/linux_em64t_gcc_cc4.1.2_libc2.5_kernel2.6.20_release/tbbvars.sh
pficore% echo $TBB21_INSTALL_DIR
/home/kzk/tarball/tbb21_20080605oss
これで動くだろうけどなんか嫌だ。install target作って欲しいです > Intelの中の人。
次は適当にビルドして実行する。コードはこんな感じ。
#include <time.h>
#include <sys/time.h>
#include <stdlib.h>
#include <iostream>
#include <vector>
#include <tbb/parallel_sort.h>
#include <tbb/task_scheduler_init.h>
using namespace std;
using namespace std;
double gettimeofday_sec()
{
struct timeval tv;
gettimeofday(&amp;amp;amp;amp;tv, NULL);
return tv.tv_sec + (double)tv.tv_usec*1e-6;
}
int
main(int argc, char **argv)
{
int s = 500000000;
vector<int> v(s);
for(unsigned int i=0; i<s; i++)
v[i] = rand();
double t1 = gettimeofday_sec();
if(strcmp(argv[1], "tbb") == 0){
tbb::task_scheduler_init init;
tbb::parallel_sort(v.begin(), v.end());
}else{
sort(v.begin(), v.end());
}
double t2 = gettimeofday_sec();
cout << "sort time: " << t2 - t1 << endl;
return 0;
}
2Gをソートしてみます。Core 2 Duo 6600 2.4G でビルド & 実行。
pficore% g++ -o parallel_sort -O2 -I${TBB21_INSTALL_DIR}/include parallel_sort.cpp -ltbb
pficore% time ./parallel_sort std
sort time: 70.4624
./parallel_sort std 76.36s user 1.85s system 99% cpu 1:18.86 total
pficore% time ./parallel_sort tbb
sort time: 41.6624
./parallel_sort tbb 86.31s user 1.90s system 176% cpu 50.020 total
ちゃんと速くなってますね、すばらしい。
インストール問題さえ無ければ手軽に並列化出来てよい感じ。
Similar Posts:
- Newer: 東京大学理学部情報科学科のHPがリニューアル
- Older: Erlang勉強会
Comments:0
Trackbacks:1
- Trackback URL for this entry
- http://kzk9.net/blog/2008/06/tbbparallel_for.html/trackback
- Listed below are links to weblogs that reference
- Intel Threading Building Block (TBB) を試してみた from moratorium
- trackback from ぱそこん道 10-04-04 (Sun) 15:29
-
独立行政法人 IPA…
情報処理推進機構 IPA ここのホームページにセキュア・プログラミング講座のコー…

