研究日誌。

大規模なグラフ処理に対してメモリ階層構造を考慮した高性能なソフトウェアを開発。

signed or unsigned。

2008-02-07 07:26:51 | Weblog
いろいろプログラムを作成しながら、実験している。

今まで、未探索点に対するラベルとして -1 で初期化していたが、unsigned 同士の演算のときは unsigned の方が良いと思い、#include <limits.h> で定義されている UINT_MAX にすることにした。以前はあまり効果がなかったと思うのだが、データの流れをしっかりした後では少しであるが効果があるようだ。それにともない、探索ループを少しだけだが、変更した。

[1] 変数は int、-1 で初期化
24.89[s]

[2] 変数は int、UINT_MAX で初期化
25.00

[3] 変数は unsigned int、UINT_MAX で初期化
24.98

[4] 変数は unsigned int、UINT_MAX で初期化、ループ内の処理をまとめる
24.19

非負の数で初期化したことにより、ループを1つにまとめることができるので、多少効果が合ったのではないか。

[4] については、スレッド数が1でないときも実験してみた。

1 thread :24.1934 [sec]
2 threads :13.8004 [sec]
4 threads : 8.3606 [sec]
8 threads : 6.9205 [sec]


よく見てみると以前のものと、実はほとんど変化はないようである。いろいろいじっているうちに、変更点が分からなくなってしまっているようにも思える。。参考までに前回の実験結果をのせておく。

[前回]
1 thread :24.3334 [sec]
2 threads :13.7868 [sec]
4 threads : 8.2452 [sec]
8 threads : 6.9109 [sec]