インテル® コンパイラーを使用した
OpenMP* による並列プログラミング
セッション 1: はじめに
IA Software User Society (iSUS)
編集長 すがわら きよふみ

このセッションの目的
明示的な並列プログラミング手法として注目されてきた OpenMP* による並列プロ
グラミングに加え、インテル® コンパイラーがサポートする OpenMP* 4.0 と 4.5 の機能を使用したベクトル・プログラミングとオフロード・プログラミングの概要をリフレッシュし、インテル® コンパイラー V19.1 でサポートされる OpenMP* 5.0 の機能と実装を紹介します。さらに新たなアクセラレーター・デバイスへのオフロードについて考えますセッションの対象者
すでに OpenMP* でマルチスレッド・プログラミングを開発し、4.0 以降でサポートされる新たなベクトル化とオフロードを導入し、アプリケーションのパフォーマンス
向上を計画する開発者| 2© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

セッションリスト
セッション

説明

はじめに
(13:35 – 14:20)

異なるバージョンのインテル® コンパイラーや異なるコンパイラー間で OpenMP* を使用する
注意点や制限について説明します

OpenMP* のタスク機能(14:30 – 15:30)

OpenMP* 3.1 で追加されたタスク機能が 4.0 から 4.5 でどのように進化したかを例を使用して説明し、最新の OpenMP* 5.0 で強化された新機能を紹介します

OpenMP* の SIMD 機能(13:30 – 14:30)

OpenMP* のスレッド化機能を使用してプログラマーがマルチスレッドの動作をプログラミン
グしたように、OpenMP* 4.0 からは omp simd を使用してプログラマーが明示的にベクトル化もできるようになりました。OpenMP* simd に関連する機能を 4.0 から 5.0 までの進化を追って紹介します

OpenMP* のオフロード機能(14:30 – 15:30)

OpenMP* 4.0 で追加されたオフロード機能を利用することで、これまで共有メモリー型並列処理に加え分散メモリー型の並列処理を表現できるようになりました。このセッションでは、注目されるヘテロジニアス・プログラミング環境での OpenMP* オフロード機能について説明
します

OpenMP* 5.0 の注目する機能 セッション2、3、4でカバーされなかった OpenMP* 5.0 のそのほかの機能について紹介します
インテル® C++/Fortran コン
パイラーのバージョン 19.1 を使用して GPU オフロードに備えましょう

oneAPI 向けのデータ並列 C++ (DPC++) へ移行する前に、現行のインテル® C++/Fortran コ
ンパイラー V19.1 やインテル® oneAPI HPC ツールキットに含まれるベータ版インテル®
C++/Fortran コンパイラー 2021 を使用して簡単にインテル® グラフィックスへのオフロードを行うソフトウェアを開発および検証方法を紹介します| 3© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

内容
はじめに (OpenMP* が必要とされる背景) と概要(OpenMP* とは、歴史、各バージョンの機能概要)◼ OpenMP* の各バージョンの機能(4.0、4.5 および 5.0 の注目される新機能)◼ 次世代インテル® コンパイラー (nextgen) の機能◼

| 4© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

はじめにコードの現代化 (モダニゼーション)◼ OpenMP* が求められる背景◼

OpenMP* とは (歴史的背景)◼ OpenMP* を使用するには◼ インテル® コンパイラーにおける OpenMP* サポート◼

| 5
© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

Think Parallel or Perish

あれから 11 年 …

| 6© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

Vectorize or Die
Think Parallel or Perish

Code Modernization| 7© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

Code Modernization (コードのモダン化)
マルチコア・
プロセッサー

高帯域幅プロセッサー間通信
高速 I/O
高速メモリー

スレッド並列大きなキャッシュ

メニーコア・
プロセッサー| 8© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

マルチレベルの並列性を実装する 5 つのステップ
3: スカラーとシリアルの最適化
ベクトル化
ステージ 2:4:並列化
1:最適化ツールとライブラリーの活用
5:
マルチコアからメニーコアへスケール

http://www.isus.jp/article/article-parallel/what-is-code-modernization/| 9© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

Parallel + SIMD は前進への鍵 (少し前…)
インテル® Xeon® プロセッサーは、両者とも並列性を高めています

インテル®
Xeon®
プロセッサー
64 ビット

インテル®
Xeon®
プロセッサー
開発コード名Woodcrest EP

インテル®
Xeon®
プロセッサー
開発コード名Nehalem EP

インテル®
Xeon®
プロセッサー
開発コード名Westmere EP

インテル®
Xeon®
プロセッサー
開発コード名Sandy Bridge EP

インテル®
Xeon®
プロセッサー
開発コード名Ivy Bridge EP

