2015年02月15日

Core i5もいらない? DirectX12とMantleがマルチコアのパワーを引き出す。



71450 (1).png



CPUの真価は次世代APIでどれだけ発揮されるのか?



 DirectX12とMantleの凄さについて、

 AnandのレポートをGPU方面にだけ絞ってお伝えしたことがある。



 そしてその結果は、
 GTX980が150%のパフォーマンスアップ

 Radeonに至っては400%という衝撃的なものだった。





 そして今回取り上げるのは次世代APIが課題にしている
 CPUのボトルネックに関してである。
 Starswarmのベンチマークを通してその成果を見る。


 これまで不要とされてきたマルチコアのパワーをどれほど引き出したのか

 そしてコア数に上限あるのかどうか、そういった事も見ていく。


  

CPU方面でのDirectX11の欠点。

 ベンチマークに入る前に

 要は”マルチコアに最適化されていない。”ということと、APIオーバーヘッドが大きいということなのだが。

 特にDirectX11では、ほぼそのワークロードをシングルコアに振り分けられており、それがジョブ完了の間延びを引き起こす。

 以下はそのスライド。



DirectX11のワークロード
 directX11.png


 D3D runtimeなどはある程度振り分けられているので、全体のオーバーヘッドは一応短縮するのだが、それでもコア数増加による恩恵はかなり小さい。



 それはStarswarmでも同じで、DirectX11ではバッチサブミッションが大量にシングルコア上で行われ、それがベンチマークの足枷となっていた。



 これを解消したのが次世代APIで、プロセスを複数のコアに分散し、オーバーヘッドの削減を目指している。


DirectX12のイメージ
 directx12.png
User mode driverが複数のコアに割り当てられただけでなく、kernel mode driverのタイムも大幅に減らされている。




 それではStarswarmのベンチマークを見ていく。





コア数に合わせて大きく伸びるスコア。しかし4コアで頭打ち。

赤は6コア、黒は4コア、青は2コアのリザルト
Starswarm CPU scaling EQ GTX 980.png


Starswarm CPU scaling EQ R9-290X.png


 まず馬鹿げたほどのパフォーマンスの違いに気付くだろう。



 GTX 980のグラフを見ると、DX11はDX12の半分程度しかパフォーマンスが発揮されていない
 DX11がシングルスレッドに負荷を集中している結果であり、DX12は先のスライドのイメージ通り、コア数に比例したかのように大きくパフォーマンスが延びていることがわかる

 そしてDX11もコア数増加に伴って一応スコアが伸びているが、その伸びが小さいことも先のスライドの説明通りだ。

 DirectX12とMantleはマルチコアのボトルネックを確かに解消している。



 しかし、ここで問題がある。


 それはパフォーマンスの伸びが、4コアで頭打ちになっている点だ。
 Radeonに至ってはすでに2コアで頭打ちになっている。(DX12)

 これはAnandによると、GPUが性能の限界を迎えたため だとのこと。

 CPU側が効率よく負荷を処理していても、今度はGPUの性能が足枷になっているわけだ。
 依然として10万にも及ぶドローコールの数にGPU側が対応しきれていないらしい。


 それをわかりやすくしたのが下のスライド

Starswarm CPU scaling EQ.png


 グラフを見ると、GTX980より下の性能のGPUだけが4コアを無駄にしているのがわかる。

 そして6コアのパフォーマンスを引き出すには、少なくともStarswarmに関しては、さらに性能の高いGPUの登場を待たなければならない。



 ということで、次世代APIは確かにマルチコアのパワーを引き出したのだが、現時点では4個以上のコアですら持て余していることになる。


 そしてこれは、ほとんどの場面においてCore i3だけでも充分という意味でもあるのだが。







 次世代APIのマルチコアパワー、とにかくすごいんだけど、

 むしろ多すぎるスレッドが無駄になっている なんてちょっと意外な結果に。


 Core i7買う奴なんて情弱、いやCore i5買う奴が真の情弱!なんて話に?


 まあDirectX11がCPUの力を無駄にしていただけかな。


 ですので、Starswarmと現時点に限っての話であり、SLIやCrossfire、そしてより高性能なGPUの登場で、6コアや8コアが力を発揮することも今後は考えられるかと。




 しかし、またここで新しい疑問が。

 たしかに多コアは無駄になってるけども、

 APUやゲーム機のような貧弱多スレッドはどうなるのか?とか、 


 IntelCPUは1スレッドあたりの処理能力が高いから無駄になってるんじゃないかとか、


 そういうのはまた新しいレポートが来てるので、


 そちらをご覧になると良いと思います











 ついでに、いくつか


バッチのサブミットに要する時間。

Starswarm CPU Batch submission time.png


 全くもって驚嘆するしかない結果。

 特にAMDのケースにおいては、サブミッションタイムが0.1秒ほどだったのが、最大で0.005秒ほどにまで短縮されている。

 事実上、CPUがバッチのサブミットにかかる時間は完全に除去され、12万以上のドローコールは、わずかミリセカンドの内にサブミットされてしまったわけだ。

 この最適化のメリットはStarswarmだけでなく、他の多くのゲームにも及ぶことだろう。



最後に、CPU使用率。


Dx11&R9 290X
290X_Dx_11_CPU Usage.png


Dx12&R9 290X
290X_DX_12_CPU Usage.png



DX12の方が各コアを効率よく使っていることは言うまでもない。





ソース:AnandTech
posted by 日々さか@海外 at 07:54| Comment(0) | TrackBack(0) | API (DirectX12、Vulkan、Mantle) | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/414080287

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。