(Translated by https://www.hiragana.jp/)
ヘテロジニアス・コンピューティング - 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コードを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買収ばいしゅう)、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]

過去かこ技術ぎじゅつ

編集へんしゅう
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によって買収ばいしゅうされている。

出典しゅってん

編集へんしゅう
  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.
  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 (PDF). Hot Chips: A Symposium on High Performance Chips.
  10. ^ ISO C++ and SYCL Join for the Future of Heterogeneous Programming Codeplay 2020ねん6がつ9にち
  11. ^ SYCLomatic: A New CUDA-to-SYCL Code Migration Tool Intel
  12. ^ How To Compile CUDA Code With LLVM”. Phoronix (2015ねん11月11にち). 2015ねん11月15にち閲覧えつらん
  13. ^ Compiling CUDA C/C++ with LLVM — LLVM 3.8 documentation”. LLVM Project (2015ねん11月13にち). 2015ねん11月15にち閲覧えつらん
  14. ^ NVIDIAのCUDAアーキテクチャGPUにおけるFortranサポート
  15. ^ ZLUDA: Drop-In Open-Source CUDA Support For Intel Xe / UHD Graphics Phoronix 2020ねん11月24にち
  16. ^ NVIDIA C++ Standard Library Now Available Via GitHub Phoronix 2020ねん9がつ19にち
  17. ^ ROCm-Developer-Tools/HIP: HIP: C++ Heterogeneous-Compute Interface for Portability
  18. ^ ROCm-Developer-Tools/HIPIFY: HIPIFY: Convert CUDA to Portable C++ Code
  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. ^ C++ AMP Overview | Microsoft Learn
  35. ^ AMDとMS,GPU演算えんざん用途ようとけのコンパイラ「C++ AMP v1.2」を発表はっぴょう - 4Gamer.net
  36. ^ a b HCC Deprecation Notice AMD
  37. ^ Initiating an Offload on Intel® Graphics Technology Intel
  38. ^ AMDのGPGPU戦略せんりゃくしんしょうへ - ATI Streamの展望てんぼう、DirectX Compute Shaderの衝撃しょうげき (2) ATI Streamとは? | マイナビニュース
  39. ^ "Close to the Metal", Justin Hensley, AMD Graphics Product Group
  40. ^ AMD、DirectX 11/OpenCLのGPGPUをフルサポートへ
  41. ^ AMD Drives Adoption of Industry Standards in GPGPU Software Development

関連かんれん項目こうもく

編集へんしゅう