コア

1

2

4

6

8

12

スレッド

2

2

8

12

16

SIMD 幅

128

128

128

128

256

さらに多いコア

インテル®
Xeon®
プロセッサー
開発コード名Haswell EP

インテル®
Xeon®
プロセッサー
開発コード名Skylake
Serverインテル® Xeon Phi™
x100 コプロセッサー
開発コード名:Knights Cornerインテル® Xeon Phi™
x200 プロセッサー& コプロセッサー
開発コード名Knights Landing

18

28

61

72

24

36

56

244

288

256

256

512

512

512

さらに多くのスレッド

より広いベクトル

OpenMP* は parallel + SIMD を前進させる最も重要な機能の 1 つ* ark.intel.com で公開されている出荷済の製品仕様| 10© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

Parallel + SIMD は前進への鍵 (現在)インテル® Xeon® プロセッサーは、両者とも並列性を高めています

インテル®
Xeon®
プロセッサー
64 ビット

インテル®
Xeon®
プロセッサー
開発コード名Woodcrest EP

インテル®
Xeon®
プロセッサー
開発コード名Nehalem EP

インテル®
Xeon®
プロセッサー
開発コード名Westmere EP

インテル®
Xeon®
プロセッサー
開発コード名Sandy Bridge EP

インテル®
Xeon®
プロセッサー
開発コード名Ivy Bridge EP

コア

1

2

4

6

8

12

スレッド

2

2

8

12

16

SIMD 幅

128

128

128

128

256

さらに多いコア

インテル®
Xeon®
プロセッサー
開発コード名Haswell EP

インテル®
Xeon®
プロセッサー
開発コード名Skylake
Server

第 2 世代インテル® Xeon
スケーラブル・プロセッサー
開発コード名Cascade Lake

18

28

56

24

36

56

112

256

256

512

512

さらに多くのスレッド+ アクセラレーター

より広いベクトル

OpenMP* は parallel + SIMD を前進させる最も重要な機能の 1 つ* ark.intel.com で公開されている出荷済の製品仕様| 11© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

新たなプログラミングの
課題
⚫

⚫

⚫

⚫

さまざまなデータ構造を使用するハードウェ
アのセットが存在します

CPU

GPU

AI

FPGA

スカラー

ベクトル

行列

空間

残念ながら、それらに対する共通のプログラ
ミング言語や API はありません
また、それぞれのプラットフォームにおいてツールのサポートに一貫性もありません
プラットフォームごとに個別のソフトウェア
投資/習得が必要です

SVMS
| 12
© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

インテル® oneAPI⚫

⚫

インテル® oneAPI プロジェクトはさま
ざまなアーキテクチャーにわたる開発を容易にする統合プログラミング・モデル
を提供
データ並列 C++ 言語とインテル®
oneAPI ライブラリー API により並列
処理を表現

⚫

妥協のないパフォーマンス

⚫

CPU、GPU、AI、および FPGA をサポート⚫

業界標準およびオープン仕様ベース⚫

OpenMP*、Fortran、MPI などとの相互運用性最適化されたアプリケーション

インテル®
oneAPI
ツール

最適化されたミドルウェア/
フレームワークインテル® oneAPI 言語とライブラリー

CPU

GPU

AI

FPGA

スカラー

ベクトル

行列

空間
| 13

© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

はじめにコードの現代化 (モダニゼーション)◼ OpenMP* が求められる背景◼

OpenMP* とは (歴史的背景)◼ OpenMP* を使用するには◼ インテル® コンパイラーにおける OpenMP* サポート◼

| 14
© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

OpenMP* API
ほぼ 23 年の技術計算/HPC における共有メモリー並列プログラミング (C/C++ とFortran) 向けの業界標準:⚫ 最新の仕様: OpenMP* 5.0 (2018 年 11 月)⚫ ディレクティブ (C/C++ ではプラグマ) ベース⚫ ベンダーとプラットフォームにわたる移植性 - インテルは OpenMP* ARB (アーキテクチャー・レビュー委員会) のメンバーであり、OpenMP* のサポートを完全にコ
ミット⚫ 各種並列性をサポート: スレッド、タスク、SIMD、オフロード⚫ インクリメンタルな並列処理をサポート
仕様ドキュメント、サンプル、および各種情報は www.openmp.org (英語) を参照してください| 15© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

OpenMP* の歴史
プログラマーの負担を軽減するオフ
ロード機能の拡張、ヘテロジニアス・プ
ログラミングの機能向上、メモリー管理と同期機能の改善春に 7 つのベンダーと DOE
は並列ループの開発に同意しOpenMP* ARB を組織。10 月にFortran 向けのOpenMP* 仕様
1.0 がリリース

