マルチGPU
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/04 13:13 UTC 版)
Direct3DではDXGIアダプターを列挙することで、複数のGPUを搭載したシステムにおいて任意のGPUを選択的に使用することが可能となっている。これにより、(CUDAやOpenCLのように)複数のGPUを利用して各々にGPGPU演算処理を分散実行させ、アプリケーションソフトウェアの並列処理性能を向上させるといった使い方ができる。一方、OpenGLで複数のGPUを選択的に使用したり、それぞれのGPUに対してレンダリングコンテキストやリソースを作成する機能はOpenGL 4.5時点でも標準化されていない。Windows環境においては、2006年にNVIDIAからWGL_NV_gpu_affinity 、2009年にAMDからWGL_AMD_gpu_association というWGL拡張がそれぞれ提供されているが、AMD拡張のほうはRadeonでもFireProでも使用できる ものの、NVIDIA拡張のほうはGeForceでは使用できず、Quadroのみの対応となっている 。Windows以外のプラットフォームではAMDによるX Window System向けのGLX拡張GLX_AMD_gpu_association のみで、NVIDIAからは提供されておらず、アプリケーション側からリソースを割り当てるGPUを個別に指定する手段がない。 なお、NVIDIA SLIに対応した複数のGPUを用いてSLI構成を行なうことによりGPUドライバー側で分散処理を実行させることはできるが、SLIは主にOpenGLやDirect3Dにおけるグラフィックスフレームのレンダリングを自動的に分散処理して高速化する技術であり、SLI環境下でのGPGPU分散処理を行なう場合は注意点や制約が存在する(NVIDIA GPUにおけるGPGPUはすべてCUDA基盤を利用しているため、このSLI環境における制約はCUDA/OpenCL/DirectCompute/OpenGL Compute Shaderを問わない)。また、AMDマルチGPU環境でOpenCLを利用したGPGPU分散処理を行なう場合、CrossFire (CrossFireX) をOFFにすることが推奨されている。なお、SLIやCrossFire/CrossFireXではメモリのミラーリングが行なわれるため、複数のGPUを搭載していても、使用できるメモリ総量は各GPUメモリの合計値とはならない。一方、DirectX 12(WDDM 2.0)ではSLIやCrossFireといったベンダー独自技術に依存しない形でマルチGPUにネイティブ対応し、標準で分散レンダリングを可能とするほか、複数GPUのビデオメモリを単一のメモリプールに統合することも可能となっている。 また、Adobe PhotoshopではバージョンCS4以降、OpenGLによるハードウェアアクセラレーションが導入されているが、マルチGPU環境は推奨されていない。
※この「マルチGPU」の解説は、「OpenGL」の解説の一部です。
「マルチGPU」を含む「OpenGL」の記事については、「OpenGL」の概要を参照ください。
- マルチGPUのページへのリンク