当前位置: 首页 > 专利查询>微软公司专利>正文

计算着色器的栅格化制造技术

技术编号:10542929 阅读:176 留言:0更新日期:2014-10-15 18:00
描述了将计算机着色器程序划分为被称作线程循环的最大大小的区域的编译器算法。该算法可以移除原始的基于栅栏的同步,而因此变换的着色器程序在语义上保持等同于原始着色器程序(即,所变换的着色器程序是正确的)。此外,所变换的着色器程序服从经由现有编译器技术所进行的优化,并且能够被(多个)CPU线程有效执行。调度调用能够通过分配单个或多个CPU线程以执行线程分块而在CPU上进行负载平衡。此外,并发执行的线程分块的数量并不使得CPU过载。

【技术实现步骤摘要】
【国外来华专利技术】计算着色器的栅格化
技术介绍
近来的趋势显示用于通用计算的GPU(图形处理单元)(GPGPU)的使用明显增长。也就是说,GPU趋向于被用于并非必然与计算机图形相关的计算,诸如物理仿真、视频代码转换和其它数据并行计算。此外,在GPU中引入片上共享存储器已经导致了诸如全前缀和(scan)、柱状图计算、卷积、快速傅里叶变换(FFT)、物理仿真等广泛使用的计算密集型算法的性能出现了引人注目的增长。微软公司提出了DirectX(TM)HLSL(高阶着色语言)(TM)ComputeShader,作为访问和利用共享存储器容量的软件API(应用编程接口)。注意到,DirectX、HLSL和ComputeShader将作为示例被提到,所要理解的是,针对其评论和讨论可同样应用于诸如CUDA(计算统一设备架构)、OpenCL(开放计算语言)等的其它着色语言。这些将被统称为“计算着色器”。完整软件平台应当在CPU上提供计算着色器(等)的有效软件栅格化以便在GPU硬件并不作为选项或者当软件平台在无头(headless)VM(虚拟机)情形中使用时提供回退(fallback),而无需实施GPU和CPU硬件解决方案。也就本文档来自技高网...
计算着色器的栅格化

【技术保护点】
一种对由着色语言的源代码所组成的计算着色器所编译的中间表示(IR)代码进行变换的方法,包括:执行标记和分析途径,其包括标记IR代码中的子程序的开始和结尾,针对每个这样的栅栏标记嵌套辖域和相关运算标记嵌套在子程序中的存储器栅栏,并且标记子程序中被确定为执行栅栏的调用点;并且通过对子程序的运算进行处理而使用所标记的IR代码形成最大大小的线程循环。

