Intel oneAPI DPC++/C++ CompilerおよびIntel C++ Compiler Classic (非推奨の icc および icl [ 3 ]は Intel OneAPI HPC ツールキットに含まれています) は、 Intel プロセッサベースのシステム向けのIntelのC、C++、SYCL、およびデータ並列 C++ (DPC++) コンパイラで、Windows、Linux、およびmacOSオペレーティングシステムで利用可能です。[ 4 ]
Intel oneAPI DPC++/C++ Compiler は Windows および Linux で利用可能で、Intel IA-32、Intel 64 (別名x86-64 )、Core 、Xeon、および Xeon Scalableプロセッサ、ならびに Intel Processor Graphics Gen9 以降、 Intel X eアーキテクチャ、およびIntel Arria 10 GX FPGA を搭載した Intel Programmable Acceleration Card を含む GPU をターゲットとして、C、C++ 、SYCL、およびData Parallel C++ (DPC++) ソースのコンパイルをサポートしています。 [ 5 ] Intel C++ Compiler Classic と同様に、Microsoft Visual StudioおよびEclipse IDE開発環境もサポートしており、Intel oneAPI Threading Building Blocks、OpenMP、およびネイティブ スレッドによるスレッド処理をサポートしています。
DPC++ [ 6 ] [ 7 ] は、The Khronos Group のSYCL仕様に基づいて構築されています。開発者がハードウェア ターゲット (CPU や GPU や FPGA などのアクセラレータ) 間でコードを再利用し、特定のアクセラレータ向けにカスタム チューニングを実行できるように設計されています。DPC++ はC++17と SYCL 言語の機能で構成され、SYCL をより使いやすくするオープンソース コミュニティ拡張機能を組み込んでいます。これらの拡張機能の多くは、統合共有メモリ、グループ アルゴリズム、サブ グループなど、SYCL 2020 暫定仕様[ 8 ]に採用されています。
Intelは2021年8月に、ビルド時間の短縮と最新のC++標準のサポートによるメリットのためにLLVMを全面的に採用すると発表した。 [ 9 ]
Intel C++ Compiler Classic は、Windows、Linux、macOS で利用可能で、Intel IA-32、Intel 64 (x86-64)、Core、Xeon、および Xeon Scalable プロセッサをターゲットとした C および C++ ソースのコンパイルをサポートしています。[ 5 ] Microsoft Visual Studio および Eclipse IDE 開発環境をサポートしています。Intel C++ Compiler Classic は、Intel oneAPI Threading Building Blocks、OpenMP、およびネイティブ スレッドによるスレッド処理をサポートしています。
Intelによると[ 10 ] 、 2023.0リリース以降、Intel oneAPI DPC++/C++ Compilerは、以下のものを含むすべての現行Intel汎用x86-64 CPUおよびGPUをサポートしています。
Intel C++ Compiler Classicは、以下の汎用Intel x86-64アーキテクチャCPUを対象としています。[ 5 ]
Intel oneAPI DPC++/C++ コンパイラは、スタンドアロン コンポーネントとして[ 11 ]、または Intel oneAPI Base Toolkit、Intel oneAPI HPC Toolkit、および Intel oneAPI IoT Toolkit の一部として利用できます。[ 5 ]
Intel C++ Compiler Classicは、スタンドアロンコンポーネント[ 12 ]として、またはIntel oneAPI Base Toolkitの一部として利用できます。[ 5 ]
Intelコンパイラは、一般的なデバッガ( LinuxではDWARF 2 、 gdbに類似、 WindowsではCOFF)で標準的に使用できるデバッグ情報を提供します。デバッグ情報付きでコンパイルするためのフラグは、/ZiWindowsと-gLinuxでそれぞれ指定できます。デバッグは、WindowsではVisual Studioデバッガ、Linuxではgdbを使用して行います。
Intelコンパイラはgprof互換のプロファイリング出力を生成できますが、IntelはIntel VTune Profilerと呼ばれるカーネルレベルのシステム全体統計プロファイラも提供しています。VTuneは、コマンドラインから、またはLinuxやWindowsに付属のGUIを介して使用できます。また、 WindowsのVisual StudioやLinuxのEclipseに統合することもできます。VTuneプロファイラに加えて、ベクトル化最適化、オフロードモデリング、フローグラフ設計、スレッド設計およびプロトタイピングツールに特化したIntel Advisorもあります。
インテルは、メモリおよびスレッドのエラー検出ツールであるIntel Inspector XEも提供しています。メモリエラーに関しては、メモリリーク、メモリ破損、APIの不一致による割り当て/解放、および一貫性のないメモリAPIの使用を検出します。スレッドエラーに関しては、データ競合(ヒープとスタックの両方)、デッドロック、およびスレッドと同期APIのエラーを検出します。
IntelのC/C++コンパイラの以前のバージョンは、Intel以外のプロセッサ向けに最適化が不十分であると批判されてきました。たとえば、Steve Westfieldは2005年にAMDのウェブサイトの記事で次のように書いています。[ 13 ]
Intel 8.1 C/C++ コンパイラは、SSE2 拡張機能を利用するために、フラグ -xN (Linux 用) または -QxN (Windows 用) を使用します。SSE3 の場合、コンパイラスイッチは -xP (Linux 用) および -QxP (Windows 用) です。... -xN/-QxN および -xP/-QxP フラグが設定されている場合、プロセッサベンダー文字列がチェックされ、それが「GenuineIntel」でない場合は、機能フラグをチェックすることなく実行が停止します。痛い!
デンマークの開発者であり学者でもあるアグナー・フォグは2009年に次のように書いています。[ 14 ]
Intelコンパイラといくつかの異なるIntel関数ライブラリは、AMDおよびVIAプロセッサ上で最適なパフォーマンスを発揮しません。その理由は、コンパイラまたはライブラリが、特定のプロセッサと命令セット(たとえば、SSE2、SSE3など)向けに最適化された複数のバージョンのコードを作成できるためです。システムには、実行中のCPUの種類を検出し、そのCPUに最適なコードパスを選択する機能が含まれています。これはCPUディスパッチャと呼ばれます。しかし、Intel CPUディスパッチャは、CPUがサポートする命令セットをチェックするだけでなく、ベンダーID文字列もチェックします。ベンダー文字列が「GenuineIntel」であれば、最適なコードパスが使用されます。CPUがIntel製でない場合、CPUがより優れたバージョンと完全に互換性があっても、ほとんどの場合、最も遅いバージョンのコードが実行されます。
このベンダー固有のCPUディスパッチは、プログラマーの知らないうちに、IntelコンパイラまたはIntel関数ライブラリを使用して非Intelプロセッサ上で構築されたソフトウェアのパフォーマンスに影響を与える可能性があります。これにより、誤解を招くベンチマークが生じたとされています[ 14 ] 。これには、VIA NanoのCPUIDを変更することで結果が大幅に改善された事例も含まれます[ 15 ] 。 2009年11月、AMDとIntelはこの問題および関連する問題について法的和解に達し[ 16 ]、2010年後半には、AMDはIntelに対する米国連邦取引委員会の独占禁止法調査で和解しました[ 17 ] 。
FTCとの和解には、インテルが以下のことをしなければならないという開示条項が含まれていました。[ 18 ]
コンパイラがIntel製以外のプロセッサ(AMD製のものなど)を差別し、その機能を十分に活用せず、劣悪なコードを生成することを明確に公表する。
この判決に従い、インテルはコンパイラのドキュメントに免責事項を追加しました。[ 19 ]
Intelのコンパイラは、Intel製マイクロプロセッサに固有ではない最適化について、Intel製以外のマイクロプロセッサに対して、Intel製マイクロプロセッサと同等の最適化を行うとは限りません。これらの最適化には、SSE2、SSE3、SSSE3命令セット、およびその他の最適化が含まれます。Intelは、Intel製以外のマイクロプロセッサにおける最適化の可用性、機能、または有効性について保証しません。本製品におけるマイクロプロセッサ依存の最適化は、Intel製マイクロプロセッサでの使用を想定しています。Intelマイクロアーキテクチャに固有ではない特定の最適化は、Intel製マイクロプロセッサ専用です。本通知で対象となる特定の命令セットの詳細については、該当する製品のユーザーガイドおよびリファレンスガイドを参照してください。
2013年という比較的最近になって、 The Registerの記事では、 AnTuTu Mobile Benchmark用のIntelコンパイラによって生成されたオブジェクトコードがコンパイル中にベンチマークコードの一部をスキップし、ARMプラットフォームと比較してパフォーマンスが実際よりも高く表示される原因となっていると主張された。[ 20 ]
以下は、1999年以降のIntel C++コンパイラのバージョンの一覧です。[ 21 ]
{{cite web}}: CS1 maint: bot: 元の URL の状態が不明です (リンク){{cite web}}: CS1 maint: bot: 元の URL の状態が不明です (リンク){{cite web}}: CS1 maint: bot: 元の URL の状態が不明です (リンク){{cite web}}: CS1 maint: bot: 元の URL の状態が不明です (リンク){{cite web}}: CS1 maint: bot: 元の URL の状態が不明です (リンク)