• Kuzushiji Recognition • 文書に含まれる崩し字を認識・分類するコンペ。293チーム中25位にランクイン • Lyft Motion Prediction for Autonomous Vehicles • 車両や歩行者の数フレーム後の行動を予測するコンペ。935チーム中47位にランクインし銀メダルを獲得 • Halite by Two Sigma • 対戦ゲームのプログラムを作るコンペ。1139チーム中121位にランクイン • Conway’s Reverse Game of Life 2020 • 組合せ最適化コンペ。188チーム中3位にランクイン(詳細は次ページ以降で紹介する)
並列焼きなまし法を使用 • 悪い方向への更新確率をスレッド毎に設定して並列に計算、ときどきスレッド間の盤面の比較と交換を行う • 逐次アルゴリズムに比べて盤面あたりの近傍探索回数は減るが、探索できる盤面は増える • 実行時間によって変化するパラメータがないので途中から再開することが可能 • 今回はN=32を利用し、温度パラメータの極値を(逐次)焼きなまし法と揃えて実験した x1 , ..., xN = 初期状態 t1 , ..., tN = 温度パラメータ(降順に設定する) loop: parallel for i in range(N): xi = SimulatedAnnealing(xi , ti ) for i in range(0 または 1, N, 2): if E(xi ) > E(xi+1 ) or p(E(xi ), E(xi+1 ), ti , ti+1 ): xi , xi+1 = xi+1 , xi
simd化 • 各パターンを bitwise に変換すると1行が int32 に収まるので、 256bit SIMD レジスタと AVX2 命令を 用いることで8行を同時に更新することができる。これを並列焼きなましの各温度パラメータに対応させる ことで並列化した。条件分岐などSIMD化しにくい場所もあるため、論理的には8並列だが2.7倍の高速化に とどまった。また、温度パラメータあたりの計算回数が8%に減少したことが影響してスコアはやや悪化した。 • simd+openmp • simd化したコードを問題ごとに16並列にして、さらに4.4倍の高速化ができた。温度パラメータあたりの 計算回数で換算しても1.3倍に増えているので精度も最も良くなった。 SA SA SA SA 比 較 比 較 SA SA SA SA 比 較 SA SA SA SA 比 較 比 較