研究日誌。

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

距離変数を unsigned long long 型に その1。

2008-05-30 08:44:28 | Weblog
点情報などを格納する変数は、42 億ほどの非負整数を扱える unsigned int (以下 UINT)で良いとしても、やはり距離情報を格納する変数には、1848 京ほどの非負整数まで扱える unsigned long long int (以下 ULLONG) を用いた方が良いと思い、新たに追加した。

グラフを読み取った際に、「UINT で十分」であるか、あるいは 「ULLONG が必要」になるか判断し、適宜使い分けようと思っている。

全米に対してのデータのみ載せるが、やはり ULLONG にすることで、低速化してしまう。距離配列だけが2倍になっても、そのままでは構造体のアライメントが崩れてしまうために、4byte 分の Padding される。そのために構造体を 展開する/しない といったものを何パターンか作成したが、やはりこの状態が一番高速であった。にしても、構造体を1つ持ってくるのに、以前の倍かかってしまうので、その分が低速化に影響させているのではないかと推測される。

typedef struct {
 uint32_t potential; // 4byte
 uint32_t prev_node; // 4byte
} node_t; // 8byte

typedef struct {
 uint64_t potential; // 8byte
 uint32_t prev_node; // 4byte
 /* padding(4byte) */
} node_t; // 16byte