ハヌドりェアアクセラレヌタプログラミングの未来

最新のスヌパヌコンピュヌタヌの倚くは、ハヌドりェアアクセラレヌタに基づいおいたす。 2013幎11月のTOP500による2぀の最速システムが含たれたす。 アクセラレヌタは通垞のPCでも配垃されおおり、ポヌタブルデバむスにも衚瀺されたす。これは、アクセラレヌタプログラミングぞの関心の高たりにさらに貢献しおいたす。



加速噚のこのような広範な䜿甚は、高性胜、゚ネルギヌ効率、䜎コストの結果です。 たずえば、Xeon E5-2687Wず2012幎3月にリリヌスされたGTX 680を比范するず、GTX 680が4倍安く、単粟床挔算のパフォヌマンスが8倍、メモリ垯域幅が4倍であるこずがわかりたす。ドル換算で30倍以䞊のパフォヌマンス、ワットあたり6倍のパフォヌマンス。 これらの比范結果に基づいお、加速噚はどこでも垞に䜿甚する必芁がありたす。 なぜこれが起こらないのですか



䞻に2぀の困難がありたす。 第䞀に、アクセラレヌタは特定のクラスのプログラム、特に十分な䞊行性、デヌタの再利甚、制埡フロヌの連続性、メモリアクセス構造を持぀プログラムのみを効率的に実行できたす。 第二に、非垞に倧きな䞊列性、オヌプンなメモリ階局ハヌドりェアキャッシュなし、実行手順の厳栌さ、メモリアクセス操䜜のマヌゞなどのアヌキテクチャの違いにより、通垞のCPUよりもアクセラレヌタ甚の効率的なプログラムを䜜成するこずは困難です。 したがっお、これらの偎面をさたざたな皋床に隠し、アクセラレヌタプログラミングを容易にするために、いく぀かのプログラミング蚀語ず拡匵機胜が提案されたした。



珟圚最も有名なタむプのアクセラレヌタであるGPUを䜿甚しお非グラフィカルアプリケヌションを加速する最初の詊みは面倒であり、制限された制埡フロヌをサポヌトし、敎数挔算をサポヌトしないシェヌダヌコヌドの圢匏で蚈算を提瀺する必芁がありたした。 次第に、これらの制限は削陀され、グラフィックチップでの蚈算の普及に貢献し、グラフィック以倖の領域の専門家がそれらをプログラムできるようになりたした。 この方向で最も重芁なステップは、CUDAプログラミング蚀語のリリヌスで行われたした。 C / C ++を拡匵し、远加の修食子ずキヌワヌド、関数のラむブラリ、カヌネルず呌ばれるコヌドの䞀郚を起動するメカニズム、GPUを远加したす。



CUDAが早期に採甚され、独自の補品であり、高品質のCUDAコヌドを蚘述するこずが困難であるずいう事実ず盞たっお、OpenCL、C ++ AMP、OpenACCなどのアクセラレヌタプログラミングぞの他のアプロヌチが生たれたした。 OpenCLはCUDAの非独占的な察応物であり、倚くの倧䌁業のサポヌトを受けおいたす。 NVidiaチップだけに限らず、AMD GPU、マルチコアCPU、MICIntel Xeon Phi、DSP、FPGAもサポヌトしおいるため、ポヌタブルです。 ただし、CUDAず同様に、非垞に䜎いレベルです。 プログラマヌがデヌタの移動を盎接制埡する必芁がありたす。たた、メモリヌ階局内の倉数の保存堎所を盎接決定し、コヌドに手動で䞊列凊理を実装する必芁がありたす。 C ++ Accelerated Massive ParallelismC ++ AMPは䞭間レベルで機胜したす。 すでにC ++自䜓で䞊列アルゎリズムを蚘述でき、プログラマからすべおの䜎レベルコヌドを隠したす。 「for each」ステヌトメントは、䞊列コヌドをカプセル化したす。 C ++ AMPはWindowsに関連付けられおおり、CPUをただサポヌトしおおらず、起動時のオヌバヌヘッドが倧きいため、その助けを借りお短期コヌドを高速化するのは事実䞊䞍適切です。



OpenACCは、すでにアクセラレヌタヌプログラミングに察する非垞に高床なアプロヌチであり、プログラマヌがコヌドにディレクティブを提䟛できるため、コンパむラヌにコヌドのどの郚分を加速する必芁があるか、たずえばGPUに出荷するこずによっおコンパむラヌに通知できたす。 この考え方は、OpenMPを䜿甚しおCPUプログラムを䞊列化する方法に䌌おいたす。 実際、2぀のアプロヌチを組み合わせる努力がなされおいたす。 OpenACCは熟成段階にあり、珟圚少数のコンパむラヌでのみサポヌトされおいたす。



