--- title: 'Intel oneAPI DPC++/C++コンパイラ' visible: false --- [toc] ## 利用環境{#enviroment} ### 利用できるバージョン・システム{#version} バージョン | システムA | システムB | システムC | システムG | クラウド | 備考 -------- | ----------- | ----------- | ----------- | ---- | ----- | ----- | ----- 2022.1.2 | + | + | + | - | + | Intel oneAPI 2022 ### 環境設定{#modules} | バージョン | moduleファイル名 | | --- | --- | | 2022.1.2 (default) | intel/2022 | システムにログインした時点で、Intelコンパイラがデフォルトで設定されています。 ```nohighlight $ module list Currently Loaded Modulefiles: x) SysB/2022 x) PrgEnvIntel/2022 x) intel/2022 ``` ログイン時に自動で環境設定を行いたい場合は、ログインシェルの起動ファイルに必要なmoduleコマンドを記述してください。詳細は[環境設定](/config)をご覧ください。 moduleコマンドの詳細は[Modules](/config/modules)をご覧ください。 ## コンパイル方法 ### コマンド | 言語 | コマンド | 実行形式 | | --- | --- | --- | | DPC++ | dpcpp | dpcpp [オプション] ファイル名 | | C | icx | icx [オプション] ファイル名 | | C++ | icpx | icpx [オプション] ファイル名 | ### オプション | オプション名 | 説明 | | --- | --- | | -o FILENAME | オブジェクトファイルの名前を指定します。 | | -mcmodel=medium | 2Gbyteを超えてメモリを使用できるようになります。<br>※SYCLでは使用できません。 | | -shared-intel | インテルが提供するライブラリをすべて動的にリンクします。 | | -fpic | 位置に依存しないコードを生成します。 | | -qopenmp | OpenMP指示子を有効にしてコンパイルします。<br>指定した GPU へのオフロードを有効にするには、-fopenmp-targets を併せて使用します。 | | -O0/-O1/-O2/-O3 | 最適化のレベルを指定します(デフォルトは-O2) | | -fast | プログラムの実行速度が最大になるように最適化します。-fastオプションにより、次のオプションが付与されます。<br>-ipo, -O3, -static, -fp-model fast=2 | | -ipo | 複数ファイル間で、手続き間の処理を最適化します。 | | -qopt-report | 実施した最適化についての情報をYAMLで出力します。 | | -qopt-report-file=KEYWORD | 実施した最適化についての情報を、ファイル(filename) / 標準エラー出力(stderr) / 標準出力(stdout)に出力します。 | ## コンパイル例{#sample} ### 逐次プログラム{#serial} ```nohighlight $ dpcpp test.cpp # dpc++の例 $ icx test.c # C言語の例 $ icpx test.cpp # C++の例 $ tssrun ./a.out # プログラムの実行 ``` ### OpenMPの利用{#openmp} OpenMPは、プログラムの並列化のためのオープン規格です。 ソースコードに#pragma ompで始まる指示を書き込み、所定のオプションをつけてコンパイルするだけで、コンパイラに自動で並列化を行わせることができます。 OpenMPへの指示を書き込んだソースコードをコンパイルするには、-qopenmpオプションをつけます。 ```nohighlight $ icx -qopenmp test.c ``` コンパイルしたプログラムを実行する際、-Aオプションでtとcに並列数を指定すると、その並列数でプログラムが実行されます。 ```nohighlight $ tssrun -A p=1:t=8:c=8 ./a.out # 並列数8を指定して実行 ``` ## マニュアル{#manual}