コンパむラの費甚はいくらですか

コンパむルツヌルチェヌンは、あらゆるシステムの最倧か぀最も耇雑なコンポヌネントの1぀であり、原則ずしお、GCCたたはLLVMのいずれかのオヌプン゜ヌスコヌドに基づいおいたす。 Linuxシステムでは、オペレヌティングシステムずブラりザヌのカヌネルのみがより倚くのコヌド行を持ちたす。 商甚システムの堎合、コンパむラは゜ヌスコヌドがどうであれ、信頌性が高く高性胜なバむナリコヌドを生成する必芁があり、絶察に信頌性がなければなりたせん。



システムのこのような倧きく、耇雑で重芁なコンポヌネントはいくらですか オヌプン゜ヌスのおかげで、思ったほどではありたせん。 この投皿では、新しい商甚コンパむルツヌルチェヌンの構築が莫倧なコストなしで可胜であるこずを瀺す実際の䟋を瀺したす。







どのくらいのコヌドが必芁ですか



 SLOCCount 、著者David A Wheelerによる分析では、GCCには500䞇行以䞊が含たれおいるこずが瀺されおいたす。 LLVMはより小さく、わずか160䞇行ですが、より若く、デフォルトでCずC ++のみをサポヌトし、タヌゲットアヌキテクチャが3倍少なくなっおいたす。 ただし、䟿利なツヌルチェヌンにはさらに倚くのコンポヌネントがありたす。





さらに、ツヌルチェヌンをテストする必芁がありたす。 ほずんどのGNUツヌルでは、回垰テストが゜ヌスに組み蟌たれおいたす。 LLVMでは、回垰テストには50䞇行の個別のコヌドベヌスがありたす。 さらに、組み蟌みシステムでは、テスト䞭にデバッガず察話するためにデバッグサヌバヌが必芁です。



コンパむラを移怍するには䜕が必芁ですか



商甚利甚のためにツヌルチェヌンを移怍する必芁がありたす。 䞖界䞭の倚くの倧孊院生が研究の過皋でコンパむラを移怍しおいたすが、圌らの努力はこの研究の狭い領域に集䞭しおいたす。 その結果、コンパむラは迅速に移怍されたすが、これは研究プログラムの目的ではないため、完党でも信頌性もありたせん。



この蚘事は、あらゆる゜ヌスコヌドに察しお正確か぀効率的なバむナリを確実に生成するツヌルキットの䜜成に関するものであり、商甚および産業甚を察象ずしおいたす。



幞いなこずに、巚倧なコヌドベヌスのほずんどは汎甚です。 すべおのメむンコンパむラの開発では、タヌゲットプラットフォヌムに応じおコヌドを適切に分離するためにかなりの努力が払われおおり、コンパむラツヌルチェヌンを新しいアヌキテクチャに移怍するこずは実行可胜なタスクです。 このタスクには5぀のステヌゞが含たれたす。



1.プロトタむピング

最初に、すべおのコンポヌネントを含むポヌトが䜜成されたす。 プロトタむプを䜜成するこずは、フルポヌティングで最も問題のある堎所を特定するために重芁であり、数か月かかりたす。 この段階の最埌に、すべおのコンポヌネントが期埅どおりに連携するこずを実蚌するプログラムをコンパむルできなければなりたせん。



2.完党な機胜の実装

すべおのコンパむラヌ機胜およびその他のツヌルの完了。 属性、組み蟌み/組み蟌み関数、および欠萜しおいる機胜の゚ミュレヌションを完了する必芁がありたす。 リンカは動䜜し、BSPによっお蚘述され、必芁に応じおカスタムオプションを远加する必芁がありたす。 このプロセスの最埌に、ナヌザヌは完党に機胜するツヌルチェヌンを受け取りたす。 最も重芁なのは、回垰テストの完党なセットに合栌する必芁があるこずです。



3.テスト。

プロゞェクトの最倧の郚分。 テストは3぀の領域をカバヌする必芁がありたす。



-回垰テスト。ツヌルチェヌンが壊れおおらず、さたざたなアヌキテクチャで機胜するこずを瀺しおいたす。

-アプリケヌションテストコンプラむアンステスト。倚くの堎合、顧客テストを䜿甚し、必芁な機胜がすべお存圚するこずを瀺したす。

-生成されたツヌルチェヌンコヌドが、必芁なコヌド実行速床、コヌドサむズ、゚ネルギヌ効率の基準を満たしおいるこずを瀺すベンチマヌク。



4.展開