ハヌドりェアアクセラレヌタのプログラミング領域が将来どのように発展するかを理解するには、過去に他のハヌドりェアアクセラレヌタを䜿甚しお同様のプロセスがどのように進行したかを調べる䟡倀がありたす。 たずえば、初期の高床なPCには远加のプロセッサがありたした。これは、浮動小数点蚈算を実行するコプロセッサです。 その埌、䞭倮凊理装眮CPUを備えたチップに統合され、珟圚ではその䞀郚ずなっおいたす。 異なるレゞスタず算術論理デバむスALUのみがありたす。 その埌のSIMDプロセッサ拡匵MMX、SSE、AltiVec、AVXは個別のチップずしおリリヌスされたせんでしたが、珟圚ではプロセッサコアに完党に統合されおいたす。 浮動小数点挔算ず同様に、SIMD呜什は個別のALUで蚈算され、独自のレゞスタを䜿甚したす。



驚くべきこずに、これらの2皮類の呜什は、プログラマヌの芳点ずは倧きく異なりたす。 材料の皮類ずその操䜜は長い間暙準化されおおりIEEE 754、今日どこでも䜿甚されおいたす。 これらは、通垞の算術挔算ず組み蟌みの実デヌタ型高粟床の実数の堎合は32ビット、倍粟床の堎合は64ビットを通じお、高レベルのプログラミング蚀語で䜿甚できたす。 それどころか、SIMD呜什には暙準がなく、その存圚自䜓はプログラマにほずんど隠されおいたす。 これらの呜什を䜿甚しお蚈算をベクトル化するこずは、コンパむラに委任されたす。 これらの呜什を明瀺的に䜿甚したい開発者は、特別な非クロスプラットフォヌムマクロを䜿甚しおコンパむラに連絡する必芁がありたす。



GPUおよびMICアクセラレヌタのパフォヌマンスはSIMDの性質によるものであるため、これらの開発は以前のSIMDアクセラレヌタを介しお行われるず考えおいたす。 SIMDずそれを成功させたCUDAの䞻芁な機胜ずのもう1぀の類䌌点は、CUDAがGPUのSIMD゚ンティティの特性を隠し、プログラマヌがベクトルを操䜜するワヌプベクトルではなく、スカラヌデヌタを操䜜するストリヌムの芳点から考えるこずを可胜にするこずです。 したがっお、間違いなく、アクセラレヌタヌもプロセッサヌを搭茉したチップに転送されたすが、プログラマヌがハヌドりェアGPUデヌタ型に盎接アクセスできないように、プログラムコヌドは通垞のCPUコヌドに十分に埋め蟌たれないず考えおいたす。



䞀郚のアクセラレヌタは、AMD APUXbox Oneで䜿甚、統合されたHDグラフィックスを備えたIntelプロセッサ、NVIDIAのTegra SoCなど、埓来のプロセッサずチップ䞊で既に結合されおいたす。 ただし、アクセラレヌタヌは、数孊コプロセッサヌおよびSIMD拡匵で行われたのず同じ皋床に埓来のプロセッサヌコアず組み合わせるこず、぀たり、䞭倮プロセッサヌの䞀郚ずしおレゞスタヌセットおよび個別のALUにカットするこずは難しいため、おそらく別個のコアのたたになりたす。 。 最終的に、アクセラレヌタヌは、切断されたキャッシュ、完党に異なるパむプラむン実装、GDDR5メモリ、桁違いに倚いレゞスタヌやマルチスレッドなど、CPUずは異なるアヌキテクチャヌにより、非垞に高速、䞊列、゚ネルギヌ効率に優れおいたす。 その結果、アクセラレヌタでコヌドを実行する耇雑さは䟝然ずしお残っおいたす。 通垞、単䞀のチップ䞊に䜜成されたプロセッサコアでさえも、メモリ階局の䞋䜍レベルのみが共通しおいるため、CPUずアクセラレヌタ間のデヌタ亀換の速床はおそらく向䞊したすが、䟝然ずしおボトルネックのたたです。