【技术特征摘要】
【国外来华专利技术】2012.02.16 US 13/398,7981.一种对由着色语言的源代码所组成的计算着色器所编译的中间表示IR代码进行变换的方法,该方法由包括与存储IR代码的存储硬件耦合的处理硬件的计算设备执行,该方法由处理硬件执行,该方法包括:执行标记和分析途径,其包括:确定IR代码中的第一位置是IR代码中子程序的开始和结尾;标记IR代码中的确定的第一位置,该标记是基于它们已被确定为IR代码中子程序的开始和结尾的位置而做出;确定IR代码中的第二位置是子程序中嵌套的栅栏,并且标记确定的第二位置,该标记是基于它们已被确定为IR代码中子程序中嵌套的栅栏的位置而做出;针对每个栅栏,识别并且标记嵌套辖域和相关运算;确定该栅栏在IR代码中的统一控制流程UCF转移中发生还是在IR代码中的相异控制流程DCF转移中发生;确定IR代码中的第三位置是被确定为经由调用链直接或间接执行栅栏的子程序的调用点,以及标记第三位置,该标记是基于它们已被确定为IR代码中确定为直接或间接执行栅栏的子程序中的调用点的位置而做出;以及通过对该标记所标记的子程序的运算进行处理而使用所标记的IR代码形成最大大小的线程循环,处理包括按序评估所标记的运算,针对当前运算,评估包括:紧接当前运算之前插入结束线程循环运算,直到当前运算被标记为子程序的开始,在当前运算是紧处于开始线程循环运算之后的结束线程循环运算时,移除这两个运算,紧接当前运算之后插入开始线程循环运算,直到当前运算是子程序的结尾,以及在当前运算是栅栏时,将其从IR代码中移除,该方法进一步包括:当将IR代码变换为线程循环时,对线程循环之外的UCF转移进行优化并且对线程循环之外的DCF转移进行优化。2.根据权利要求1的方法,进一步包括确定当前所处理的运算并不是子程序的开始,并且作为响应在当前所处理的运算之前插入结束线程循环运算。3.根据权利要求2的方法,其中在开始线程循环运算紧处于结束线程循环运算之前时移除结束线程循环运算和相对应的开始线程循环运算。4.根据权利要求1的方法,进一步包括确定当前所处理的运算并不是子程序的结尾,并且作为响应直接在当前所处理的运算之后插入开始线程循环运算。5.根据权利要求1的方法,进一步包括输出更新的IR代码,其中IR代码中对应于源代码中的栅栏语句的栅栏运算从IR代码中被移除并且线程循环被添加至该IR代码。6.根据权利要求5的方法,其中对栅栏被移除的经变换的IR代码进行编译并且在并非GPU的CPU上执行,并且其中由多个CPU线程执行线程循环。7.一种计算设备执行的方法包括:由计算设备的处理硬件执行在编译器接收到对应于存储在计算设备的存储硬件中的着色器程序的代码时所调用的编译器算法,该着色器程序执行非图形计算并且包括着色器语言代码;以及通过由处理硬件执行的该算法将着色器程序的代码划分为最大大小的线程循环并且从该代码中去除同步栅栏,其中划分是根据被允许来同时执行的线程块的最大数目来进行的,其中移除同步栅栏通过以下步骤进行:通过检测和标记栅栏进行标记阶段,针对每个栅栏,确定该栅栏在IR代码中的统一控制流程UCF转移中发生还是在IR代码中的相异控制流程DCF转移中发生;其中代码中针对划分而要被标记的位置包括第一运算和第二运算,第一运算包括确定来潜在地直接或间接地执行栅栏的各个子程序的相应的开始和结尾,第二运算定义所有嵌套确定来潜在地执行相应的检测的栅栏的调用者的辖域;通过按序评估所标记的运算形成最大大小的线程循环,对于当前运算,评估包括:紧接当前运算之前插入结束线程循环运算,直到当前运算被标记为子程序的开始,在当前运算是紧处于开始线程循环运算之后的结束线程循环运算时,移除这两个运算,紧接当前运算之后插入开始线程循环运算,直到当前运算是子程序的结尾,以及在当前运算是栅栏时,将其从IR代码中移除;以及在存储硬件中存储修改的IR代码;以及进一步包括:当将IR代码变换为线程循环时,对线程循环之外的UCF转移进行优化并且对线程循环之外的DCF转移进行优化。8.根据权利要求7的方法,其中该划分被执行而使得着色器程序中将被同步栅栏所施行的数据依赖性尽管在同步栅栏被移除的情况下也得以保留。9.根据权利要求8的方法,其中该划分保留了代码中至少子程序或控制流程构造的嵌套。10.一种对由着色语言的源代码所组成的计算着色器所编译的中间表示IR代码进行变换的方法,包括:识别IR代码中的栅栏,包括确定哪些栅栏在IR代码中的统一控制流程UCF转移中发生和哪些栅栏在IR代码中的相异控制流程DCF转移中发生;当将IR代码变换为线程循环时,对线程循环之外的UCF转移进行优化并且对线程循环之外的DCF转移进行优化;以及在并非GPU的CPU上执行经变换的IR代码。11.一种对由着色语言的源代...

【专利技术属性】
技术研发人员:A格莱斯特BP泰恩D塞西安斯M莱亚普诺夫Y多特森科
申请(专利权)人:微软公司
类型:发明
国别省市:美国;US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1