NVIDIAã¯Kepler (Compute Capability 3.0) ä¸ä»£ã®ãã¼ãã¦ã§ã¢ã«ããã¦ãWarp Shuffleå½ä»¤ãå®è£ ãã¾ãããWarpã·ã£ããã«ã¯CUDAããçµã¿è¾¼ã¿é¢æ° (intrinsic function) ã®å½¢ã§å©ç¨ã§ããSIMDå½ä»¤ã®ä¸ç¨®ã§ãWarpã¨å¼ã°ããã¹ã¬ããã°ã«ã¼ãå ã§ã®ä¸¦åãã¼ã¿äº¤æãå®ç¾ããæ©è½ã§ããNVIDIAã®GPUã§ã¯ãã²ã¨ã¤ã®Warpã¯32åã®ãã¼ãã¦ã§ã¢ã¹ã¬ãããããªããã¾ãWarpå ã®åã¹ã¬ããã¯ãã¹ã¦åãå½ä»¤ãå®è¡ãã¾ã*1ãã¤ã¾ããã²ã¨ã¤ã®Warpå ã®ã¹ã¬ãã群ã¯ãã¹ã¦åæãã¦ä¸¦ååä½ãã*2ãããWarpã·ã£ããã«ã使ããã¨ã§ããã¼ã¿åã®ç·åãæ±ãããªãã¯ã·ã§ã³æ¼ç®ãªã©ããå ±æã¡ã¢ãªã使ããããé«éã«ä¸¦åå®è¡ãããã¨ãã§ãã¾ãã
Warpã·ã£ããã«ã«é¢ãã¦ã¯ã以åãCUDA Warpシャッフル命令のエミュレーションãã¨ããè¨äºãæ¸ãã¾ããããCUDAã®å ±æã¡ã¢ãªã«é¢ããç¥èãããã°ãWarpã·ã£ããã«ãããã«ä¾¿å©ã§ç°¡æ½ãªæ©è½ã§ããããçè§£ã§ããã¨æãã¾ãã
Warpã·ã£ããã«ã®ãããªSIMDå½ä»¤ã¯ãæ±ç¨çãªè¨ç®ï¼GPGPUï¼ã ãã§ãªããã°ã©ãã£ãã¯ã¹ã®ãã¹ãã¨ãã§ã¯ãå¦çãªã©ã®é«éåã«ãéå¸¸ã«æç¨ãªã®ã§ãããAPIã®åæ»ã®ããã§ãã¾ãæ¨æºåãé²ãã§ãã¾ããã§ãããNVIDIAã¯Warpã·ã£ããã«å½ä»¤ãHLSL/GLSLããå©ç¨ã§ãããã³ãã¼æ¡å¼µãæä¾ãã¦ãã¾ãããå½ç¶NVIDIAç°å¢ã§ãã使ããªãã¨ããå¶ç´ãããã¾ãã
Warpã·ã£ããã«ç¸å½ã®æ©è½ã¯ã¾ããOpenCL 2.0ã®æ¡å¼µæ©è½cl_khr_subgroupsããã³OpenCL 2.1ã®ã³ã¢æ©è½ã¨ãã¦çå®ããã¦ãã¾ããã2018å¹´3æç¾å¨ãOpenCLã®å®è£ ã¯ã©ã®ãã³ãã¼ãåæ»ãã¦ãããOpenCLã«ã¯æå¾ ã§ããªãç¶æ³ã§ãã䏿¹ãOpenGLã«ãARBæ¡å¼µGL_ARB_shader_ballotã¨ãã¦åå¨ãã¦ãããOpenCLåæ§ã«ãµãã°ã«ã¼ã (Sub-groupãããã¯Subgroup) ã¨å¼ã°ãã¦ãã¾ããGL_ARB_shader_ballotã¯CUDAã®Warpã·ã£ããã«ã®ãµãã»ããã§ãããã®ã®ãGLSLã使ãã°OpenGLã ãã§ãªãVulkanãããåºæ¬çãªãµãã°ã«ã¼ãã®æ©è½ãå©ç¨ã§ãã¾ãã
Vulkanã®å¦ç¿ãå ¼ãã¦ãã³ã³ãã¥ã¼ãã·ã§ã¼ãã¼ã«ã¦ãµãã°ã«ã¼ãå½ä»¤ãå©ç¨ãããµã³ãã«ã³ã¼ããæ¸ãã¦ã¿ã¾ãããå®è¡ã«ã¯Vulkan 1.0ã¨VK_EXT_shader_subgroup_ballotæ¡å¼µããµãã¼ãããç°å¢ãå¿ è¦ã¨ãªãã¾ããNVIDIAãã¼ãã¦ã§ã¢ã®å ´åãKeplerä¸ä»£ä»¥éã§ããã°æ¡å¼µããµãã¼ããã¦ããã¯ãã§ãããµã³ãã«ã¯Windowsç°å¢åãã§ãããã¦ã£ã³ãã¦ã·ã¹ãã ã¸ã®ã¢ã¯ã»ã¹ãå¿ è¦ã¨ããªããªãã¹ã¯ãªã¼ã³ã®ã³ã³ãã¥ã¼ãæ©è½ã ãã使ã£ã¦ãããããä»ã®ç°å¢ã«ç§»æ¤ããã®ã¯æ¯è¼çç°¡åã ã¨æãã¾ã*3ã
以忏ããè¨äºãVulkan SDK付属のGLSLコンパイラーãã§ã¯ãVulkan SDKä»å±ã®ã·ã§ã¼ãã¼ã³ã³ãã¤ã©ã¼ããã¾ãã«æªå®æãªãã¨ãåãã¦ãã¾ãããããã®å¾çã
ã¨é²åãç¶ããã»ã¼ä½¿ããã¬ãã«ã«éããããã§ãã
ãªããä»åã¯ãã¹ãã³ã¼ãã®è¨è¿°éãæ¸ãããããC++åãã®ã©ããã¼ (vulkan.hpp) ã使ã£ã¦ãã¾ãããã¨ãã¨ãã®ã©ããã¼ã¯NVIDIAããå¯è´ããããã®ããã¼ã¹ã«å
¬å¼åããããããã®ã§ãããè¨è¨ä¸è¶³ãªç¹ãæ£è¦ãããããä¸é¨ã®é¢æ°ãã³ãã¬ã¼ãã®ã³ã³ãã¤ã«ãéããªãã¨ããã²ã©ããã°ãæ··å
¥ãã¦ãããã¨ãã¾ãã§ãã¹ãããã¦ããªããã¨ãããããã¨ããããã¾ããã¯ã£ããè¨ã£ã¦ãããã¯ã·ã§ã³ã³ã¼ãã«ä½¿ãã«ã¯å³ããå°è±¡ã§ããæ¬æ°ã§Vulkanã®å°å
¥ãæ¤è¨ããå ´åã¯ãã¶ã£ã¡ãããã®ã©ããã¼ã¯ä½¿ããªãã»ããããã§ãããã
ãªããAMDã¯Anvil*4ã¨ããä¸ä½ã¬ãã«ã®Vulkanãã¼ã¹ãã¬ã¼ã ã¯ã¼ã¯ãå ¬éãã¦ãã¾ããããã¤ãä»äºãä¸éå端ãªAMDãããã®å ã¡ããã¨ç¶ç¶çã«ã¡ã³ããã¦ãããã®ãã©ããä¸å®ã§ããAMD APP SDKãã2015å¹´8æã«ãªãªã¼ã¹ãããv3.0ã§æ¾ç½®ãããã¾ã¾ã¨ããä½ããããªã®ã§ãæ£ç´æå¾ ã§ãã¾ããã
Vulkan 1.1ã¨Sub-groupå½ä»¤
å æ¥Vulkanã®ã¢ãããã¼ãã¨ãã¦v1.1ãçºè¡¨ããã¾ããããDirect3D 12ãå è¡ãã¦ããããã«ãGPUã®æ´»ç¨ãã·ã§ã¼ãã¼ã¢ãã« (SM) 6.0ã«å¯¾å¿ããå½¢ã§ãéè¦ãªæ°æ©è½ã追å ããã¦ããããã§ãããµãã°ã«ã¼ãæ¼ç® (subgroup operation) ã«é¢ãã¦ããæ¢åã®OpenGLäºæã®ARBæ¡å¼µã¨ã¯å¥ã®KHRæ¡å¼µ (GL_KHR_shader_subgroup) ããã³ãã¹ãAPIã®æ£å¼ä»æ§ãçå®ãããCUDAã¨åçãããã¯ãã以ä¸ã®æ©è½ãç²å¾ããããã§ãã
ãªããDirectXã«ãããSM 6.0ã®ç®çã¨ãè¨ããã®ããSub-groupã«ç¸å½ããWaveå½ä»¤ã»ããã§ããWaveã¯æ©è½ã¬ãã«12_0以ä¸ã§ãªãã¨ä½¿ããªãã¨ããããããDirect3D 12èªä½ãWindows 10ã§ãªãã¨ä½¿ããªãã¨ãããå¶ç´ããããå人çã«ã¯ãã©ãããã©ã¼ã å¶ç´ã®å°ãªãVulkanã®ã»ããææã ã¨æãã®ã§ããããããã«ããããã§ããããCUDA以å¤ã§ãé«éãªSIMDå½ä»¤ãæ¨æºçã«å©ç¨ã§ããåå°ãæ´ãå§ãã¾ããã
ã¨ã¯ãããHLSLãGLSLããCUDA C++ã«æ¯ã¹ãã¨ããã°ã©ãããªãã£ã¯é¥ãã«å£ãã¾ããå人çã«ã¯C++ã®ãã³ãã¬ã¼ãã使ããªãã®ãä¸çªçãã§ããOpenCLã¯2.2ã§ããããã«ã¼ãã«è¨è¿°è¨èªã«C++ãæ¡ç¨ãã¾ããããPCãã©ãããã©ã¼ã ã§ã¯ã¾ã ã©ã®ãã³ãã¼ãOpenCL 2.2ããµãã¼ããã¦ãã¾ãããç´ç²ãªGPGPUç¨éã§ããã°ãçµå±CUDAã®å°ä½ã¯å®æ³°ã§ããããã åã«NVIDIAãã¼ãã¦ã§ã¢ã®è½åãæå¤§éæ´»ç¨ã§ããAPIã¨ããã ãã§ãªããå°çä¸ã§ãã£ã¨ãçç£æ§ã®é«ãGPGPUéçºåºç¤ã§ãããã¨ã¯çãã®ä½å°ãããã¾ãããVulkanã¯ãã£ããSPIR-Vã¨ããå¼·åãªã·ã§ã¼ãã¼ä¸éè¨èªãæã£ã¦çã¾ããã®ã ãããä»å¾ã¯ã·ã§ã¼ãã¼ã³ã³ãã¤ã©ã¼ã®ãããªãé£èºã¨ãMetalã·ã§ã¼ãã£ã³ã°è¨èªã®ãããªæ°ããC++ãã¼ã¹ã®ããã³ãã¨ã³ãã®ãµãã¼ãã«æå¾
ãããã¨ããã§ãã
*1:AMD GPUã«ããã¦ãWarpåæ§ã®æ¦å¿µã¨ãã¦Wavefrontãåå¨ãã¾ããWavefrontã¯64åã®ãã¼ãã¦ã§ã¢ã¹ã¬ãããããªãã¾ãã
*2:GPUã³ã¢ã®1ãµã¤ã¯ã«ã§Warpå ã®ãã¹ã¦ã®ã¹ã¬ãããåæã«é§åããã¨ã¯éãã¾ããããè«ççã«ã¯å¿ ãåæããããã«ãªã£ã¦ãã¾ãã
*3:OpenGLã§ã¯ä»®ã«ã³ã³ãã¥ã¼ããå©ç¨ããã ãã§ãã£ã¦ããGLã³ã³ããã¹ãã®ä½æã«ã¦ã£ã³ãã¦ãã³ãã«ãå¿ è¦ã¨ãããããå®è¡ããã¤ã¹ãæç¤ºçã«é¸æããæ©è½ããæ¨æºã§æä¾ããã¦ãã¾ããã§ããããVulkanã¯é¥ãã«æ´ç·´ããã¦ãããOpenCLãDirectComputeã¨ä¼¼ããããªä½¿ãæ¹ãã§ããããã«ãªã£ã¦ãã¾ãã
*4:Anvilã¨ã¯ãéåºãï¼ããªã¨ãï¼ã¨ããæå³ã§ãããUbisoftã®Anvil Engineã¨ã«ãã£ã¦ããã®ã§ãã§ããã°å¥ã®åç§°ã«ãã¦æ¬²ããã£ãã§ãã