目次

Multi-Adapter

SLI/CrossFire と異なり非対称な GPU を利用することが可能です。 CPU 内蔵 GPU や乗り換えで余っているビデオカードなど、低コストで性能の上乗せができるようになります。 ただしアプリケーション側の対応が必要です。 通信や同期のコストがかかるため、レンダリング側 GPU と独立したタスクの実行に向いています。

内蔵 GPU を有効にする

CPU 内蔵 GPU は、外付け GPU 利用時に無効化されている場合があります。BIOS 設定で変更できます。

  1. BIOS → Advanced 等から Integrated Graphcis を選択
  2. Integrated GPU (iGPU 等) の有効化を行う

非対称 Multi-Adapter の概要

  1. Adapter を列挙して、それぞれ ID3D12Device を作成。
  2. 各 Device 毎にリソースの転送や Object の生成等を行う。Device を跨いで Object の使い回しはできない。
  3. 同期用に Device 間で共有可能な Fence の作成
  4. 転送用に Device 間でどちらからもアクセス可能な Shared Resource を作成
  5. Device 毎に CommandQueue , CommandList それぞれ作成して実行
  6. それぞれの Queue では Shared Fence を使って完了待ちが可能
  7. 結果を Shared Resource を通して合成

Adapter の列挙

IDXGIFactory1*  ifactory= nullptr;
CreateDXGIFactory( IID_PPV_ARGS(&ifactory) );
 
for( unsigned int ai= 0 ; ai< MAX_ADAPTER ; ai++ ){
    IDXGIAdapter1*  iadapter= nullptr;
    if( ifactory->EnumAdapters1( ai, &iadapter ) == DXGI_ERROR_NOT_FOUND ){
        break;
    }}
ifactory->Release();

Shared Resource の作成

共有可能な Object は、Resource, Heap, Fence に限られます。