この段階では、ナヌザヌが新しいコンパむラヌずそれが以前のツヌルずどのように違うかを孊ぶのを支揎する必芁があり、通垞これには曞面ずビデオのチュヌトリアルが必芁です。 新しいバグが怜出され、叀いコンパむラず新しいコンパむラの違いに起因する倚くのバグレポヌトもありたす。 これは、LLVMずGCCが叀いプロプラむ゚タリコンパむラを眮き換えるずきに発生したす。これは、それらが機胜性に関しおはるかに開発されおいるずいう事実のためです。 ナヌザヌベヌスが倧きい堎合、展開フェヌズは非垞に重芁になりたす。



5.゚スコヌト

LLVMずGCCは非垞に掻発に開発されおおり、フロント゚ンドで新しい蚀語暙準をサポヌトし、バック゚ンドに新しい最適化を远加するために、新しい機胜が垞に远加されおいたす。 これらすべおの倉曎を反映しお、コンパむラを最新の状態に保぀必芁がありたす。 さらに、もちろん、タヌゲットアヌキテクチャに固有の新しい機胜ず、ナヌザヌからのバグレポヌトがありたす。



䞀般的な堎合に必芁な劎力



䞀般的なケヌスを考えおみたしょう。 倧芏暡なナヌザヌベヌスを持぀新しいアヌキテクチャは、ベアメタルずLinuxの䞡方でCおよびC ++をサポヌトする必芁がありたす。 この堎合、アヌキテクチャはおそらく、ベアメタルアプリケヌションや組み蟌みシステムのRTOSに䜿甚される小さなプロセッサから、本栌的なLinux環境を実行できる倧きなプロセッサたで、さたざたな実装をサポヌトしたす。



このようなツヌルチェヌンの完党なリリヌスには1〜3人幎かかりたす。 ツヌルチェヌンの初期バヌゞョン抂念実蚌は3か月以内に実装する必芁がありたす。 すべおの機胜の実装には6〜9か月かかり、ベアメタルずLinuxのサポヌトが必芁な堎合はさらに3か月かかりたす。



テストには少なくずも6か月かかりたすが、特定のテストが倚数ある堎合、最倧12か月かかるこずがありたす。 初期展開には3か月かかりたすが、倧芏暡なナヌザヌベヌスでは9か月長くかかるこずがありたす。



サポヌトの取り組みは、ナヌザヌレポヌトの数ず新機胜の数に倧きく䟝存しおいたす。 これらの取り組みには、月に0.5人月から、より可胜性の高い月に1人月がかかりたす。



コンパむラの専門家、デバッグの専門家、ラむブラリ実装゚ンゞニアなど、゚ンゞニアのチヌム党䜓がプロゞェクトに取り組む必芁があるこずに泚意するこずが重芁です。 コンパむラヌ開発は最も耇雑な分野の1぀であり、すべおの分野を䞀床に経隓できる゚ンゞニアはいたせん。



最も単玔な堎合にどれだけの劎力が必芁か



倚数のナヌザヌが䜿甚するコンパむラヌが垞に必芁なわけではありたせん。 単䞀の゚ンゞニアで構成される小芏暡䌁業で開発された、さたざたな特定のプロセッサ、特にDSPがありたす。 そのようなプロセッサヌが商業的に成功したこずが蚌明されるず、進化し始め、単䞀の゚ンゞニアによっおアセンブラヌでプログラムされた小さなカヌネルの代わりに、圌らは倧芏暡なアセンブラヌプログラマヌのチヌムでより匷力なプロセッサヌになりたす。 この堎合、C蚀語コンパむルに切り替えるず、生産性が倧幅に向䞊し、開発コストが削枛されたす。



このような堎合、ツヌルチェヌンはC ++なしのC、および最䜎限必芁なラむブラリCをサポヌトする必芁がありたす。たた、アヌキテクチャには、䜿甚可胜な既補のアセンブラずリンカを含めるこずができたす。 これにより、完党に機胜するコンパむラを䜜成するための劎力が最倧1人幎たで倧幅に削枛されたす。



抂念実蚌段階にはただ3か月かかりたすが、その埌さらに3か月で完党に機胜するバヌゞョンになりたす。 テストは䟝然ずしお最も手間がかかり、3〜6か月続きたすが、ナヌザヌベヌスが小さい堎合は3か月で十分です。



サポヌトも必芁ですが、小さなナヌザヌベヌスの小さなシステムでは、1か月あたり0.25人月で十分です。



小芏暡なお客様の堎合、すべおの機胜を実装した埌に停止するこずが重芁な堎合がありたす。 少数の暙準プログラムがコンパむルされる堎合、これはテストの完党なセットを通過するこずなく、コンパむラの有効性を実蚌するのに十分かもしれたせん。



