ヘテロジニアス・コンピューティング

ヘテロジニアス・コンピューティング  は、異なる種類のプロセッサを組み合わせて構築したコンピュータシステム上で演算を行なうことである。用途に応じて適したプロセッサに処理を分担させることによって全体的な効率を高める。

通常、異種的なプロセッサ環境では異なる複数の命令セットアーキテクチャ  を使用する。また、副プロセッサは主プロセッサとは大きく異なるアーキテクチャである。それゆえ、ヘテロジニアス環境向けソフトウェアの開発・実装には高い技術が必要となる。

1. 異種性
------

一般的にコンピューティングの文脈においてdate=2017年6月}}異なる命令セットアーキテクチャ  のことを言及する「異種性」とは、単に異なるマイクロアーキテクチャを持つのではなく、メインプロセッサがあるアーキテクチャを持ち、他のプロセッサが別のアーキテクチャを持つ、ということを意味する。

date=2021-03のヘテロジニアス・コンピューティングでは異なるISAを異なる方法で処理しなければならないことを意味していたが、date=2021-03では例えば、ヘテロジニアス・システム・アーキテクチャシステムが存在し、同じ集積回路上などにある複数の種類のプロセッサを使用する際の違いを解消しながら、両者の長所を提供する：CPUでオペレーティングシステムを走らせて従来の直列タスクを実行しながら、汎用GPU処理を行うなど。

モダンなコンピューティングシステムでは製造技術の向上によって以前の個別部品がシステム・オン・チップ  へと統合されるようになり、異種性のレベルが次第に高まっているdate=2017年6月}}。例えば多くの新しいプロセッサには他のデバイスと接続するための組み込み回路が含まれているほか、プログラマブル機能ユニットやハードウェアアクセラレータも搭載されている。

date=2021-03の研究では、複数のISAにより提供される多様性を利用したヘテロジニアスISAチップのマルチプロセッサが、一番良い同一ISAホモジニアスのアーキテクチャを21%も上回り、23%の省エネと32%の電力遅延時間積削減が可能であることを示している。AMDが2014年に発表したピン互換のARM / x86 SoC、コードネーム「Project Skybridge」は、ヘテロジニアスISAチップのマルチプロセッサが製作中であることを示唆しているdate=2017年6月}}。

1.1. 異種CPUトポロジー
---------------

異種CPUトポロジーのシステムは同一ISAを使用するものの、コア自体が異なった速度のものとなっているシステムのことである。この構成はどちらかというと対称型マルチプロセッサに似ている。

このようなトポロジーの一般的な使用はモバイルSoCの電力効率を向上させることにある。ARM big.LITTLEはその典型例であり、高速で高消費電力なコアと低速で低消費電力コアが組み合わされている。Apple Siliconも同様の構成のARMコアで作られている。また、IntelはLakefieldというコードネームのハイブリッドx86コアを製造しているが、それには命令セットの対応に大きな制限を含んでいる。

また、Alder Lakeも高性能コアと高効率コアを使用している。

2. プラットフォームの例
-------------

ヘテロジニアス・コンピューティングのプラットフォームは、ハイエンドサーバーと高性能計算機から携帯電話やタブレット用の低消費電力の素子まで、あらゆる領域で使用される。SoCによる実装以外にも、例えばCPUとGPUを搭載した汎用コンピュータはヘテロジニアス・コンピューティング環境であると言える。たとえSoCであっても、異種プロセッサのメモリ空間が統合されているものもあれば、統合されていないものもある。

高性能計算
Cray XD1
SRC コンピュータ SRC-6 と SRC-7
組み込みシステム 
テキサス・インスツルメンツ OMAP
アナログ・デバイセズ Blackfin
NVIDIA Tegra
Samsung Exynos
Apple "A" シリーズ
再構築可能計算
Xilinx Platform FPGAs  とZynqプラットフォーム
Intel "Stellarton" 
ネットワーク
Intel IXP ネットワークプロセッサ
Netronome NFP ネットワークプロセッサ
パーソナルコンピュータ向け汎用プロセッサ
AMD APU
IntelのGPU内蔵CPU
Apple M1 - Macに搭載
その他 
IBMのCell Broadband Engine - PlayStation 3に搭載
SpursEngine - IBM Cellプロセッサの派生型