Fortran と C/C++の統合: 統合した
ものは両方の個別の仕様よりも拡大している。
最初の OpenMP*
国際ワークショップが開催される。これにより、ユーザー
がベンダーと対話できる主要な
フォーラムが生まれた

cOMPunity
OpenMP*
ユーザーグループ
が設立され、北米、
欧州、アジアでワークショップを開催

マイナーな修正
1.1

5.0
タスク並列処理導入。OpenMP*
における問題は、タスクの動的特性に対応しつつスレッドベースの特性を維持するのに苦労することだった

C/C++ でmin/max
リダクションをサ
ポート

1.0
2.0

MPI と OpenMP*を使用した最初のハイブリッド・アプリケーションの登場

taskloop、task の優先順位、
doacross ループ、およびロックのヒントをサポート。
非同期オフロードとホスト実行の依存関係をサポート

4.0
4.5

Fortran と C/C++
仕様の統合が開始
される

1.0

1997

3.1

3.0

2.5

アクセラレーター
やコプロセッサー・
デバイスへのオフロード、SIMD
並列処理などをサポート。
OpenMP* の従来の機能を拡張

2.0

1998

1999

2000

2001

2002

2003

2004

2005

2006

2007

2008

2009

2010

2011

2012

2013

2014

2015

…

| 16
© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

2018

今後の OpenMP* ロードマップ⚫

主要リリースに向けた今後の計画
主要リリースの間には、 1 つのマイナーリリースが発表されます (例えば 5.1)⚫

(少なくとも) 1 つのテクニカルレポート (TR) と機能レビューが毎年行われます⚫

OpenMP*
5.0

TR8+

OpenMP*
5.1

TR10*

TR11+

OpenMP*
6.0(2018 年 11 月)(2019 年 11 月)(2020 年 11 月)(2021 年 11 月)(2022 年 11 月)(2023 年 11 月)

パブリック・コメ
ント・ドラフト(TR9+)

パブリック・コメ
ント・ドラフト(TR12+)+ TR に割り当てられる番号は追加の TR がリリースされると変更されます| 17© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

コンパイラーが OpenMP* をサポートするか?
◼

◼

OpenMP* は最も簡単なマルチスレッド・プログラミング・モデルであるが、コンパイラーが OpenMP* をサポートしている必要がある

OpenMP* をサポートするコンパイラーは、_OPENMP マクロに仕様が公開された年月を数値で返す
仕様のバージョン値

代表的なコンパイラー

OpenMP* 5.0 TR4

201611

インテル® コンパイラー V18.0、V19.0、V19.1

OpenMP* 4.5

201511

インテル® コンパイラー V17.0、 gcc 6.1

OpenMP* 4.0

201307

インテル® コンパイラー V14.0、 gcc 4.9 (offload 5.1)

OpenMP* 3.1

201107

インテル® コンパイラー V12.1、 gcc 4.7

OpenMP* 3.0

200805インテル® コンパイラー V11.0、 gcc 4.4

OpenMP* 2.5

200505インテル® コンパイラー V9.0、 gcc 4.2

18

| 18
© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

記述している構文が OpenMP* のどの仕様か?

19

http://openmp.org/wp/openmp-specifications/ (英語)© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

| 19

ソースとコンパイラーのバージョンの不一致
ソースコードで使用する OpenMP* の仕様よりもコンパイラーがサポートする OpenMP* 仕様が古い場合、コンパイルエラーとなります_OPENMP マクロでコンパイルを制御:#if _OPENMP >= 201611#pragma omp taskloop reduction(+:sum) private(x)| 20© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

インテルの OpenMP* ライブラリーのよくある質問
◼
◼
◼
◼
◼

◼
◼
◼

ほかのコンパイラーとのソースとオブジェクトの互換性
インテル® コンパイラーの異なるバージョンを使用するガイドライン
インテル® コンパイラーとその他のコンパイラーを併用するガイドライン
OpenMP* ライブラリーをその他のコンパイラーで使用する際の制限
Visual Studio* でインテルの OpenMP* ライブラリーを使用する際の制限

maxOS* で OpenMP* を使用する際の注意
Fortran と C/C++ の混在
インテルの OpenMP* のサポート・ライブラリー| 21© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

ほかのコンパイラーとのソースとオブジェクトの互換性◼

インテル® C++ コンパイラーには、次のコンパイラーの OpenMP*
サポートとソースおよびオブジェクト・レベルの互換性があります:◼ Microsoft* Visual C++* 2012 以降のコンパイラー (Windows*)◼ GCC 4.4.2 以降 (Linux*)◼ インテル® C++ コンパイラー 10.0 以降

