1

最終的な実行可能ファイルにリンクする前に、静的ライブラリにビルドする大量の自動生成コードを含むプロジェクトがあります。gcc/gnat 5.04a を使用します 非常に多くのファイルがあるため、ジョブをバッチに分割し、ar を複数回呼び出してライブラリを構築する必要があります (コマンドラインの長さの制限を回避するため)。

 [echo] Archiving codegen                   
 [echo] Deleting old codegen archive                     
   [ar] Using ar found in /usr/bin          
   [ar] Batch 1 of 7 completed in 37.871 s  
   [ar] Batch 2 of 7 completed in 55.796 s  
   [ar] Batch 3 of 7 completed in 89.709 s  
   [ar] Batch 4 of 7 completed in 256.894 s 
   [ar] Batch 5 of 7 completed in 196.704 s 
   [ar] Batch 6 of 7 completed in 248.334 s 
   [ar] Batch 7 of 7 completed in 243.759 s 
   [ar] Archiving took: 1129.067 s          
   [ar] Using ranlib found in /usr/bin      
   [ar] Indexing took: 247.223 s            
 [echo] Done with codegen                   

潜在的な速度の改善を探しています。アーカイブが大きくなるにつれて、オブジェクトを追加する前に (更新を) 検索する必要があるため、各バッチにかかる時間がどんどん長くなるようです。これが、古いアーカイブをそのまま更新するよりも、アーカイブを削除する方が速くなる理由のようです。速度を上げるために、フラグ「qcS」を ar コマンドに使用します。マニュアルページによると、「q」(クイック追加する必要があります)は実際には「r」(「置換を使用」)の同義語であり、「c」はアーカイブを作成し(特別なものはありません)、「S」はスキップしますインデックスの生成 (最後に「ranlib」を使用してカバーします。

組み込みツールを使用して、この操作を高速化する便利な方法はありますか? 「クイック追加」モードが機能する場合、それはおそらく私たちが望んでいることですが、残念ながら.

4

1 に答える 1

1

タイミングの問題の大部分は、アーカイブされるファイルの場所であることがわかりました。上記の数値は、NAS デバイスにあるオブジェクト ファイルとアーカイブ ファイルの数です。ローカル ハードディスク (一時ストレージ) で同じ操作を行うと、時間が ~20 ~ 40 秒に短縮されます。すべてのファイルをコピーし、ローカル アーカイブを実行し、結果をコピーして戻すには、NAS に直接アーカイブするよりも時間がかかりますが、ビルド プロセス全体をローカルの一時ストレージに移動することを検討しています。これにより、パフォーマンスが大幅に向上するはずです。

于 2010-01-11T14:58:54.783 に答える