3. プログラミング環境の例
--------------

副プロセッサ  をストリーム・プロセッシングで使うものや、主プロセッサ  と副プロセッサ  の密な連携が可能なものが存在する。黎明期は独自の専用プログラミング言語を利用するなど、実験的なプログラミング環境が多数出現したが、普及が進むにつれ、標準C/C++あるいはその独自拡張が第1級言語として選ばれることが多くなっている。

ハードウェアや技術によって抽象化のレベルや関数ポインタあるいは仮想関数の使用可否、ホストとゲスト間のUnified Shared Memory  やヘテロジニアス・ユニフォームメモリアクセス  への対応などが異なっている。

3.1. 現行の技術
----------

OpenCL Khronos Groupが管理・策定している並列コンピューティングのためのクロスプラットフォームなAPI仕様。 派生規格として、Webブラウザ上でヘテロジニアス・コンピューティングを行なうためのWebCLも標準として策定されているが、2021年3月現在、ネイティブに対応しているブラウザは存在しない。 当初Appleを中心に提唱されたが、その後Appleプラットフォームでは非推奨となった。 SYCL Khronos Groupが管理・策定しているヘテロジニアス・コンピューティング向けの抽象化レイヤー。OpenCLだけでなく、他のバックエンドにも対応する。IntelのCPU/GPU/FPGA開発環境であるoneAPIの中心にもなっている。ISO C++との互換性が考慮されている。 CUDA  NVIDIAによるGeForce / Quadro / Tesla / TegraシリーズGPU用のGPGPU開発・実行環境。C言語を拡張したCUDA Cによる開発を可能にする。NVIDIAによるコンパイラ実装//nvcc//だけでなく、オープンソースコンパイラのLLVMでもCUDAコンパイラの実装が始まっている 。また、PGI社からはCUDA Fortran Compilerが提供されている。 ヘテロジニアス・コンピューティング向け標準C++ライブラリのlibcu++  も存在する。libcu++はLLVMのlibc++の派生となっている。 HIP  CUDAに近いカーネル言語およびAPI。AMDによるROCm  プラットフォームの一環として、オープンソースで提供されている。実行環境としてAMD GPUに対応しているほか、バックエンドにCUDAコンパイラを利用することで、NVIDIA GPU上で動作可能なCUDAコードを生成することもできる。 CUDAコードをHIPコードへと変換するツールHIPIFYもオープンソースで提供されている。 OpenMP  OpenMP
は4.0以降offloadに対応するようになった。GCC 5以降やLLVM/Clangなどがこれに対応している。 SPMD Programming Language インテルによって開発された、C言語を拡張したSPMD対応言語であり、Intel SPMD Program Compiler  でコンパイル可能。ISPCはオープンソースであり、バックエンドにLLVMを使用している。IntelのCPUやXeon Phiだけでなく、NVIDIA Kepler GPUやARMにも対応している。ISPCを導入している例としては、オープンソースのレイトレーシングエンジンであるEmbreeがある。 DirectCompute マイクロソフトが開発・配布しているDirectXテクノロジーのひとつであり、DirectX 11/DirectX 12セットに含まれるGPGPU向けのAPI。GPGPU向けのシェーダーステージとして導入されたDirect3Dコンピュートシェーダー  を利用する。HLSLをカーネル記述言語とする。グラフィックス連携用途を重視している。動作環境はWindows Vista以降のWindowsプラットフォームおよびXbox One以降のXboxプラットフォーム。 OpenGLコンピュートシェーダー DirectXに搭載されている前述のコンピュートシェーダー同様、OpenGLでもバージョン4.3でGPGPU向けのシェーダーステージが標準化された。GLSLをカーネル記述言語とする。バージョン4.6のGL_ARB_gl_spirv拡張によりSPIR-V中間表現に対応した。 OpenGL ESではバージョン3.1で導入された。 Webブラウザ向けのOpenGL ES派生規格であるWebGLでは、まだコンピュートシェーダーに対応しておらず、草案の段階である。 Vulkanコンピュートシェーダー OpenGLと同様にVulkanにもコンピュートシェーダーがある。シェーダーコードの中間表現にはSPIR-Vが採用されており、オフラインコンパイルが可能。主にGLSLまたはHLSLをカーネル記述言語に使用する。 Metalコンピュートシェーダー AppleはOpenCLを非推奨とし、代替としてMetal API
のコンピュートシェーダーを推奨している。カーネルの記述にはMetal Shading Language  を用いる。macOS/iOSなどのAppleプラットフォーム上でのみ利用可能。 OpenACC OpenMPのようにコード中にディレクティブを挿入することで、並列処理のハードウェアアクセラレートを行なえるようにする標準規格であり、Cray 、NVIDIA、PGI 、CAPSがヘテロジニアスシステムに向けて設計した。 PGIのコンパイラに初めて搭載されdate=2021-03}}、その後、GCC 5.0以降にも搭載されている。HPEはCCE  10.0.0以降でOpenACCを非推奨とし、OpenMPを推奨するようになっている。 NVIDIAは2020年にOpenACCなどの包括的なサポートを含むHPC SDKを発表した。