コンパイラーが異なるとサポートされる OpenMP* 仕様も異なります。
アプリケーションが使用する OpenMP* 機能に基づいて、どのバージョ
ンの OpenMP* 仕様が必要かを判断してください| 22© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

複数のソースコードの一部で OpenMP* を使用する◼

もしくは異なるバージョンのコンパイラーでプロジェクトをビルドする場合

main() {printf("OpenMP version %d ¥n", _OPENMP);
printf("OpenMP version %d ¥n", omp());}

インテル® コンパイラー 17.0 でコンパイル

int omp(void){
return _OPENMP;}

インテル® コンパイラー 16.0 でコンパイル

Visual C++* 2015 のコンパイラーでコンパイル| 23© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

実行環境を確認する便利な機能
OpenMP* 4.0 以降のライブラリーでは、環境変数 OMP_DISPLAY_ENV が利用できます。 true に設定すると、実行時に情報を表示できます

true、false (デフォルト)、verbose が設定できます| 24© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

インテル® コンパイラーの異なるバージョンを使用するガイドライン
リンク時または実行時の問題を回避するには、次の点に注意してください:◼

◼

現行のインテル® C++ コンパイラーで生成されたオブジェクト・モジュールは、インテル® コンパイラー 10.0 より前のバージョンでコンパイルされたオブジェクト・モジュールとは互換性がありません
OpenMP* スタティック・ライブラリーではなく、ダイナミック・ライブラリーを使用して、ライブラリーの複数のコピーが 1 つのプログラムにリンクされないようにします(Linux*、macOS*)| 25© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

インテル® C++ コンパイラーとその他のコンパイ
ラーを併用するガイドライン
リンク時または実行時の問題を回避するには、次の点に注意してください:◼ 常にインテル® C++ コンパイラーの OpenMP* ライブラリーを使用してリンクします。これにより、異なるコンパイラーから OpenMP* ランタイム・ライブラリーの複数のコピーがリンクされるのを防ぎます◼ 可能であれば、すべての OpenMP* ソースを同じコンパイラーでコンパイルします◼ OpenMP* スタティック・ライブラリーではなく、ダイナミック・ライブラリーを使用
して、ライブラリーの複数のコピーが 1 つのプログラムにリンクされないようにします| 26© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

OpenMP* ライブラリーをその他のコンパイラーで使用する際の制限
オブジェクト・レベルの互換性には、threadprivate オブジェクトに次の制限があります:◼

◼

◼

インテル® C++ コンパイラーは threadprivate データを参照する際、デフォルト (/Qopenmpthreadprivate:legacy) で GCC や Microsoft* Visual C++* コンパイラーとは異なる方法を用います
コードで変数を threadprivate と宣言し、インテル® C++ コンパイラーと GCC/Visual C++*
コンパイラーの両方でコンパイルする場合、インテル® C++ コンパイラーでコンパイルされたコードと GCC/Visual C++* コンパイラーでコンパイルされたコードでは、同じスレッドによって参照されていたとしても、異なる場所の変数が参照されます
GCC/Visual C++* コンパイラーでコンパイルされたコードと同じ threadprivate 場所を参照
させるには、インテル® C++ コンパイラーでのコンパイル時に、/Qopenmpthreadprivate:compat オプションを使用します| 27© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

Visual Studio* でインテルの OpenMP*
ライブラリーを使用する際の制限
Windows* システムで、Visual Studio* の Visual C++ 開発環境を一部変更すると、
インテル® C++ コンパイラーと Visual C++* を使用して、インテルの OpenMP* ライ
ブラリーを使用するアプリケーションを作成することができます
Microsoft Visual* C++ では、_OPENMP_NOFORCE_MANIFEST シンボルが定義されていなければなりません。定義されていない場合は、vcomp90 dll のマニフェストがインクルードされます。 これにより、ビルドシステムでは問題ありませんが、この DLL
がインストールされていない別のシステムにアプリケーションを移動すると問題が発生しますcl /MD /openmp /c f1.c f2.c
icl /MD /Qopenmp /c f3.c f4.clink f1.obj f2.obj f3.obj f4.obj /out:app.exe /nodefaultlib:vcomp libiomp5md.lib| 28© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

macOS* で OpenMP* を使用する際の注意◼

◼

◼