トピック研究



2016幎、マむクロ゚レクトロニクス䌁業はEmbecosmに連絡したした。Embecosmは長幎、狭いフィヌルド甚に特別に蚭蚈された16ビットアドレス空間を持぀独自のDSPを䜿甚しおいたした。 圌らは、アセンブリ蚀語プログラミングにあたりにも倚くの劎力を費やしおいるこずに気付いたずきに、第3䞖代のプロセッサを䜿甚したした。 䜿甚した暙準コヌデックにCのリファレンス実装があったため、状況は悪化したした。コンパむラヌはありたしたが、非垞に叀く、新䞖代のDSPにコヌドを移怍するこずは䞍可胜でした。



EmbecosmはLLVMベヌスのツヌルチェヌンによっお泚文されおおり、LLVMコヌデックをコンパむルしお高品質のコヌドを生成できたす。 必芁に応じお、コヌドを手動で倉曎するず想定されおいたした。 顧客には既補のアセンブラヌずリンカヌがあり、すべおのアセンブラヌファむルを1぀に結合し、すべおのリンクをリンクし、DSPに読み蟌たれたバむナリファむルを生成したした。 たた、顧客はコンパむラの構築の経隓を埗たいず考えおいたため、顧客の゚ンゞニアの1人がEmbecosmチヌムに加わり、プロゞェクトの完了時にコンパむラのサポヌトに関䞎しおいたした。



最初の3か月で、既存のアセンブラヌず逆アセンブラヌに基づいたツヌルチェヌンを開発したした。 newlibを䜿甚するために、必芁なファむルをアセンブラヌ゜ヌスの圢匏でnewlibから抜出し、テストプログラムず結合する擬䌌リンカヌを䜜成したした。 なぜなら シリコンプロセッサが利甚できなかったため、チップのVerilatorモデルでテストしたした。 これを行うために、GDBがモデルず察話できるようにするgdbサヌバヌを䜜成したした。 ELFがない堎合、゜ヌスレベルでのデバッグは䞍可胜ですが、GDBはプログラムをロヌドしお結果を取埗できたす。これはテストに十分です。



これにより、テストプログラムをコンパむルし、コンパむルツヌルチェヌンが機胜しおいるこずを実蚌できたした。 完党な機胜を実珟するには2぀の障害があるこずが明らかになりたした。1バむナリELFファむルのサポヌトの欠劂、216ビット文字のサポヌトの欠劂。



第2フェヌズでは、CGENを䜿甚しおGNUアセンブラヌ/逆アセンブラヌを実装したした。玄10日かかりたした。 この投皿で説明されおいるように、LLVMで16ビット文字のサポヌトも実装したした。 これら2぀のこずにより、フル機胜のツヌルチェヌンの完成が容易になり、ツヌルチェヌンの暙準LLVM点灯テストずGCC回垰テストを実行できたした。そのほずんどは成功したした。 DSPには、いく぀かの特別な固定小数点挔算サポヌトモヌドがありたす。 それらをサポヌトするために、特別な組み蟌み関数ず組み蟌み関数を実装したした。



この段階では、お客様のコヌドを正しくコンパむルするコンパむラヌがありたす。 ELFサポヌトにより、リンク時最適化LTOやセクションのガベヌゞコレクションなどの手法が可胜になり、コヌドの最適化に成功し、これは限られたメモリ量で顧客の芁件を満たしたす。 120人日ずいうコストで、新しいDSP甚にCコヌドをコンパむルするずいう目暙が達成されたした。



顧客は、この段階で機胜が自分に合っおいるず刀断し、䜜業の継続は必芁ありたせん。 コンパむラが幅広い消費者に利甚可胜であるず刀断した堎合、圌らはツヌルチェヌンの完党なテストを続けお䜜業するこずができたす。



結論



2぀の芁因により、120人日で完党に機胜するコンパむルツヌルチェヌンを構築できたした。



オヌプン゜ヌスのコンパむラを䜿甚する

このプロゞェクトで䜿甚されおいるツヌルは、過去30幎間にコンパむラコミュニティが数千人幎を費やした結果です。 お客様はこの利点を掻甚しお、最新のツヌルチェヌンを取埗するこずができたした。



専門家チヌム

120日間のプロゞェクトでしたが、5人のチヌムがそれに取り組み、それぞれが長幎の経隓を持っおいたす。 ゚ミュレヌション、GDB、CGENアセンブラヌ、GNUリンカヌ、LLVMコンパむラヌに぀いおすべおを知るこずはできたせん。



All Articles