3.2. 過去の技術
----------

C++ AMP マイクロソフトが策定した、ハードウェアアクセラレートされた並列処理をC++言語で記述できるようにする高レベルのライブラリ・言語拡張。公式の実装としてはDirectComputeをバックエンドとするMicrosoft Visual C++がある。ただしVisual C++ 2022以降では非推奨となった。 またオープンソースのC++ AMP実装「HCC」も存在したが、その後非推奨となり、CUDA類似のHIP APIをベースとするHIP-Clangに置き換えられた。 OpenHMPP  OpenACC同様、ディレクティブベースのヘテロジニアス・コンピューティング向けプログラミング標準。 OpenMP LEO  インテルによるIntel MIC  およびGFXへオフロードするためのOpenMP拡張。ICC  に実装されていた。 Close to Metal AMD社によるATI系GPUのストリームプロセッサインターフェイス。ハードウェアに近いローレベル制御を可能とする。 AMD Stream AMDによるATI系GPU用のGPGPU開発・実行環境。CTMをCompute Abstraction Layerによって抽象化し、Brook言語をCAL用に拡張したBrook+言語による開発を可能にする。 なおAMDは「GPGPUでDirectX 11およびOpenCLをフルサポートする」と発表し 、[[AMD Catalystdate=2015年2月}}。 その後、同社はHSA推進とともに、独自規格ではなくOpenCLをヘテロジニアス戦略の中核とする方向に舵を切り直した。AMDによるCPU/GPU/APU対応の総合基盤テクノロジーは「AMD Accelerated Parallel Processing」と呼ばれており、SDKの名称もATI Stream SDKからAMD APP SDKに変更・統一されたが、その後AMD APP
SDKは廃止され、GPUコンピューティングの技術基盤はオープンソースのROCmプラットフォームに移行されることになった。 Lib Sh  ウォータールー大学コンピュータグラフィックス研究室の成果に基づいた、RapidMindによるシェーダープログラミングおよびGPGPUのためのメタプログラミング技術。C++言語による開発を可能にする。LGPLライセンスで公開されている。 RapidMind RapidMindによる商用並列コンピューティング開発環境。GPU／マルチコアCPU／Cellプロセッサをバックエンドに利用できる。C++言語による開発を可能にする。 BrookGPU  スタンフォード大学コンピュータグラフィックス研究室によるストリーム・コンピューティング開発環境。GPUおよびOpenMPによるマルチコアCPU演算をバックエンドに利用できる。C言語  を拡張したBrook言語による開発を可能にする。BSDライセンスおよびGPLライセンスで公開されている。 PeakStream PeakStreamによる商用ストリーム・コンピューティング開発環境。GPU / マルチコアCPU / Cellプロセッサをバックエンドに利用できる。PeakStreamは2007年6月頃までにGoogleによって買収されている。

4. 出典
-----

5. 関連項目
-------

ヘテロジニアスマルチコア