DirectX12のマルチGPU

 OpenCLとかRadeonのCrossFireばかり気にしていたけど、DirectX12のマルチGPUの機能が思ったより凄いかも。
 RX580で2万くらいの出物があったので、手元のRyzen2700X+RX570とセットでTimeSpy(futuremarkのベンチマーク)を試してみた。

 スコアはTotal:7726, Graphic: 7600(Test1:51.58, Test2:42.11), CPU:8534だった。
 ググってみると Ryzen1600X+RX580でTotal:4156というのを見つけたので、どうやらマルチGPUでそこそこ性能が出るというのは嘘じゃなかった。

 しかもDirectX12のEMAという機能は異機種混合を可能にするらしくて、単なるモデル違いだけでなくメーカー違いもサポートする模様。またGTX970x2ではSLI接続より効果が上がったという結果も見つけたので、そもそも技術的にかなり最近のGPUのレンダリング パイプラインを効率化する方法を導き出したということのような気がする。

 …のだが、そんなに凄いという噂を目にしなかったのは、単にそちら方面にアンテナ伸ばしてなかったからなのか、それともじつはそこまでの効果が出ることが稀なだけなのか。

 実のところ、そこら辺がよく判らないでいる。

その後

 DiRT Rallyを動かしてみたら、RX570単体が平均で60fps前後 ⇒ RX580+570では100fps超になっていた。1.6~1.7倍ほど処理が増大した。そもそも、RX570⇒RX580で12,13%早くなってるというのもあるけど、かなり上乗せされてる感じがする。
 DX11のゲームなので、DX12ネイティブなゲームだともっと上乗せされるのかしら。

プログラマブルシェーダーのこと。

固定パイプラインではない、リアルタイム系ハードウェアレンダリング環境のこと。
頂点演算・画素計算をユーザー側で自由にプログラム記述できるようにしており、固定パイプラインの時代には考えられなかったさまざまな表現が可能になった。

現在のGPUコンピューティングの土壌を作ったことをみても、比較的高い自由度を持っていることが判る。

GPU/シェーダプログラミング系リンク集

 

OpenGL SDK, WIndows SDK, DirectX SDK ..

自分 Vistaユーザー(Win8持ってるけど、未upgrade..)なので、ちょっと調べてみた。

OpenGL SDK

WindowsSDK(6.2.6000.0.18.WindowsSDK_Vista_JPN_daily.DVD.Rel.img)

DirectX SDK(DXSDK_Jun10.exe)

OpenGLは特にVistaがどうこうではなくて、どこにあるのか判りにくかった。
あと、上のリンクより OpenGL + GLSL(GLEW)を用いた開発環境の設定方法 の方がいいかも。。
OpenGL SDK のリンク先のだと、GLEWが入ってないかも。(GLSL関連が入ってない??)
また、glutも 64bit版を考えたら こちら などを見て、対応した方がよさそう。(glewは32/64bit両対応されていた)

DirectX関連については、当初VistaはDX11未対応で後追いで付いたので、WindowsSDKと別扱いだったりするくらいか。(対応するVSのバージョンが 2008や2010だし、今からこの環境をそろえる人もいないだろうから、一応メモっておく)

【その後】
最近のDirectXのサンプルコードをビルドしようとしたら、 directxmath.h がないと..
ぐぐったら、Windows8SDKが要るそうで。

DirectX Tool KitのReadme.txt(Documents) を翻訳してみた
Using the Windows 8 SDK with Visual Studio 2010 – configuring multiple projects

Windows環境も、最新追っかけなくなるととたんにめんどくさい..

Windows 8 用 Windows ソフトウェア開発キット (Windows SDK)
Windows 8.1 用 Windows ソフトウェア開発キット (Windows SDK)

SDKの説明を見ると、Vistaはシステム要件から外れている。
説明を読み進めると、『Windows Vista および Windows Server 2008 における .NET Framework 4.5 SDK』という項目がある。これが原因か?

説明では下記のように書かれていたが、Vista SP2(及びVS2010をフルインストール)環境で setup.exeを実行できた。

  1. サポートされるオペレーティング システム (Windows 7、Windows 8 など) で、Windows SDK for Windows 8 のインストーラーを実行します。
  2. [場所の指定] 画面で、[個別のコンピューターにインストールするために Windows SDK をダウンロードします] を選択し、[次へ] をクリックします。

(以下の手順は省略)

【その後のその後】
WIndows8 SDKをDLしたものの、肝心のSDK インストーラは動かず。

どうにも手詰まりな気配。。

【OpenGLのその後】
freeglut, glew の 64bitビルドで GLSLによるジオメトリシェーダ が動かせた。(使ったビデオカードはQuadro FX370 という超貧弱なカード, OSは Vista SP2 64bit, ビルド環境は VS2010)
ひとつだけエラーで調べないといけなかったのが、glut.hだけだと glutCloseFuncが未定義だといわれた点。何の設定が要るのか判らなかったので、とりあえず#include <GL/freeglut_ext.h> を追加定義して動かした..ここは、glut.hを freeglut.hに置き換えればいいだけだった..

結局、freeglutだろうとOpenGL SDK だろうと GLEWは要るらしいので、そこはライセンスの都合とかで必要な方を選べば良いのかも。

なんにしても今Vistaで環境構築するんだったら DirectX11環境作るより、OpenGL環境作る方がかなり楽な道だった..