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

出典: フリー百科事典『ウィキペディア(Wikipedia)』

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

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

異種性[編集]

一般的にコンピューティングの文脈において[いつ?]異なる命令セットアーキテクチャ (ISA) のことを言及する「異種性」とは、単に異なるマイクロアーキテクチャを持つのではなく(例えば浮動小数点の数値処理はこの特殊例であり異種性と呼ばれることは稀)、メインプロセッサがあるアーキテクチャを持ち、他のプロセッサが別の(普通は非常に異なり、複数の場合もある)アーキテクチャを持つ、ということを意味する。

かつて[いつ?]のヘテロジニアス・コンピューティングでは異なるISAを異なる方法で処理しなければならないことを意味していたが、[いつ?]では例えば、ヘテロジニアス・システム・アーキテクチャ(HSA)システムが存在し[2]、同じ集積回路上などにある複数の種類のプロセッサ(CPUGPUなど[3])を使用する際の(ユーザーにとっての)違いを解消しながら、両者の長所を提供する:CPUでオペレーティングシステムを走らせて従来の直列タスクを実行しながら、汎用GPU処理を行うなど(GPUはよく知られる3Dグラフィックスレンダリングの他に、非常に大きなデータセットに対する数学的に集中された計算を行うことができる)。

モダンなコンピューティングシステムでは製造技術の向上によって以前の個別部品がシステム・オン・チップ (SoC) へと統合されるようになり、異種性のレベルが次第に高まっている[要出典]。例えば多くの新しいプロセッサには他のデバイス(SATAPCIイーサネットUSBRFID無線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]Apple Siliconも同様の構成のARMコアで作られている。また、IntelはLakefieldというコードネームのハイブリッドx86コアを製造しているが、それには命令セットの対応に大きな制限を含んでいる。

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

プラットフォームの例[編集]

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

プログラミング環境の例[編集]

副プロセッサ (ゲスト) をストリーム・プロセッシングで使うものや、主プロセッサ (ホスト) と副プロセッサ (ゲスト) の密な連携が可能なものが存在する。黎明期は独自の専用プログラミング言語を利用するなど、実験的なプログラミング環境が多数出現したが、普及が進むにつれ、標準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 (Compute Unified Device Architecture)
NVIDIAによるGeForce / Quadro / Tesla / TegraシリーズGPU用のGPGPU開発・実行環境。C言語を拡張したCUDA Cによる開発を可能にする(Ver.2.2以降はC++言語を拡張したCUDA C++による開発も可能となっている)。NVIDIAによるコンパイラ実装nvccだけでなく、オープンソースコンパイラのLLVMでもCUDAコンパイラの実装が始まっている[11] [12]。また、PGI社からはCUDA Fortran Compilerが提供されている[13]
ヘテロジニアス・コンピューティング向け標準C++ライブラリのlibcu++ (NVIDIA C++ Standard Library) も存在する。libcu++はLLVMのlibc++の派生となっている[14]
HIP (Heterogeneous-Compute Interface for Portability)
CUDAに近いカーネル言語およびAPI。AMDによるROCm (Radeon Open Compute) プラットフォームの一環として、オープンソースで提供されている[15]。実行環境としてAMD GPUに対応しているほか、バックエンドにCUDAコンパイラを利用することで、NVIDIA GPU上で動作可能なCUDAコードを生成することもできる。
CUDAコードをHIPコードへと変換するツールHIPIFYもオープンソースで提供されている[16]
C++ AMP
マイクロソフトが策定した、ハードウェアアクセラレートされた並列処理をC++言語で記述できるようにする高レベルのライブラリ・言語拡張。公式の実装としてはDirectComputeをバックエンドとするMicrosoft Visual C++がある。
またオープンソースのC++ AMP実装「HCC」も存在した[17]が、その後非推奨となり[18]CUDA類似のHIP APIをベースとするHIP-Clangに置き換えられた[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が買収)、NVIDIAPGI (のちに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]

過去の技術[編集]

