この記事には独自研究 が含まれているおそれがあります。 問題箇所を検証 し出典を追加 して、記事の改善にご協力ください。議論はノート を参照してください。(2021年3月 )
ヘテロジニアス・コンピューティング (heterogeneous computing) は、異なる種類のプロセッサを組み合わせて構築したコンピュータシステム上で演算を行なうことである。用途に応じて適したプロセッサに処理を分担させることによって全体的な効率を高める[ 1] 。
通常、異種的(ヘテロジニアス)なプロセッサ環境では異なる複数の命令セット アーキテクチャ (ISA) を使用する。また、副プロセッサは主プロセッサとは大きく異なるアーキテクチャである。それゆえ、ヘテロジニアス環境向けソフトウェアの開発・実装は異種プロセッサ間の連携で工夫が必要になるなどして難易度が高くなる。
異種性
一般的にコンピューティングの文脈において[いつ? ] 異なる命令セット アーキテクチャ (ISA) のことを言及する「異種性」とは、単に異なるマイクロアーキテクチャ を持つのではなく(例えば浮動小数点 の数値処理はこの特殊例であり異種性と呼ばれることは稀)、メインプロセッサがあるアーキテクチャを持ち、他のプロセッサが別の(普通は非常に異なり、複数の場合もある)アーキテクチャを持つ、ということを意味する。
かつて [いつ? ] のヘテロジニアス・コンピューティングでは異なるISAを異なる方法で処理しなければならないことを意味していたが、今 [いつ? ] では例えば、ヘテロジニアス・システム・アーキテクチャ (HSA)システムが存在し[ 2] 、同じ集積回路 上などにある複数の種類のプロセッサ(CPU とGPU など[ 3] )を使用する際の(ユーザーにとっての)違いを解消しながら、両者の長所を提供する:CPUでオペレーティングシステムを走らせて従来の直列タスクを実行しながら、汎用GPU処理を行うなど(GPUはよく知られる3Dグラフィックスレンダリングの他に、非常に大きなデータセットに対する数学的に集中された計算を行うことができる)。
モダンなコンピューティングシステムでは製造技術の向上によって以前の個別部品がシステム・オン・チップ (SoC) へと統合されるようになり、異種性のレベルが次第に高まっている[要出典 ] 。例えば多くの新しいプロセッサには他のデバイス(SATA 、PCI 、イーサネット 、USB 、RFID 、無線 、UART 、メモリコントローラ )と接続するための組み込み回路が含まれているほか、プログラマブル機能ユニットやハードウェアアクセラレータ (GPU 、暗号 コプロセッサ 、プログラマブルネットワークプロセッサ、A/Vエンコーダ/デコーダなど)も搭載されている。
最近 [いつ? ] の研究では、複数のISAにより提供される多様性を利用したヘテロジニアスISAチップのマルチプロセッサが、一番良い同一ISAホモジニアスのアーキテクチャを21%も上回り、23%の省エネと32%のエネルギー遅延積 (英語版 ) 削減が可能であることを示している[ 4] 。AMDが2014年に発表したピン互換のARM / x86 SoC、コードネーム「Project Skybridge」[ 5] は、ヘテロジニアスISA(ARM+x86)チップのマルチプロセッサが製作中であることを示唆している[要出典 ] 。
異種CPUトポロジー
異種CPUトポロジー のシステムは同一ISAを使用するものの、コア自体が異なった速度のものとなっているシステムのことである[ 6] 。この構成はどちらかというと対称型マルチプロセッサ に似ている(このようなシステムは技術的には非対称型マルチプロセッサ (英語版 ) に当たるものの、コアの役割やデバイスアクセスには違いが存在しない)。
このようなトポロジーの一般的な使用はモバイルSoCの電力効率を向上させることにある。ARMのbig.LITTLE はその典型例であり、高速で高消費電力なコアと低速で低消費電力コアが組み合わされている[ 7] 。A10 以降のApple Silicon も同様の構成のARMコアで作られている。x86ではAMD のZen4, Zen4cやIntelのAlder Lake [ 8] がこれに該当する。
プラットフォームの例
ヘテロジニアス・コンピューティングのプラットフォームは、ハイエンドサーバーと高性能計算機から携帯電話やタブレット用の低消費電力の素子まで、あらゆる領域で使用される。SoCによる実装以外にも、例えばCPU とGPU を搭載した汎用コンピュータはヘテロジニアス・コンピューティング環境であると言える。たとえSoCであっても、異種プロセッサのメモリ空間が統合されているものもあれば、統合されていないものもある。
高性能計算
組み込みシステム (DSP とモバイルプラットフォーム)
再構築可能計算
Xilinx Platform FPGAs (Virtex-II Pro, Virtex 4 FX, Virtex 5 FXT) とZynq プラットフォーム
Intel "Stellarton" (Atom + アルテラ FPGA )
ネットワーク
パーソナルコンピュータ向け汎用プロセッサ
その他 (ゲーム専用機など)
プログラミング環境の例
副プロセッサ (ゲスト) をストリーム・プロセッシング で使うものや、主プロセッサ (ホスト) と副プロセッサ (ゲスト) の密な連携が可能なものが存在する。黎明期は独自の専用プログラミング言語を利用するなど、実験的なプログラミング環境が多数出現したが、普及が進むにつれ、標準C /C++ あるいはその独自拡張が第1級言語として選ばれることが多くなっている。
ハードウェアや技術によって抽象化のレベルや関数ポインタ あるいは仮想関数 の使用可否、ホストとゲスト間のUnified Shared Memory (USM) やヘテロジニアス・ユニフォームメモリアクセス (hUMA) への対応などが異なっている。
現行の技術
OpenCL
Khronos Group が管理・策定している並列コンピューティングのためのクロスプラットフォームなAPI仕様。
派生規格として、Webブラウザ上でヘテロジニアス・コンピューティングを行なうためのWebCL も標準として策定されているが、2021年3月現在、ネイティブに対応しているブラウザは存在しない。
当初Appleを中心に提唱されたが、その後Appleプラットフォームでは非推奨となった。
SYCL
Khronos Groupが管理・策定しているヘテロジニアス・コンピューティング向けの抽象化レイヤー。OpenCLだけでなく、他のバックエンドにも対応する。IntelのCPU/GPU/FPGA開発環境であるoneAPI (英語版 ) の中心にもなっている。ISO C++との互換性が考慮されている[ 10] 。
CUDAコードをSYCLコードへと変換するツールSYCLomaticもオープンソースとして提供されている[ 11] 。
CUDA (Compute Unified Device Architecture)
NVIDIAによるGeForce / Quadro / Tesla / Tegra シリーズGPU用のGPGPU開発・実行環境。C言語 を拡張したCUDA Cによる開発を可能にする(Ver.2.2以降はC++ 言語を拡張したCUDA C++による開発も可能となっている)。NVIDIAによるコンパイラ実装nvcc だけでなく、オープンソースコンパイラのLLVMでもCUDAコンパイラの実装が始まっている[ 12] [ 13] 。また、PGI社からはCUDA Fortran Compilerが提供されている[ 14] 。Intel Xe 向けにコンパイルするためのZLUDAもある[ 15] (開発停止中)。
ヘテロジニアス・コンピューティング向け標準C++ライブラリのlibcu++ (NVIDIA C++ Standard Library) も存在する。libcu++はLLVMのlibc++の派生となっている[ 16] 。
HIP (Heterogeneous-Compute Interface for Portability)
CUDAに近いカーネル言語およびAPI。AMDによるROCm (Radeon Open Compute) プラットフォームの一環として、オープンソースで提供されている[ 17] 。実行環境としてAMD GPUに対応しているほか、バックエンドにCUDAコンパイラを利用することで、NVIDIA GPU上で動作可能なCUDAコードを生成することもできる。
CUDAコードをHIPコードへと変換するツールHIPIFYもオープンソースで提供されている[ 18] 。
OpenMP (4.0以降)
OpenMP は4.0以降offloadに対応するようになった。GCC 5以降[ 19] やLLVM/Clang [ 20] [ 21] などがこれに対応している。
SPMD Programming Language
インテルによって開発された、C言語を拡張したSPMD (英語版 ) 対応言語であり、Intel SPMD Program Compiler (ISPC) でコンパイル可能[ 22] 。ISPCはオープンソースであり、バックエンドにLLVMを使用している[ 22] 。IntelのCPUやXeon Phiだけでなく、NVIDIA Kepler GPU[ 23] やARM にも対応している。ISPCを導入している例としては、オープンソースのレイトレーシング エンジンであるEmbreeがある[ 24] 。
DirectCompute
マイクロソフト が開発・配布しているDirectX テクノロジーのひとつであり、DirectX 11/DirectX 12セットに含まれるGPGPU向けのAPI。GPGPU向けのシェーダーステージとして導入されたDirect3D コンピュートシェーダー (compute shader) を利用する。HLSL をカーネル記述言語とする。グラフィックス連携用途を重視している[ 25] 。動作環境は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 では、まだコンピュートシェーダーに対応しておらず、草案の段階である[ 26] 。
Vulkanコンピュートシェーダー
OpenGLと同様にVulkan にもコンピュートシェーダーがある。シェーダーコードの中間表現にはSPIR-Vが採用されており、オフラインコンパイルが可能。主にGLSLまたはHLSLをカーネル記述言語に使用する。
Metalコンピュートシェーダー
AppleはOpenCLを非推奨とし、代替としてMetal API のコンピュートシェーダーを推奨している。カーネルの記述にはMetal Shading Language (MSL) を用いる。macOS/iOSなどのAppleプラットフォーム上でのみ利用可能。
OpenACC
OpenMP のようにコード中にディレクティブを挿入することで、並列処理のハードウェアアクセラレートを行なえるようにする標準規格[ 27] であり、Cray (のちにHPE が買収)、NVIDIA 、PGI (のちにNVIDIAが買収)、CAPSがヘテロジニアスシステムに向けて設計した[ 28] 。
PGIのコンパイラに初めて搭載され[ 29] [出典無効 ] 、その後、GCC 5.0以降にも搭載されている[ 30] 。HPEはCCE (Cray Compiling Environment) 10.0.0以降でOpenACCを非推奨とし、OpenMPを推奨するようになっている[ 31] 。
NVIDIAは2020年にOpenACCなどの包括的なサポートを含むHPC SDKを発表した[ 32] [ 33] 。
過去の技術
C++ AMP
マイクロソフトが策定した、ハードウェアアクセラレートされた並列処理をC++言語で記述できるようにする高レベルのライブラリ・言語拡張。公式の実装としてはDirectComputeをバックエンド とするMicrosoft Visual C++ がある。ただしVisual C++ 2022以降では非推奨となった[ 34] 。
またオープンソースのC++ AMP実装「HCC」も存在した[ 35] が、その後非推奨となり[ 36] 、CUDA類似のHIP APIをベースとするHIP-Clangに置き換えられた[ 36] 。
OpenHMPP (英語版 ) (Open Hybrid Multicore Parallel Programming)
OpenACC同様、ディレクティブベースのヘテロジニアス・コンピューティング向けプログラミング標準。
OpenMP LEO (Language Extensions for Offload)
インテル によるIntel MIC (Many Integrated Core) およびGFXへオフロードするためのOpenMP 拡張。ICC (Intel C++ Compiler ) に実装されていた[ 37] 。
Close to Metal (英語版 ) (CTM, Close To the Metal )
AMD社によるATI 系GPUのストリームプロセッサインターフェイス。ハードウェアに近いローレベル制御を可能とする[ 38] 。
AMD Stream (旧ATI Stream )
AMDによるATI 系GPU用のGPGPU開発・実行環境。CTMをCompute Abstraction Layer(CAL)[ 39] によって抽象化し、Brook言語をCAL用に拡張したBrook+言語による開発を可能にする。
なおAMDは「GPGPUでDirectX 11およびOpenCLをフルサポートする」と発表し[ 40] [ 41] 、CCC 11.2でRadeon HDシリーズ以上のGPU向けにOpenCLドライバーが標準搭載された[疑問点 – ノート ] [要出典 ] 。
その後、同社はHSA推進とともに、独自規格ではなくOpenCLをヘテロジニアス戦略の中核とする方向に舵を切り直した。AMDによるCPU/GPU/APU対応の総合基盤テクノロジーは「AMD Accelerated Parallel Processing 」(AMD APP)と呼ばれており、SDKの名称もATI Stream SDKからAMD APP SDKに変更・統一されたが、その後AMD APP SDKは廃止され、GPUコンピューティングの技術基盤はオープンソースのROCmプラットフォームに移行されることになった。
Sh (英語版 ) (libsh)
ウォータールー大学 コンピュータグラフィックス研究室の成果に基づいた、RapidMindによるシェーダー プログラミングおよびGPGPUのためのメタプログラミング 技術。C++言語による開発を可能にする。LGPL ライセンスで公開されている。
RapidMind
RapidMind (英語版 ) による商用並列コンピューティング開発環境。GPU/マルチコア CPU/Cell プロセッサをバックエンド に利用できる。C++言語による開発を可能にする。
BrookGPU (英語版 ) (Brook for GPU)
スタンフォード大学 コンピュータグラフィックス研究室によるストリーム・コンピューティング開発環境。GPUおよびOpenMP によるマルチコアCPU演算をバックエンドに利用できる。C言語 (ANSI C) を拡張したBrook言語による開発を可能にする。BSDライセンス およびGPL ライセンスで公開されている。
PeakStream
PeakStream による商用ストリーム・コンピューティング開発環境。GPU / マルチコアCPU / Cellプロセッサをバックエンドに利用できる。PeakStreamは2007年6月頃までにGoogle によって買収されている。
脚注
^ “Heterogeneous Processing: a Strategy for Augmenting Moore's Law ” (2006年). 2014年10月29日 閲覧。
^ “Hetergeneous System Architecture (HSA) Foundation” . オリジナル の2014年4月23日時点におけるアーカイブ。. https://web.archive.org/web/20140423141300/http://www.hsafoundation.com/ 2014年11月1日 閲覧。
^ S. Mittal and J. Vetter (2015), A Survey of CPU-GPU Heterogeneous Computing Techniques ACM Computing Surveys
^ Venkat, Ashish; Tullsen, Dean M. (2014). Harnessing ISA Diversity: Design of a Heterogeneous-ISA Chip Multiprocessor . Proceedings of the 41st Annual International Symposium on Computer Architecture.
^
Anand Lal Shimpi (2014年5月5日). “AMD Announces Project SkyBridge: Pin-Compatible ARM and x86 SoCs in 2015, Android Support” . AnandTech. http://www.anandtech.com/show/7989/amd-announces-project-skybridge-pincompatible-arm-and-x86-socs-in-2015 2017年6月11日 閲覧 . "Next year, AMD will release a low-power 20nm Cortex A57 based SoC with integrated Graphics Core Next GPU."
^ “Energy Aware Scheduling ”. The Linux Kernel documentation . 2020年11月16日 閲覧。
^ A Survey Of Techniques for Architecting and Managing Asymmetric Multicore Processors ACM Computing Surveys 2015年
^ “インテル、次世代チップ「Alder Lake」をデモ--2021年下半期リリースへ ”. CNET Japan (2021年1月13日). 2021年3月14日 閲覧。
^ Gschwind, Michael (2005). A novel SIMD architecture for the Cell heterogeneous chip-multiprocessor (PDF) . Hot Chips: A Symposium on High Performance Chips.
^ ISO C++ and SYCL Join for the Future of Heterogeneous Programming Codeplay 2020年6月9日
^ SYCLomatic: A New CUDA-to-SYCL Code Migration Tool Intel
^ “How To Compile CUDA Code With LLVM ”. Phoronix (2015年11月11日). 2015年11月15日 閲覧。
^ “Compiling CUDA C/C++ with LLVM — LLVM 3.8 documentation ”. LLVM Project (2015年11月13日). 2015年11月15日 閲覧。
^ NVIDIAのCUDAアーキテクチャGPUにおけるFortranサポート
^ ZLUDA: Drop-In Open-Source CUDA Support For Intel Xe / UHD Graphics Phoronix 2020年11月24日
^ NVIDIA C++ Standard Library Now Available Via GitHub Phoronix 2020年9月19日
^ ROCm-Developer-Tools/HIP: HIP: C++ Heterogeneous-Compute Interface for Portability
^ ROCm-Developer-Tools/HIPIFY: HIPIFY: Convert CUDA to Portable C++ Code
^ OpenMP 4.0 Offloading For Intel MIC Lands In GCC 5 Phoronix 2014年11月13日
^ OpenMP Support LLVM project
^ LLVM 11 Merges AMD Radeon GCN Offloading For OpenMP Phoronix 2020年5月27日
^ a b Intel SPMD Program Compiler - Overview Intel Corporation
^ Intel SPMD Program Compiler User's Guide - Compiling For The NVIDIA Kepler GPU Intel Corporation
^ Embree Overview Intel Corporation
^ 後藤弘茂のWeekly海外ニュース
^ WebGL 2.0 Compute
^ OpenACC ディレクティブによるプログラミング by PGI Compilers
^ "Nvidia, Cray, PGI, and CAPS launch 'OpenACC' programming standard for parallel computing" . The Inquirer . 4 November 2011. 2021年3月14日閲覧 。
^ OpenACC ディレクティブによるプログラミング by PGI Compilers
^ OpenACC Changes Merged Today For GCC 5 Phoronix 2015年1月15日
^ OpenACC Use Hewlett Packard Enterprise Development
^ NVIDIA HPC SDK を発表 | NVIDIA
^ High Performance Computing (HPC) SDK | NVIDIA
^ C++ AMP Overview | Microsoft Learn
^ AMDとMS,GPU演算用途向けのコンパイラ「C++ AMP v1.2」を発表 - 4Gamer.net
^ a b HCC Deprecation Notice AMD
^ Initiating an Offload on Intel® Graphics Technology Intel
^ AMDのGPGPU戦略は新章へ - ATI Streamの展望、DirectX Compute Shaderの衝撃 (2) ATI Streamとは? | マイナビニュース
^ "Close to the Metal", Justin Hensley, AMD Graphics Product Group
^ AMD、DirectX 11/OpenCLのGPGPUをフルサポートへ
^ AMD Drives Adoption of Industry Standards in GPGPU Software Development
関連項目