ヘテロジニアス・コンピューティング
この記事には独自研究が含まれているおそれがあります。 |
ヘテロジニアス・コンピューティング (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であっても、異種プロセッサのメモリ空間が統合されているものもあれば、統合されていないものもある。
- 高性能計算
- Cray XD1
- SRC コンピュータ SRC-6 と SRC-7
- 組み込みシステム (DSP とモバイルプラットフォーム)
- 再構築可能計算
- ネットワーク
- Intel IXP ネットワークプロセッサ
- Netronome NFP ネットワークプロセッサ
- パーソナルコンピュータ向け汎用プロセッサ
- その他 (ゲーム専用機など)
- IBMのCell Broadband Engine - PlayStation 3に搭載[9]
- SpursEngine - IBM Cellプロセッサの派生型
- IBMのCell Broadband Engine - PlayStation 3に搭載[9]
プログラミング環境の例
編集副プロセッサ (ゲスト) をストリーム・プロセッシングで使うものや、主プロセッサ (ホスト) と副プロセッサ (ゲスト) の密な連携が可能なものが存在する。黎明期は独自の専用プログラミング言語を利用するなど、実験的なプログラミング環境が多数出現したが、普及が進むにつれ、標準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日時点におけるアーカイブ。 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 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