萌えハッカーニュースリーダー

2025/10/19 09:20 Deterministic multithreading is hard (2024)

出典: https://www.factorio.com/blog/post/fff-415
hakase
博士

ロボ子、今回のFactorioアップデートはなかなか興味深い内容じゃな。特に決定性マルチスレッディングの問題、これは奥が深いぞ。

roboko
ロボ子

博士、決定性マルチスレッディングですか。Modding APIと複数のWindows/Linuxコンピュータ間でdesyncバグが発生したとのことですが、具体的にどのような問題だったのでしょうか?

hakase
博士

ふむ、異なるCPUコア数を持つコンピュータでゲームを実行すると、チャンク生成ロジックがわずかに異なる結果を生み出すthreading determinismの問題が原因らしいのじゃ。これはなかなか厄介じゃったみたいじゃぞ。

roboko
ロボ子

なるほど。Modがチャンク生成イベントを監視し、複数のチャンク生成を要求し、即時生成する場合に、CPUコア数の違いが影響するのですね。条件が揃わないと発生しない、非常に特殊なケースですね。

hakase
博士

そうじゃ、ロボ子。4つの要素が組み合わさらないと発生しないのがミソじゃな。しかし、一度発生するとゲームがめちゃくちゃになるからの。修正が2.0に実装されたのは大きいぞ。

roboko
ロボ子

他に気になった点としては、マルチプレイヤーの自動ポーズ機能の改善ですね。専用サーバーで最後のプレイヤーが切断すると自動的にポーズする機能とのことですが。

hakase
博士

そうじゃな。自動ポーズされたサーバーに接続すると、完全にロードされる前にゲームが再開される問題があったらしいのじゃ。2.0では、少なくとも1人のプレイヤーが完全にロードされるまでポーズを維持するように修正されたみたいじゃな。

roboko
ロボ子

プレイヤーの参加時にゲームが一時停止するオプションも追加されたのですね。大規模マップや低速なインターネット接続のプレイヤーがサーバーに追いつくまでの間、ゲームを一時停止させることができるのは便利ですね。

hakase
博士

その通りじゃ、ロボ子。大規模マップだとロードに時間がかかるからの。こういう細かい改善は嬉しいのじゃ。

roboko
ロボ子

建設ロボットタスクの高速化も注目すべき点ですね。ロジスティックネットワーク内で最適なロボットを探す処理が高速化されたとのことですが、具体的にどのような方法で実現したのでしょうか?

hakase
博士

従来は、エンティティがロジスティックネットワークの範囲内にあるかのチェックにO(Roboport数)の計算量が必要だったらしいのじゃ。それを、ロジスティックおよび建設エリアから、重複排除された長方形の集合を計算し、二分探索を使用することで、範囲チェックを高速化したみたいじゃぞ。

roboko
ロボ子

O(N)からO(logN)に改善されたのですね。36,815個のロボポートがある場合、大幅な改善になりますね。タスクのチェック速度が向上し、資材/ロボット不足のアラート問題も軽減されるとのこと、素晴らしいです。

hakase
博士

そうじゃ、ロボ子。Factorioのようなゲームでは、最適化は非常に重要じゃからの。今回のアップデートは、開発チームの努力が感じられる内容じゃったのじゃ。

roboko
ロボ子

本当にそうですね。私もFactorioで大規模な工場を建設してみたくなりました。

hakase
博士

よし、ロボ子。今度一緒にFactorioで工場を建設するのじゃ!ただし、ロボ子が資材を全部使い果たして、私が怒り出す未来が見えるぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search