GCC では式の期待する値に対してヒントを与えられる。GCC はこのヒントを元にループの順序入れ換え等の最適化を行うそうだ。しかしながらこの構文はそのまま使うのには少し複雑なので、次のようにマクロにしておくと便利である。
#define likely(x) __builtin_expect (!!(x), 1)
#define unlikely(x) __builtin_expect (!!(x), 0)
これをダイクストラ法の一番外のループに適用してみたが、効果があまりなくむしろ低速化してしまった。これから先の高速化には自力でやるしかないようだ。
#define likely(x) __builtin_expect (!!(x), 1)
#define unlikely(x) __builtin_expect (!!(x), 0)
これをダイクストラ法の一番外のループに適用してみたが、効果があまりなくむしろ低速化してしまった。これから先の高速化には自力でやるしかないようだ。
※コメント投稿者のブログIDはブログ作成者のみに通知されます