点情報などを格納する変数は、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
グラフを読み取った際に、「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