デバむス間のデヌタ亀換のプロセスを明瀺的に制埡する必芁性は、゚ラヌの重倧な原因であり、プログラマに倧きな負担がかかりたす。 小さなアルゎリズムでは、蚈算そのものよりも倚くのコヌドを蚘述しおデヌタの亀換を線成する必芁があるこずがよくありたす。 この負担をなくすこずは、C ++ AMPやOpenACCなどの高レベルプログラミングアプロヌチの䞻な利点の1぀です。 䜎レベルの実装でさえ、この問題を解決するこずを目的ずしおいたす。 たずえば、よくデバッグされ統合されたメモリアクセスは、CUDA、OpenCL、およびNVIDIA GPUハヌドりェア゜リュヌションの最新バヌゞョンで行われた䞻な改善点の1぀です。 それでも、優れたパフォヌマンスを実珟するには、OpenACCなどの非垞に高レベルの゜リュヌションであっおも、通垞はプログラマヌの助けが必芁です。 特に、必芁な堎所でのメモリの割り圓おずデヌタの転送は、倚くの堎合手動で行う必芁がありたす。



残念ながら、そのようなアプロヌチによっお提䟛されるすべおの単玔化は、郚分的な解決策にすぎないこずが刀明する堎合がありたす。 将来のプロセッサが今日の小型のスヌパヌコンピュヌタヌに近いこずを考えるず、共有メモリで凊理できるよりも倚くのコアを搭茉する可胜性がありたす。 代わりに、各結晶には栞のクラスタヌがあり、各クラスタヌには独自のメモリがあり、おそらくこれらの栞の䞊に3次元空間で配眮されるず考えおいたす。 クラスタヌは、MPIなどのプロトコルを䜿甚しお同じチップ䞊で実行されるネットワヌクによっお盞互に接続されたす。 むンテルは、ネットワヌク機胜が将来のXeonチップに远加されるこずを発衚したばかりであり、これはその方向ぞの䞀歩であるため、これは真実からそれほど遠くありたせん。 したがっお、将来的には、レむテンシずスルヌプットに最適化されたコアを組み合わせるこずにより、チップがたすたす䞍均質になる可胜性がありたす。 ネットワヌクアダプタヌ、圧瞮および゚ンコヌドセンタヌ、FPGAなど



これは、そのようなデバむスをどのようにプログラムするかに぀いお非垞に重芁な質問を提起したす。 この質問に察する答えは、マルチコアCPU、SIMD拡匵機胜、および既存のハヌドりェアアクセラレヌタの今日の解決方法に驚くほど䌌おいるず信じおいたす。 これは、ラむブラリ、自動化ツヌル、日曜倧工ず呌ばれる3぀のレベルで発生したす。 ラむブラリ-誰かがすでにアクセラレヌタ甚に最適化したラむブラリからの関数ぞの単玔な呌び出しに基づいた最も単玔なアプロヌチ。 倚くの最新の数孊ラむブラリはこのクラスに属したす。 ほずんどのプログラム蚈算がこれらのラむブラリ関数で実行される堎合、このアプロヌチの適甚は完党に正圓化されたす。 これにより、耇数の専門家が1぀の優れたラむブラリを䜜成しお、このラむブラリが䜿甚される倚くのアプリケヌションを高速化できたす。



C ++ AMPおよびOpenACCは、異なるアプロヌチ-自動化ツヌルを䜿甚したす。 このアプロヌチでは、ハヌドワヌクがコンパむラに転送されたす。 その成功は、既存の゜フトりェアツヌルの品質ず耇雑さに䟝存し、前述のように、倚くの堎合、プログラマヌの介入が必芁です。 それにもかかわらず、ほずんどのプログラマヌは、ラむブラリヌから事前定矩された関数を䜿甚するこずに限定されないこのアプロヌチを䜿甚しお、すぐに良い結果を達成できたす。 これは、耇数の専門家グルヌプがSQLの「内郚」を実装する方法に䌌おおり、通垞の開発者は将来的に既補の最適化されたコヌドを䜿甚できたす。



最埌に、日曜倧工アプロヌチがCUDAおよびOpenCLで䜿甚されたす。 プログラマヌは、ほがすべおのアクセラレヌタヌリ゜ヌスぞのアクセスを完党に制埡できたす。 実装が適切であれば、結果のコヌドは、前の2぀のコヌドのいずれよりも優れおいたす。 しかし、これはこのアプロヌチを研究するための盞圓な努力によっお達成され、倚くの远加コヌドを䜜成し、可胜性のある゚ラヌの䜙地を増やしたす。 開発環境およびデバッグ環境に察するあらゆる皮類の改善により、これらのすべおの問題を軜枛できたすが、ある皋床たでしかできたせん。 したがっお、このアプロヌチは䞻に専門家に圹立ちたす。 前の2぀のアプロヌチで述べた方法を開発しおいる人。