OpenHMPP英語版 (Open Hybrid Multicore Parallel Programming)
OpenACC同様、ディレクティブベースのヘテロジニアス・コンピューティング向けプログラミング標準。
OpenMP LEO (Language Extensions for Offload)
インテルによるIntel MIC (Many Integrated Core) およびGFXへオフロードするためのOpenMP拡張。ICC (Intel C++ Compiler) に実装されていた[34]
Close to Metal英語版CTM, Close To the Metal
AMD社によるATI系GPUのストリームプロセッサインターフェイス。ハードウェアに近いローレベル制御を可能とする[35]
AMD Stream(旧ATI Stream
AMDによるATI系GPU用のGPGPU開発・実行環境。CTMをCompute Abstraction Layer(CAL)[36]によって抽象化し、Brook言語をCAL用に拡張したBrook+言語による開発を可能にする。
なおAMDは「GPGPUでDirectX 11およびOpenCLをフルサポートする」と発表し[37] [38]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によって買収されている。

出典[編集]

[脚注の使い方]
  1. ^ Heterogeneous Processing: a Strategy for Augmenting Moore's Law” (2006年). 2014年10月29日閲覧。
  2. ^ “Hetergeneous System Architecture (HSA) Foundation”. オリジナルの2014年4月23日時点におけるアーカイブ。. https://web.archive.org/web/20140423141300/http://www.hsafoundation.com/ 2014年11月1日閲覧。 
  3. ^ S. Mittal and J. Vetter (2015), A Survey of CPU-GPU Heterogeneous Computing Techniques ACM Computing Surveys
  4. ^ 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. http://dl.acm.org/citation.cfm?id=2665692 
  5. ^ 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." 
  6. ^ Energy Aware Scheduling”. The Linux Kernel documentation. 2020年11月16日閲覧。
  7. ^ A Survey Of Techniques for Architecting and Managing Asymmetric Multicore Processors ACM Computing Surveys 2015年
  8. ^ インテル、次世代チップ「Alder Lake」をデモ--2021年下半期リリースへ” (日本語). CNET Japan (2021年1月13日). 2021年3月14日閲覧。
  9. ^ Gschwind, Michael (2005). “A novel SIMD architecture for the Cell heterogeneous chip-multiprocessor”. Hot Chips: A Symposium on High Performance Chips. http://www.hotchips.org/wp-content/uploads/hc_archives/hc17/2_Mon/HC17.S1/HC17.S1T1.pdf 
  10. ^ ISO C++ and SYCL Join for the Future of Heterogeneous Programming Codeplay 2020年6月9日
  11. ^ How To Compile CUDA Code With LLVM”. Phoronix (2015年11月11日). 2015年11月15日閲覧。
  12. ^ Compiling CUDA C/C++ with LLVM — LLVM 3.8 documentation”. LLVM Project (2015年11月13日). 2015年11月15日閲覧。
  13. ^ NVIDIAのCUDAアーキテクチャGPUにおけるFortranサポート
  14. ^ NVIDIA C++ Standard Library Now Available Via GitHub Phoronix 2020年9月19日
  15. ^ ROCm-Developer-Tools/HIP: HIP: C++ Heterogeneous-Compute Interface for Portability
  16. ^ ROCm-Developer-Tools/HIPIFY: HIPIFY: Convert CUDA to Portable C++ Code
  17. ^ AMDとMS,GPU演算用途向けのコンパイラ「C++ AMP v1.2」を発表 - 4Gamer.net
  18. ^ a b HCC Deprecation Notice AMD
  19. ^ OpenMP 4.0 Offloading For Intel MIC Lands In GCC 5 Phoronix 2014年11月13日
  20. ^ OpenMP Support LLVM project
  21. ^ LLVM 11 Merges AMD Radeon GCN Offloading For OpenMP Phoronix 2020年5月27日
  22. ^ a b Intel SPMD Program Compiler - Overview Intel Corporation
  23. ^ Intel SPMD Program Compiler User's Guide - Compiling For The NVIDIA Kepler GPU Intel Corporation
  24. ^ Embree Overview Intel Corporation
  25. ^ 後藤弘茂のWeekly海外ニュース
  26. ^ WebGL 2.0 Compute
  27. ^ OpenACC ディレクティブによるプログラミング by PGI Compilers
  28. ^ "Nvidia, Cray, PGI, and CAPS launch 'OpenACC' programming standard for parallel computing". The Inquirer. 4 November 2011. 2021年3月14日閲覧
  29. ^ OpenACC ディレクティブによるプログラミング by PGI Compilers
  30. ^ OpenACC Changes Merged Today For GCC 5 Phoronix 2015年1月15日
  31. ^ OpenACC Use Hewlett Packard Enterprise Development
  32. ^ NVIDIA HPC SDK を発表 | NVIDIA
  33. ^ High Performance Computing (HPC) SDK | NVIDIA
  34. ^ Initiating an Offload on Intel® Graphics Technology Intel
  35. ^ AMDのGPGPU戦略は新章へ - ATI Streamの展望、DirectX Compute Shaderの衝撃 (2) ATI Streamとは? | マイナビニュース
  36. ^ "Close to the Metal", Justin Hensley, AMD Graphics Product Group
  37. ^ AMD、DirectX 11/OpenCLのGPGPUをフルサポートへ
  38. ^ AMD Drives Adoption of Industry Standards in GPGPU Software Development

関連項目[編集]