{"id":354,"date":"2015-04-30T16:45:00","date_gmt":"2015-04-30T16:45:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/directx\/2015\/04\/30\/directx-12-multiadapter-lighting-up-dormant-silicon-and-making-it-work-for-you\/"},"modified":"2015-04-30T16:45:00","modified_gmt":"2015-04-30T16:45:00","slug":"directx-12-multiadapter-lighting-up-dormant-silicon-and-making-it-work-for-you","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/directx\/directx-12-multiadapter-lighting-up-dormant-silicon-and-making-it-work-for-you\/","title":{"rendered":"DirectX 12 Multiadapter: Lighting up dormant silicon and making it work for you"},"content":{"rendered":"<p>Are you one of the millions of PC users with a laptop or a desktop system with an integrated GPU as well as a discrete GPU?\u00a0 Before Windows 10 and DirectX 12, all the performance potential from the second GPU goes unused.\u00a0 With DirectX 12 and Windows 10, application developers can use every GPU on the system simultaneously!<\/p>\n<p>Are you an elite power gamer with multiple graphics cards?\u00a0 Well, by giving the applications direct control over all of the hardware on the system, applications can optimize more effectively for the ultra-high end, squeezing even more performance out of the most powerful systems available today and in the future.<\/p>\n<p>We\u2019re calling this DX12 feature \u201cMultiadapter\u201d, and applications can use it to unlock all that silicon that would otherwise be sitting dormant doing nothing.<\/p>\n<p>At \/\/build 2015 we both announced the Multiadapter feature and showed several examples of how it can be used.<\/p>\n<h2>Square Enix and DirectX 12 Multiadapter<\/h2>\n<p>Square Enix created a demo called \u201cWITCH CHAPTER 0 [cry]\u201d running on DirectX 12 and we were very happy to be able to show it at \/\/build 2015.<\/p>\n<p>With about 63 million polygons per scene and 8k by 8k textures, the demo showed the unprecedented level of detail you can achieve with DirectX 12 and Windows 10.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/42\/2019\/03\/7220.square-enix-dx12.jpg\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/42\/2019\/03\/7220.square-enix-dx12.jpg\" alt=\"\" width=\"810\" height=\"540\" border=\"0\" \/><\/a><\/p>\n<p><em>Square Enix\u2019s DirectX 12 demo rendering in real-time on stage at \/\/build 2015<\/em><\/p>\n<p>The demo utilized four NVIDIA GeForce GTX Titan X cards enabling Square Enix to achieve extremely realistic cinematic level rendering; only instead of pre-rendered content, this was being rendered in real-time!<\/p>\n<p>This demonstrated the upper end of what\u2019s possible using multiple high power GPUs and DirectX 12.<\/p>\n<p>Take a look at the live demo video from <a title=\"https:\/\/www.youtube.com\/watch?v=e1mwhdYZvSE\" href=\"https:\/\/www.youtube.com\/watch?v=e1mwhdYZvSE\">April 30th&#8217;s Keynote Presentation<\/a>.<\/p>\n<p>Now let\u2019s take a look at how DirectX 12\u2019s Multiadapter is also designed to extract all the power from a variety of mixed power hardware.<\/p>\n<h2><em>Explicit Multiadapter control in Unreal Engine 4<\/em><\/h2>\n<p>We used Epic Games\u2019 DX12 Unreal Engine 4 to split the rendering workload across an integrated Intel GPU and a discrete NVIDIA GPU to showcase how it is possible to use two disparate GPUs simultaneously to maximize performance.<\/p>\n<p>To show how this extra boost can help gamers, we set up a race between a single discrete NVIDIA GPU and a Multiadapter configuration consisting of the same single discrete GPU + an integrated Intel GPU.\u00a0 In this race, each configuration rendered 635 frames of the UE4 Elemental demo as quickly as it was able to.<\/p>\n<p>The results below show that the Multiadapter configuration manages to beat the single adapter configuration in a race to 635 frames.\u00a0 At the end of the benchmark, we can calculate the overall fps where Multiadapter comes out as the definitive winner.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/42\/2019\/03\/0602.multiadapter-dx12-ue4-1.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/42\/2019\/03\/0602.multiadapter-dx12-ue4-1.png\" alt=\"\" width=\"810\" height=\"410\" border=\"0\" \/><\/a><\/p>\n<p><em>Multiadapter already beating single adapter at ~6 seconds<\/em><\/p>\n<p><em><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/42\/2019\/03\/3730.multiadapter-dx12-ue4-2.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/42\/2019\/03\/3730.multiadapter-dx12-ue4-2.png\" alt=\"\" width=\"810\" height=\"422\" border=\"0\" \/><\/a>\n<\/em><\/p>\n<p><em>Final results of the fixed-frame-count benchmark<\/em><\/p>\n<h2><em>How does it work?<\/em><\/h2>\n<p>We recognized that most mixed GPU systems in the world were not making the most out of the hardware they had.\u00a0 So in our quest to maximize performance, we set out to enable separable and contiguous workloads to be executed in parallel on separate GPUs.\u00a0 One such example of separable workloads is postprocessing.<\/p>\n<p>Virtually every game out there makes use of postprocessing to make your favorite games visually impressive; but that postprocessing work doesn\u2019t come free. \u00a0By offloading some of the postprocessing work to a second GPU, the first GPU is freed up to start on the next frame before it would have otherwise been able to improving your overall framerate.<\/p>\n<h2>Analyzing the results<\/h2>\n<p>The below image shows the real workload timeline of the Intel and NVIDIA GPUs (to scale).\u00a0 You can see how the workload that would normally be on the NVIDIA GPU is being executed on the Intel GPU instead.<\/p>\n<p>In the demo, we even make use of DirectX 12\u2019s Multiengine feature to complement the Multiadapter feature.\u00a0 You can see that the copy operations on NVIDIA\u2019s copy engine execute in parallel with the NVIDIA 3D engine operations improving performance even more.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/42\/2019\/03\/7725.multiadapter-dx12-ue4-gputimeline.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/42\/2019\/03\/7725.multiadapter-dx12-ue4-gputimeline.png\" alt=\"\" width=\"811\" height=\"364\" border=\"0\" \/><\/a><\/p>\n<p><em>GPU workload timeline (to scale)<\/em><\/p>\n<p>Taking a look at the Intel workload, we can see that we still have some unused GPU time that we can take advantage of.\u00a0 The final GPU utilization results were:<\/p>\n<ul>\n<li>NVIDIA: ~100% utilization on average<\/li>\n<li>Intel: ~70% utilization on average<\/li>\n<\/ul>\n<p>Looking to the future, this tells us that the opportunity exists to extract even more performance out of the demo hardware.<\/p>\n<p>For more details, take a look at Max McMullen\u2019s talk at \/\/build 2015 (when available):<\/p>\n<p><a href=\"https:\/\/channel9.msdn.com\/Events\/Build\/2015\/3-673\">https:\/\/channel9.msdn.com\/Events\/Build\/2015\/3-673<\/a><\/p>\n<p>You can also take a look at a video of the actual benchmark here:<\/p>\n<p><a href=\"https:\/\/channel9.msdn.com\/Blogs\/DirectX-Developer-Blog\/DirectX-12-Multiadapter-Unreal-Engine-4\">https:\/\/channel9.msdn.com\/Blogs\/DirectX-Developer-Blog\/DirectX-12-Multiadapter-Unreal-Engine-4<\/a><\/p>\n<h2>Opening doors to new possibilities<\/h2>\n<p>DirectX 12 already helps you <a href=\"http:\/\/blogs.msdn.com\/b\/directx\/archive\/2015\/03\/10\/directx-12-looking-back-at-gdc-2015-and-a-year-of-amazing-progress.aspx\">maximize performance by bringing apps closer to the metal<\/a>.\u00a0 At \/\/build 2015, we have shown you a glimpse of the performance possibilities with DirectX 12 and how it can light up that precious but dormant silicon already in your machine using Multiadapter.<\/p>\n<p>The fine grained-control over ALL of the hardware in the system offered by DirectX 12 gives game developers the power to use techniques that were simply not possible in DirectX 11. Our Multiadapter demos only scratch the surface of what creative game developers can do now that they have the ability to directly use ALL of the graphics hardware in the system, even if such hardware has different capabilities and is from different manufacturers.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Are you one of the millions of PC users with a laptop or a desktop system with an integrated GPU as well as a discrete GPU?\u00a0 Before Windows 10 and DirectX 12, all the performance potential from the second GPU goes unused.\u00a0 With DirectX 12 and Windows 10, application developers can use every GPU on [&hellip;]<\/p>\n","protected":false},"author":1735,"featured_media":12651,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[13,14,17,21,27],"class_list":["post-354","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-directx","tag-direct3d","tag-direct3d12","tag-directx","tag-directx12","tag-gaming"],"acf":[],"blog_post_summary":"<p>Are you one of the millions of PC users with a laptop or a desktop system with an integrated GPU as well as a discrete GPU?\u00a0 Before Windows 10 and DirectX 12, all the performance potential from the second GPU goes unused.\u00a0 With DirectX 12 and Windows 10, application developers can use every GPU on [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/posts\/354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/users\/1735"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/comments?post=354"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/posts\/354\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/media\/12651"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/media?parent=354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/categories?post=354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/tags?post=354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}