古いバージョンの macOS* プラットフォームでは、インテル® C++ コンパイラーとGCC コンパイラーを併用してコンパイルできますmacOS* 10.9 以降のプラットフォームには、GCC コンパイラーの代わりに Clang
コンパイラーが含まれていますが、このコンパイラーは OpenMP* 実装をサポートしていません。 Clang コンパイラーの将来のバージョンでは OpenMP* 実装がサポートされる可能性がありますmacOS* 10.9 以降 (Xcode* 5.x 以降) には GCC コンパイラーが含まれていませんが、インテル® C++ コンパイラーと一緒に GCC コンパイラーをインストールできます| 29© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

Fortran と C/C++ の混在◼

◼

◼

gcc コンパイラー、インテル® C++ コンパイラー、インテル® Fortran コンパイラー
でコンパイルされた OpenMP* オブジェクト・ファイルを混在させることができますインテル® Fortran コンパイラーと gfortran コンパイラーでコンパイルされたオブ
ジェクト・ファイルを混在させることはできません
インテル® C++ コンパイラーを使用してアプリケーションをリンクするこができま
すが、-l オプションを使用して、リンク行で複数の gfortran ライブラリーを渡す必要がありますC ソースとFortran ソースの混在

gfortran -fopenmp -c foo.f
icc -qopenmp -c ibar.c
icc -qopenmp foo.o bar.o -lgfortranbegin -lgfortran| 30© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

OpenMP* のサポートライブラリー
OS

ダイナミック・リンク

スタティック・リンク

Linux*

libiomp5.so

libiomp5.a

macOS*

libiomp5.dylib

libiomp5.a

Windows*

libiomp5md.lib
libiomp5md.dll

なし• OpenMP* を使用するオプションは、インテル製マイクロプロセッサーおよび互換
マイクロプロセッサーの両方で利用可能ですが、両者では結果が異なります• 両者の結果が異なる可能性のある OpenMP* 構造および機能は、ロック (内部的なものおよびユーザーが利用可能なもの)、SINGLE 構造、バリア (暗黙的および明示的)、並列ループ・スケジュール、リダクション、メモリーの割り当て、スレッド・ア
フィニティー、バインドです| 31© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

インテル® コンパイラーの OpenMP* 関連のオプション◼

◼

◼

/Qopenmp ; OpenMP* ディレクティブに基づいてコンパイラーがマルチスレッド・コードを生成するようにします。無効にするには/Qopenmp- を使用します/Qopenmp-stubs ; シーケンシャル・モードで OpenMP* プログラムをコンパイルします。OpenMP* ディレクティブは無視され、OpenMP* スタブ・ライブラリーがリンクされます (シーケンシャル)/Qopenmp-lib:<ver> ; リンクする OpenMP* ライブラリーのバージョンを選択します◼

◼

/Qopenmp-task:<arg> ; サポートする OpenMP* タスクモデルを選択します◼

◼

◼

(廃止予定)

omp - OpenMP* 3.0 タスクをサポートします (デフォルト)。 intel - インテルのタスク・キューイングをサポートします/Qopenmp-threadprivate:<ver> ; 使用する threadprivate 実装を選択します◼

◼

compat – Microsoft* 互換の OpenMP* ランタイム・ライブラリーを使用します (デフォルト)

compat - GCC/Microsoft* 互換のスレッド・ローカル・ストレージを使用します。legacy - インテル互換の実装を使用します(デフォルト)/Qopenmp-simd ; OpenMP* SIMD コンパイルを有効にします。/Qopenmp を指定するとデフォルトで有効になります。無効にす
るには /Qopenmp-simd- を使用します/Qopenmp-offload[:<kind>] ; target プラグマの OpenMP* オフロードコンパイルを有効にします。このオプションは、インテル®
MIC アーキテクチャーおよびインテル® グラフィックス・テクノロジーにのみ適用されます。/Qopenmp を指定するとデフォルトで有効になります。無効にするには /Qopenmp-offload- を使用します。target プラグマのデフォルトのデバイスを指定します◼

host - オフロードの準備はしますが、ターゲットコードをホストシステムで実行します◼

mic - インテル® MIC アーキテクチャー、gfx - インテル® グラフィックス・テクノロジー| 32© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

まとめ
◼

◼

◼

最初のセッションでは、OpenMP* が広く導入される背景と、これまでの歴史を振り返ってみました
異なるバージョンのインテル® コンパイラーや異なるコンパイラー間
で OpenMP* を使用する注意点や制限についてもふれました

OpenMP* は進化し続けています。今後も新たなハードウェアやその能力に合わせて多くの並列化向けの機能が追加されていきますIntel、インテル、Intel ロゴ、Intel Inside、Intel Inside ロゴ、Xeon、Intel Xeon Phi は、アメリカ合衆国および / またはその他の国におけるIntel Corporation またはその子会社の商標です。
© 2020 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

| 33

ソフトウェア・セミナー