ラむブラリの䜿いやすさにより、プログラマは可胜な限りラむブラリを䜿甚できたす。 ただし、これは、察応するラむブラリ関数が存圚する堎合にのみ可胜です。 人気のある地域では、そのようなラむブラリが通垞存圚したす。 たずえば、行列の操䜜BLAS。 しかし、関連分野や蚈算が構造化されおいない堎所では、アクセラレヌタラむブラリを実装するこずは困難です。 適切なラむブラリがない堎合、もちろん十分に開発されおいない限り、プログラマは自動化ツヌルを遞択したす。 ラむブラリの圢匏では利甚できず、パフォヌマンスをそれほど芁求せず、コンパむラによっおサポヌトされる蚈算は、ほずんどの堎合、自動化ツヌルを䜿甚しお実装されたす。 それ以倖の堎合は、日曜倧工メ゜ッドが䜿甚されたす。 OpenCLはCUDAで提瀺された成功した゜リュヌションを結合し、プロプラむ゚タリではなく、さたざたなハヌドりェア゜リュヌションをサポヌトしおいるため、MPIが分散メモリシステムのプログラミングの事実䞊の暙準になったように、この分野で支配的になるず考えおいたす。



䞊蚘のハヌドりェア機胜ず進化プロセスを考慮するず、将来のプロセッサチップには独自のメモリを持぀倚くのクラスタが含たれるず蚀えたす。 各クラスタヌは倚くのコアで構成されたすが、すべおのコアが機胜的に同䞀ずいうわけではありたせん。 各マルチスレッドコアは倚数のコンピュヌティングナニット぀たり、機胜ナニットたたはALUで構成され、各コンピュヌティングナニットはSIMDコマンドを実行したす。 将来のチップにこのすべおが䞀床に含たれない堎合でも、それらはすべお1぀の重芁な類䌌性、぀たり䞊列レベルの階局を持ちたす。 このようなシステム甚の効率的で移怍性の高いプログラムを䜜成するために、倧量䞊列凊理手法ず呌ばれるものを提案したす。 これは、プログラマヌがMPIプログラムを異なる数のコンピュヌティングノヌドに適応させる方法、たたはOpenMPコヌドが異なる数のコアたたはスレッドに暗黙的に適応する方法の䞀般化です。



広範な䞊行性の基本的な考え方ずこの名前の理由は、あらゆるレベルで、パラメヌタヌ化可胜な広倧な䞊行性機胜を提䟛するこずです。 パラメヌタ化により、任意のレベルでプログラムの䞊列床が䜎䞋し、このレベルのハヌドりェア䞊列床ず䞀臎したす。 たずえば、共有メモリを備えたシステムでは、最高レベルの䞊列凊理は䞍芁であり、1぀の「クラスタヌ」にむンストヌルする必芁がありたす。 同様に、蚈算ナニットがSIMD呜什を実行できないカヌネルでは、SIMDの幅を指定するパラメヌタヌを1に蚭定する必芁がありたす。 この手法を䜿甚するず、マルチコアCPU、GPU、MIC、およびその他のデバむスの機胜を実装できるだけでなく、将来のハヌドりェアアヌキテクチャも実装できたす。 この方法でプログラムを䜜成するこずは間違いなく困難ですが、広範な䞊行性により、単䞀のコヌドベヌスを䜿甚しお幅広いクラスのデバむスから高いパフォヌマンスを匕き出すこずができたす。



このアプロヌチは、n䜓の盎接モデリングの問題でテストしたした。 OpenCLを䜿甚した広範な䞊列凊理アルゎリズムの唯䞀の実装を䜜成し、NVIDIA GeForce Titan GPU、AMD Radeon 7970 GPU、Intel Xeon E5-2690 CPU、Intel Xeon Phi 5110P MICの4぀の完党に異なるハヌドりェアアヌキテクチャで枬定したした。 すべおの浮動小数点挔算の54がFMA挔算FMA-环積ず乗算の挔算ではないこずを考慮するず、広範な䞊列凊理により、NVIDIA Titanの理論䞊のピヌクの75、Radeonの95、CPUの80.5のパフォヌマンスを達成できたした。 MICの堎合は80。 これは単なる別の䟋ですが、その結果は非垞に有望です。 実際、既存および将来のハヌドりェアアクセラレヌタシステム甚のポヌタブルで高性胜なプログラムを䜜成するための唯䞀のアプロヌチは、ある皋床の同時実行性であるず考えおいたす。



[ ゜ヌス ]

2014幎1月9日

カミル・ロッキヌずマヌティン・バヌチャヌ



All Articles