最近、開発者がいつコンパイラーにお金を払うべきか疑問に思い始めました。コンパイラはほとんどのプラットフォームで無料で提供されていますが、簡単に入手できる無料のバージョンもあります。
例:
OS X-GCCおよびClang/LLVMには開発者ツールが付属しています。どのようにして何を使用してそれらを作成できるかについて、ここでは制限はありません。
Linux-GCCと私はもっと確信しています。 Linuxコンパイラの現在の状態がわかりません。どのようにして何を使用してそれらを作成できるかについて、ここでは制限はありません。
Windows-MinGWおよびMicrosoftは、Visual Studioの無料バージョンを提供しています。 MinGWには制限はありませんが、無料のVisual Studioには厳しい制限があると思います。
ただし、例として、インテルはC/C++コンパイラーを製造しています。彼らは値段が高い。教育的には、OS Xバージョンは49ドル、Windows/Linuxはそれぞれ129ドルで入手できると思います。次に、完全な「スタジオ」製品も提供します。明らかに教育価格を使用すると、制限が課せられます。
しかし、私が疑問に思っているのは、いつコンパイラーにお金を払うことを検討すべきかということです。私が考えることができる1つの例はビデオゲームです。主要なプラットフォームで動作するコンパイラを使用している場合、プラットフォーム用の切り替えツールはありません。ツールが同じであれば、プラットフォーム間の切り替えがある程度容易になるようです。
インテルコンパイラーのようなコンパイラーの支払いと、それらを使用することで得られる真のクロスプラットフォームのメリットについて、誰かが光を当てることはできますか?プラットフォーム固有のテクニックを実行しないように一生懸命努力しても、コードの移植性が低下しますか?
私の経験では、クロスホストプラットフォームの機能は、コンパイラを選択する際の小さな考慮事項です。実際、まったく逆です。 1つの特定のターゲットプラットフォームに対する優れたサポートのために、人々はより頻繁にコンパイラを選択します。
例として、Intelコンパイラを見てみましょう。人々は通常、最新の最先端のIntelチップからパフォーマンスの最後の1オンスを引き立たせたいときにそれを購入します。結局のところ、ホールを歩いてチップを設計した人と話をすることができる人よりも優れたコンパイラを設計することは困難です。
これは、Microsoftプラットフォームで開発するためにMicrosoftからツールを購入するのと同じ理由です。それは何よりもまずサポートを受けている人です。
有償コンパイラーに取り組んできた私は、コンパイラーに支払う主な理由はサポート契約のためだと思います。お客様がコードに問題があり、コンパイラのバグが疑われる場合、可能性のある応答/ソリューションの期限付きで、可能性のある解決策(ベンダーのダイムではなく)を調査するようコンパイラベンダーに依頼できます。これは、機密情報を含む可能性のあるプロジェクトのソースコードを公開することなく実行できます。通常、契約により、ベンダーは共有ソースコードについて秘密にされます。一般に、大企業はこのレベルのサポートに喜んでお金を払いますが、小規模なショップはそれをお金の価値があると見なしたり、高すぎるとは考えていません。
さらに、ベンダーは(高額の)顧客を喜ばせたいので、機能のリクエストは、顧客が望むものによって優先されます。また、顧客が自分のニーズに合わせた機能を広く提案することもできます。これは、GCCや他のオープンソースコンパイラのユーザーが、自分のスケジュールで感じた順序で機能を実装しようとするユーザーによって機能が実装される場合は不可能です。
時々それは人々が支払うコンパイラではなく、それで動作するランタイムです。特にIntelには、マルチスレッド、メディアサポート(SSEなど)、拡張精度演算などに優れたライブラリを提供するという伝統があります。
私は有料コンパイラを使用している何人かの人々と協力してきました。
彼らはクラスターで深刻なデータ処理を行っていました。おそらく、インテルのコンパイラーはそれらのコードをわずかに高速化することに成功し、コンパイラーの支払いはより多くのノードを実行するよりも安価でした。私の理解では、その差は非常に小さかったのですが、それに含まれる電力コストを掛けると、その価値があると見なされました。
そのため、ほとんどのHPCスーパーコンピューターがチップメーカーが提供する専用のコンパイラーで実行されていても、驚くことはありません。