私の理解によると、複数のコンパイルユニットを備えたプログラムを作成する主な利点は、コンポーネントの再利用性と、小さな変更を組み込む場合のコンパイル時間の短縮です。
また、(おそらく間違って)これに関連するペナルティがあると思います。独自のコンパイル単位で定義された関数は「インライン」として宣言できません。
[このキーワードは実際にはコンパイラーにインライン展開関数を強制しないことを認識していますが、コンパイラーに最適化の柔軟性を与えるため、可能な限り含める価値があると理解しています。]
ここまでは順調ですね?
私の本当の質問は、プログラムが複雑なモデリングの問題を解決しているときに、費用便益分析が依然として複数のコンパイルユニットを優先するかどうかであり、有用な出力を生成するために、クラスター上でメインループを数か月繰り返す必要があります。
マルチコンパイルユニットプログラムのコンパイルには数分かかりますが、単一コンパイルユニットとして再構成された同じプログラムのコンパイルには数時間かかります...単一コンパイルユニットがすべての関数をインラインとして宣言し、最適化の機会が増える場合、余分なコンパイル時間を補うよりも、実行時間が数パーセント減少する可能性があることを期待するのは合理的だと思います。
このような状況に適した経験則はありますか、それとも状況に大きく依存しますか?