CN113924547A - 通过编译器精度选择的着色器程序加速 - Google Patents
通过编译器精度选择的着色器程序加速 Download PDFInfo
- Publication number
- CN113924547A CN113924547A CN202080040930.3A CN202080040930A CN113924547A CN 113924547 A CN113924547 A CN 113924547A CN 202080040930 A CN202080040930 A CN 202080040930A CN 113924547 A CN113924547 A CN 113924547A
- Authority
- CN
- China
- Prior art keywords
- precision
- loss
- program code
- risk
- accuracy
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Graphics (AREA)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
用于降低着色器程序中使用的计算的精度的方法和设备可以包括接收用于着色器程序的程序代码以与图形处理单元(GPU)一起使用,该图形处理单元(GPU)支持半精度存储和着色器程序中的算术。该方法和设备可以包括在程序代码上执行至少一个通道以选择程序代码内的操作集,以降低由操作集使用的多个计算的精度,并且针对多个计算中的每个计算,评估针对将精度降低到半精度的精度损失风险。该方法和设备可以包括响应于精度损失风险低于精度损失阈值,通过将计算重写为半精度来生成经编辑的程序代码。
Description
背景技术
本公开涉及在计算机设备上进行图形处理,并且更特别地涉及编译着色器程序代码的设备和方法。
游戏通常在游戏内使用数以万计的图形着色器程序为游戏内的图像生成适当级别的颜色和/或特殊效果。由于游戏中存在大量的着色器程序,因此尝试提高着色器程序性能的开发人员可能会遇到困难。图形着色器的处理和/或性能可以确定游戏的性能和/或计算机设备的功率消耗。
因此,在本领域中存在改进图形着色器的性能的需要。
发明内容
下面提出了本公开的一个或多个实现的简化概述,以便提供对这种实现的基本理解。本发明内容不是所有预期实现的广泛概述,并且既不旨在标识所有实现的关键或必要元素,也不旨在描画任何或所有实现的范围。其唯一目的是以简化的形式呈现本公开的一个或多个实现的一些概念,作为稍后呈现的更详细描述的前奏。
一个示例实现涉及一种计算机设备。该计算机设备可以包括:支持半精度存储和着色器程序中的算术的图形处理单元(GPU);存储数据和指令的存储器;被配置为与存储器通信的至少一个处理器;与存储器和至少一个处理器通信的编译器,其中编译器可操作以:接收用于着色器程序的程序代码以与GPU一起使用;在程序代码上执行至少一个通道(pass),以选择程序代码内的操作集,以降低由操作集使用的多个计算的精度;针对多个计算中的每个计算,评估将针对计算的精度降低到半精度的精度损失风险;响应于精度损失风险低于精度损失阈值,通过将计算重写为半精度来生成经编辑程序代码;以及响应于精度损失风险高于精度损失阈值,提供具有针对可能的精度损失的警告的通知。
另一示例实现涉及一种用于降低着色器程序中使用的计算的精度的方法。该方法可以包括在计算机设备上的编译器处,接收用于着色器程序的程序代码以与图形处理单元(GPU)一起使用,该图形处理单元(GPU)支持半精度存储和着色器程序中的算术。该方法可以包括在程序代码上执行至少一个通道,以选择程序代码内的操作集,以降低由操作集使用的多个计算的精度。该方法可以包括针对多个计算中的每个计算,评估将计算的精度降低到半精度的精度损失风险。该方法可以包括响应于精度损失风险低于精度损失阈值,通过将计算重写为半精度来生成经编辑的程序代码。该方法可以包括响应于精度损失风险高于精度损失阈值,提供具有精度损失警告的通知。
另一示例实现涉及一种存储能够由计算机设备执行的指令的计算机可读介质。该计算机可读介质可以包括至少一个指令以用于使计算机设备接收用于着色器程序的程序代码以与图形处理单元(GPU)一起使用,该图形处理单元(GPU)支持半精度存储和着色器程序中的算术。该计算机可读介质可以包括至少一个指令以用于使计算机设备在程序代码上执行至少一个通道,以选择程序代码内的操作集,以降低由操作集使用的多个计算的精度。该计算机可读介质可以包括至少一个指令以用于使计算机设备针对多个计算中的每个计算,评估将计算的精度降低到半精度的精度损失风险。该计算机可读介质可以包括至少一个指令以用于使计算机设备响应于精度损失风险低于精度损失阈值,通过将计算重写为半精度来生成经编辑的程序代码。该计算机可读介质可以包括至少一个指令以用于使计算机设备响应于精度损失风险高于精度损失阈值,提供具有精度损失警告的通知。
与本公开实现有关的另外的优点和新颖特征将部分地在以下描述中得以阐述,并且部分地将在检查以下内容或通过其实践学习以下内容后对本领域技术人员变得更加明显。
附图说明
在附图中:
图1是根据本公开的实现的示例计算机设备的示意性框图;
图2是根据本公开的实现的具有操作集的表达式树的示例;
图3是根据本公开的实现的用于降低在着色器程序中使用的计算的精度的示例方法的流程图;
图4是根据本公开的实现的用于评估在着色器程序中使用的计算的较低的精度的示例方法的流程图;以及
图5是根据本公开的实现的示例设备的示意性框图。
具体实施方式
本公开涉及一种设备和方法,用于使用编译器来帮助降低在与诸如图形处理单元(GPU)的图形硬件一起使用的着色器程序中使用的计算的精度。执行游戏应用的计算机设备通常在游戏内使用数以万计的着色器程序为游戏内的图像生成适当级别的颜色和/或特殊效果。例如,着色器程序可以对以诸如单精度浮点格式的计算机数字格式存储的数据进行操作,该格式占用32位计算机存储器。现代图形硬件支持半精度存储和/或着色器程序中的算术,其中半精度是指占用16位计算机存储器的二进制浮点计算机数字格式。由于增加了运行中的着色器程序的数目,提高了算术计算的吞吐量,和/或加速了存储器访问,使用半精度存储和/或在着色器程序中算术对着色器程序的性能提供了益处。
然而,并非着色器程序中使用的所有计算都可以容忍降低的精度和/或范围格式而不降低输出中的图像质量(例如,游戏或应用中的被渲染目标)。另外,由于从单精度到半精度并返回的转换,可能难以预测向着色器程序添加半精度的成本。此外,考虑到游戏中的大量着色器(例如,数以万计的着色器),手动转换着色器程序以使用半精度所涉及的工作可能是不切实际的。这样,标识着色器程序内可以容忍降低的精度、范围和/或手动编辑着色器的计算会导致着色器程序开发人员的庞大的工作量。
本公开的设备和方法可以在编译器内提供自动化过程以标识着色器程序中的计算,其中精度可以被降低和/或精度损失可以是可接受的。例如,编译器可以从已知使用半精度的着色器程序中的输出(例如,到渲染目标的输出或在着色器中标记为一半的任何其他输出)构建从属链。另外,编译器可以从已知使用半精度的着色器程序中的输入来构建从属链。例如,顶点着色器的输入布局可以指定R16G16B16A16_FLOAT格式,该格式已知使用半精度。在标识输出和对应的从属链之后,编译器可以评估结果表达式并且可以尝试降低中间值、函数参数、存储器负载和/或输出从属链内的任何其他指令的精度,同时监视可能对精度敏感的指令。可能对精度和/或精度变化敏感的指令可以包括但不限于三角函数指令或超越指令。例如,当计算值可能超出预期范围和/或在精度降低时超出精度界限时,这些指令可能对精度和/或精度变化敏感。
另外,编译器可以加权转换操作的成本和/或转换操作带来的任何功率消耗的收益,以确定是否可以降低精度和/或在什么情况下可以接受精度损失。例如,编译器可以将转换的运行时成本(例如,执行转换所消耗的时间和/或功率)针对转换的收益进行加权,以确定精度是否可以被降低。另外,对计算机设备的功率消耗收益可以胜过可以因降低计算精度而导致的精度损失。这样,编译器可以确定精度损失可以是可接受的,并且可以降低计算精度以便在使用半精度计算时从功率消耗节省中获益。对于精度损失风险较低的表达式链部分,编译器可以通过使用半精度算法重写表达式来生成经编辑的程序代码。编译器还可以提供改变报告,变化报告带有关于对着色器程序进行的改变的信息。
本公开的设备和方法还可以接收用户输入,以关闭或打开对着色器程序内的具体指令的分析,以用于评估是否可以针对标识的指令而降低精度。如此,设备和方法可以向用户提供语言级别的机制,从而以更细粒度的方式去控制对程序代码内具体指令的分析的关闭或打开。
该设备和方法还可以为用户提供在开发着色器程序期间所使用的工具,该工具帮助用户量化由于降低用于着色器程序的经编辑的程序代码中的选择的计算的精度而导致的精度损失。例如,该工具可以允许用户打开游戏和/或游戏的踪迹,以使得用户可以以较低精度运行经编辑的程序代码并评估由于较低精度而导致的图像质量输出与游戏一起使用是否可以可接受。该工具还可以为用户提供附加信息和/或对游戏输出中可能出现的精度损失的解释。
通过降低着色器程序内的一部分指令的精度,通常,通过增加运行中的着色器程序的数目,提高算术计算的吞吐量,并且加速存储器访问,可以提高图形处理的性能,尤其可以提供着色器程序的性能。这样,通过标识其中可以降低精度的着色器程序内的指令集和/或操作集,和/或自动降低标识的指令集中的精度,所描述的方法和设备可以提高图形处理和着色器程序的性能。
现在参考图1,其中图示了用于降低着色器程序12中使用的计算24的精度的示例计算机设备102。计算机设备102可以包括由计算机设备102的处理器54和/或系统存储器56执行或处理的多个应用10。用户可能已经为应用10内的一个或多个着色器程序12开发了程序代码14,可以使处理器54被图形处理单元(GPU)44执行以渲染要被显示的图像。另外,计算机设备102或另一计算设备可能已经为一个或多个着色器程序12自动生成了程序代码14。例如,应用10可以使GPU 44使用与执行应用10内的着色器程序12的程序代码14相关联的数以万计的着色器为与运行应用10相关联的图像生成适当级别的颜色和/或特殊效果,诸如用于游戏。因此,GPU 44可以执行着色器程序代码14并且可以渲染输出46,输出46可以包括一个或多个渲染的图像47以用于呈现在显示器48。
此外,GPU 44可以在着色器程序12的程序代码的一个或多个部分中支持数据存储和/或计算或算术中的半精度。例如,本公开使得程序代码的一个或多个部分14,诸如与存储和/或算术相关联且最初为单精度格式的部分,被替换为在存储和/或算术中使用半精度38的经编辑的程序代码34的对应的一个或多个部分。通过使用半精度存储和/或算术,可以改进具有经编辑的程序代码34的着色器程序12的性能。例如,GPU 44中正在运行的着色器程序12的数目可以增加。此外,GPU 44中程序代码14的剩余的、未编辑的部分的吞吐量也可以提高,诸如在着色器程序12中使用的单精度26中的算术计算24,因为GPU 44的存储器访问可以被加速.
计算机设备102可以包括可以可连接到网络的任何移动或固定计算机设备。例如,计算机设备102可以是诸如台式计算机或膝上型计算机或平板计算机的计算机设备、物联网(IOT)设备、蜂窝电话、游戏设备、混合现实或虚拟现实设备、音乐设备、电视、导航系统、摄像头、个人数字助理(PDA)或手持设备,或具有与一个或多个其他设备的有线和/或无线连接能力的任何其他的计算机设备。
计算机设备102可以包括由处理器54和/或存储器56执行的操作系统110。计算机设备102的存储器56可以被配置用于存储定义操作系统110和/或与之相关联的数据和/或计算机可执行指令,并且处理器54可以执行这种数据和/或指令以实例化操作系统110。存储器56的示例可以包括但不限于可由计算机使用的存储器类型,诸如随机存取存储器(RAM)、只读存储器(ROM)、磁带、磁盘、光盘、易失性存储器、非易失性存储器及其任意组合。处理器54的示例可以包括但不限于本文所述的专门编程的任何处理器,包括控制器、微控制器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、片上系统(SoC),或其他可编程的逻辑或状态机。
操作系统110可以包括编译器16,编译器16可以被用来验证和/或改进程序代码14。此外,编译器16可以被用于通过安全地将着色器程序12内的运算精度从单精度26降低到半精度38算术而将程序代码14移植(port)到半精度38算术。编译器16还可以被用来在修改具有较低精度的程序代码14之前验证对较低精度的潜在改变是否值得。一方面,计算机设备102的用户可以使用用户界面50将程序代码14加载到编译器16中。另一方面,应用10可以自动地将程序代码14传送到编译器16。
编译器16可以具有精度降低管理器20,精度降低管理器20可操作为在程序代码14上执行一个或多个通道18来自动搜索程序代码14中的降低精度机会。精度降低管理器20可以标识程序代码14内的操作集22,操作集22可以容忍较低精度和/或范围。操作集22可以包括当前以单精度26执行的多个计算24(最多为n,其中n是整数)。
精度降低管理器20可以分析GPU 44的程序代码14和/或着色器程序12和/或硬件参数45的结构,以确定操作集22是否可以容忍较低的精度和/或范围。GPU 44的硬件参数45可以包括但不限于GPU 44的功率消耗、GPU 44是否支持半精度38、和/或GPU 44的性能。另外,精度降低管理器20可以使用先前定义的支持半精度38的操作的列表来确定可以容忍较低精度和/或范围的操作集22。例如,诸如但不限于从图像和/或纹理读取、从缓冲器读取、从顶点的低精度输入(例如,8或10位精度颜色输入)和/或到渲染目标的输出的操作可以已知以半精度38操作。此外,在操作集22中可以不包括精度降低管理器20已知的对精度敏感的操作(例如,三角函数指令或超越指令)。
精度降低管理器20可以包括评估组件28,评估组件28可以确定是否降低操作集22内的计算24的精度。评估组件28可以评估操作集22的结果表达式并且可以尝试降低中间数据、功能参数、存储器负载和/或任何其他计算24的精度,同时注意可能对精度敏感的计算24和/或加权转换操作的成本(例如,时间和/或功率消耗)。这样,当计算24降低到半精度38时,评估组件28可以标识可能的结果。
评估组件28可以将范围和精度信息依附到操作集22中的每个计算24,并且可以通过操作集22来跟踪范围和精度信息。例如,操作集22可以是具有可以以指定顺序执行的计算24的链的表达式树。评估组件28可以将每个计算24的范围和/或精度信息与计算路径上的值的预期范围35和/或精度界限37进行比较。对于计算路径上的每个计算24,评估组件28可以针对预期范围35和/或精度界限37对可能的损失进行评分。评估组件28可以使用范围和精度信息与预期范围35和/或精度界限37的比较来确定精度损失风险31。
例如,评估组件28可以接收计算24的值的范围x=7000。评估组件28可以确定范围x=7000在计算24的预期范围35内(例如,该范围在半精度值的范围内)。在另一示例中,评估组件28可以接收范围x=70000。评估组件28可以确定范围x=70000超过了计算24的预期范围35(例如,该范围在半精度值的范围之外),并且可以响应于确定该范围超过预期范围35来设置精度损失风险31。
针对操作集22的每个计算24,评估组件28可以确定精度损失风险31并且可以将精度损失风险与精度损失阈值33进行比较。精度损失阈值33可以标识计算24是否支持半精度38和/或计算24是否可能对半精度38敏感。例如,如果计算24不能以较低精度工作,则精度损失风险31可能高于精度损失阈值33(例如,将值提升为幂)。此外,如果GPU 44不支持较低的精度,则精度损失风险31可以高于精度损失阈值33。如果计算24支持较低精度和/或如果GPU 44支持较低精度,则精度损失风险31可以低于精度损失阈值33。
当精度损失风险31高于精度损失阈值33时,评估组件28可以生成具有警告的通知32,该警告指示计算24可能不支持半精度38。编译器16可以将通知32传送到用户界面50,以使得用户在编辑程序代码14时可以使用该信息。
在确定精度是否可以降低和/或精度损失对于操作集22来说是否可以接受时,评估组件28还可以考虑来自转换操作的功率消耗益处。在计算24中使用半精度38时可能发生的对计算机设备102的功率消耗益处可能会胜过因为降低计算24的精度而可能导致的精度损失。例如,评估组件28可以确定精度损失风险31高于精度损失阈值33,但是可以确定损失的精度可以是可接受的,以便在计算24中使用半精度38时获得对计算机设备102的功率消耗节省的益处。这样,响应于确定功率消耗益处胜过精度损失,评估组件28可以修改精度损失风险31。此外,评估组件28可以通过在计算24中使用半精度38向计算机设备102发送通知32,通知32具有关于潜在的功率消耗益处的信息和/或关于使用半精度38的潜在精度损失的信息。
当精度损失风险31低于精度损失阈值33时,评估组件28可以标识计算36支持半精度38。这样,评估组件28可以执行迭代过程以确定是否降低操作集22内计算24的精度。
一方面,通过用半精度38重写标识的计算36的精度,精度降低管理器20可以自动生成经编辑的程序代码34。精度降低管理器20还可以生成报告40,报告40具有对精确做出的改变的信息。例如,报告40可以包括标识的计算36和/或操作集22。报告40还可以包括对精度变化和/或不降低精度的决定的解释。另一方面,报告40可以包括半精度38的标识的计算36,并且报告40可以被传送到用户界面50,以用于用户响应于在报告40中提供的信息来查看和/或修改程序代码14。
编译器16可以将经编辑的程序代码传送到GPU 44以用于处理。GPU 44可以使用用于标识的计算36的半精度38来执行经编辑的程序代码34,以生成输出46以用于在显示器48上呈现。通过在标识的计算36中使用半精度38,着色器程序12中使用的标识的计算36在GPU44中的吞吐量可以改进,而且还加速了GPU 44的存储器访问。
此外,编译器16可以将经编辑的程序代码34和/或报告40传送到用户界面50以用于显示。一方面,用户可以使用报告40中的信息对程序代码14和/或经编辑的程序代码34进行进一步的编辑并创建经修订的程序代码52。例如,用户可以改变程序代码14中标识的计算36的精度。此外,用户可以选择将标识的计算的一部分改变成半精度38。这样,用户可以使用所提供的信息作为引导来降低着色器程序12内的精度。
用户还可以标识一个或多个其中在着色器程序代码14内的精度可能会被降低的计算24,并且将计算24传送到编译器16以用于评估。例如,用户可以以语言级别插入一个或多个机制来标识这种计算24,诸如但不限于源代码用户提供的属性和/或注释。评估组件28可以评估是否可以降低计算24的精度,并且可以向用户提供通知32,通知32具有关于可能的精度损失的警告。用户可以响应于从编译器16接收的信息来改变计算24的精度,并且可以生成经修订的程序代码52。如上面关于程序代码14所讨论,经修订的程序代码52可以被传送到编译器16以用于进一步评估。
此外,用户可以使用用户界面50打开应用10或应用10的踪迹,并且可以使用应用10运行从编译器16接收的经编辑的程序代码34来验证输出46的质量是否可接受。例如,可以将渲染图像47的图像质量与质量阈值30进行比较,以确定渲染图像47的质量是否可接受。当渲染图像47的图像质量几乎没有损失时,渲染图像47的质量可以是可接受的。这样,着色器程序12可以容忍降低的精度而不降低输出46中的图像质量。
当图像质量有损失时,用户可以修订经编辑的程序代码34并生成经修订的程序代码52,从而改变在着色器程序12中使用的较低精度的量。此外,当图像质量有损失时,用户可以对编译器16执行的分析以做出调整。例如,通过在着色器程序代码14中利用属性来注释计算的链,用户可以从编译器16执行的搜索中移除特定指令,以使得编译器不会将这些指令标识为容忍较低精度。此外,用户可以关闭通道18,该通道执行搜索以标识可以在其中降低精度的操作集22。
这样,用户可以能够安全且快速地将着色器程序12移植到半精度38算术。此外,通过编译器1614自动标识可以在其中降低精度的操作集22和/或自动编辑程序代码14以包括半精度38,大量的用户可以能够改进着色器程序12的性能。这样,着色器程序12的性能改进可以是可缩放的,以使得更多的着色器程序12可以能够使用由硬件支持的较低的精度。
现在参考图2,图示了具有操作集22的示例表达式树200。表达式树200可以包括操作集22,操作集22有要以指定顺序执行的计算的链202、204、210、212。例如,计算的链可以从计算202开始并且可以按顺序进行,直到表达式树200以计算212结束。
评估组件28(图1)可以将范围和精度信息附到表达式树200中的每个计算202、204、210、212,以确定计算202、204、210、212中的任何一个计算是否可以被降低到半精度38。评估组件28可以从表达式树200的底部(例如,计算212)开始并且将计算链向上处理到表达式树200的开始(例如,计算202)。评估组件28可以通过表达式树200来跟踪范围和精度信息以确定计算202、204、210、212是否可以被降低到半精度38。
评估组件28可以将每个计算202、204、210、212的范围和/或精度信息与计算路径上的值的预期范围35和/或精度界限37进行比较。对于计算路径上的每个计算202、204、210、212,评估组件28可以针对预期范围35和/或精度界限37对可能的损失进行评分。评估组件28可以使用范围和精度信息与预期范围35和/或精度界限37的比较来确定精度损失风险31。
在212处,对于表达式树200中的操作集22,评估组件28可以知道Z以半精度38输出。例如,响应于在知道硬件如何工作和/或着色器如何为表达式树200中的操作集22工作,评估组件28可以知道Z的输出总是在0到1的范围内并且Z的精度具有半精度38。例如,表达式树200中的操作集22可以用于输出颜色,并且评估组件28可以知道颜色输出是以半精度38执行的。
在计算210处,响应于计算210被降低到半精度38,评估组件28可以确定Y的预期范围35可以在-0.5到0.5之间并且精度界限37可以保持相同。这样,评估组件28可以确定计算210可以被降低到半精度38,因为Z的输出可以保持在0到1的范围内,而Y的预期范围35在-0.5到0.5之间并且精度保持相同。
在计算204处,响应于计算204被降低到半精度38,评估组件28可以确定X的预期范围可以在-1到1之间并且精度界限37可以保持相同。评估组件28可以确定计算204可以被降低到半精度38,因为Z的输出可以保持在0到1的范围内,而X的预期范围35在-1到1之间并且精度保持相同。
这样,评估组件28可以确定降低表达式树200中所有的计算202、204、210、212的精度。
在备选示例中,在计算204处,响应于计算204被降低到半精度38,评估组件28可以确定X的预期范围可以在-1到1之间,但精度变为0.3333。评估组件28可以确定精度0.3333在精度界限37之外,并且由于该精度超过了精度界限37,所以计算204可以不被降低到半精度38。评估组件28可以确定降低计算210、212的精度,在同时以单精度维持计算204。
这样,评估组件28可以降低表达式树200中所有计算的精度。另外,评估组件28可以将表达式树200中的一部分计算降低到较低的精度,在同时以单精度维持表达式树200中的其他计算。评估组件28还可以确定表达式树200中的任何计算都不会使用较低的精度,并且可以以单精度维持表达式树200中所有的计算。
现在参考图3,计算机设备102(图1)可以使用示例方法300来降低在着色器程序12(图1)中使用的计算24(图1)的精度。方法300的动作可以在下面参考图1的架构进行讨论。
在302处,方法300可以包括接收用于着色器程序的程序代码以与GPU一起使用。例如,编译器16可以接收着色器程序12用于与GPU 44一起使用的程序代码14,GPU 44支持着色器程序12中的半精度38存储和/或算术。计算机设备102的用户可以使用用户界面50将程序代码14加载到编译器16中。另外,应用10可以自动将程序代码14传送到编译器16。
在304处,方法300可以包括在程序代码上执行至少一个通道,以选择操作集以降低多个计算的精度。编译器16可以具有精度降低管理器20,精度降低管理器20可操作以在程序代码14上执行一个或多个通道18来自动搜索程序代码14中的精度降低的机会。精度降低管理器20可以标识程序代码14内的操作集22,操作集22可以容忍较低的精度和/或范围。例如,精度损失阈值33可以确定预期范围35和/或精度界限37的误差值范围。当操作集22的误差值范围低于精度损失阈值33时,操作集22可以被标识为容忍较低的精度。操作集22可以包括当前以单精度26执行的多个计算24。另外,操作集22可以包括以指定顺序执行的多个计算24。例如,操作集22可以是具有要按顺序执行的计算24的链的表达式树。
精度降低管理器20可以分析着色器程序12的结构,诸如,着色器程序12的控制流和/或GPU 44的硬件参数45,以确定操作集22是否可以容忍较低的精度和/或范围。此外,精度降低管理器20可以使用支持半精度38的先前定义的操作列表来确定可以容忍较低精度和/或范围的操作22集。例如,诸如但不限于从图像和/或纹理读取、从缓存器读取、来自顶点的低精度输入(例如,8或10位精度颜色输入)和/或到渲染目标的输入的操作可能已知以半精度38操作。此外,精度降低管理器20已知的对精度敏感的操作(例如,三角函数指令或超越指令)可以不被包括在操作集22中。这样,由精度降低管理器20执行的搜索可以是通过对着色器程序12使用的硬件和/或的操作的先前知识来训练的引导和/或智能搜索。
在306处,方法300可以包括针对多个计算的每次计算来确定精度损失的风险是否低于精度损失阈值。精度降低管理器20可以包括评估组件28,评估组件28可以通过评估操作集22的结果表达式来确定是否要降低操作集22内的计算24的精度。评估组件28可以尝试降低中间数据、功能参数、存储器负载和/或任何其他计算24的精度,同时监视可能对精度和/或加权转换操作的成本敏感的计算24。例如,计算24的值可以与预期范围35(例如,值的最小值和最大值)和/或精度界限37(例如,值的位的数目)进行比较。响应于这些值在预期范围35和/或精度界限37之外,计算24可以被认为对精度敏感。这样,当计算24被降低到半精度38时,评估组件28可以标识可能的结果和/或精度损失风险31。
对于操作集22的每个计算24,评估组件28可以确定精度损失风险31并且可以将精度损失风险与精度损失阈值33进行比较。精度损失阈值33可以标识计算24是否支持半精度38和/或计算24是否可能对半精度38敏感。这样,评估组件28可以执行迭代过程以确定是否要降低操作集22内的计算24的精度。
评估组件28还可以在确定精度是否可以被降低和/或对于操作集22而言精度损失在什么情况下可接受时考虑来自转换操作的功率消耗益处。在计算24中使用半精度38时可能发生的对计算机设备102的功率消耗益处可能胜过因降低计算24的精度而可能发生的精度损失。
例如,对于表达式树内的计算24的值,评估组件28可以接收范围x=70000。评估组件28可以确定范围x=70000超过计算24的预期范围35(例如,该范围在针对半精度值的范围之外)并且可以确定精度损失风险31高于精度损失阈值33。然而,当在计算24中使用半精度38时,评估组件28可以确定损失的精度可以是获得对计算机设备102的功率消耗节省的益处可接受的。评估组件28可以响应于确定功率消耗益处胜过精度损失来修改精度损失风险31。
在308处,方法300可以包括在精度损失风险高于精度损失阈值时提供具有可能的精度损失警告的通知。当精度损失风险31高于精度损失阈值33时,评估组件28可以生成具有警告的通知32,警告指示计算24可能不支持半精度38。例如,如果计算24不能以较低的精度工作(例如,将值提高到幂),则精度损失风险31可以高于精度损失阈值33。另外,如果GPU44不支持较低的精度,则精度损失风险31可以高于精度损失阈值33。此外,通知32可以包括:关于通过在计算24中使用半精度38给计算机设备102带来的潜在功率消耗益处的信息;和/或关于使用半精度38的潜在精度损失的信息。编译器16可以将通知32传送到用户界面50,以使得用户可以在编辑程序代码14时使用该信息。
在310处,方法300可以包括在精度损失风险低于精度损失阈值时通过将计算重写为半精度来生成经编辑的程序代码。当精度损失风险31低于精度损失阈值33时,评估组件28可以标识计算36支持半精度38。如果计算24支持较低精度和/或如果GPU 44支持较低精度,则精度损失风险31可以低于精度损失阈值33。
精度降低管理器20可以通过用半精度38重写标识的计算36的精度来自动生成经编辑的程序代码34。精度降低管理器20还可以生成具有对精度做出的改变的信息的报告40。例如,报告40可以包括标识的计算36和/或操作集22。报告40还可以包括对精度做出的改变和/或不降低精度的决定的解释。另一方面,报告40可以包括针对半精度38标识的计算36,并且报告40可以被传送到用户界面50,以用于用户响应于报告40中提供的信息来查看和/或修改程序代码14。
在312处,方法300可以包括提供经编辑的程序代码。编译器16可以将经编辑的程序代码传送到GPU 44以用于处理。GPU 44可以使用针对标识的计算36的半精度38来执行经编辑的程序代码34,以生成输出46以用于在显示器48上呈现。通过在标识的计算36中使用半精度38,在着色器程序12中使用的标识的计算36在GPU 44中的吞吐量功能可以改进,并且加速了GPU 44的存储器访问。
方法300可以用于将着色器程序12内的操作的精度从单精度26安全地降低到半精度38,从而提高着色器程序12的性能。
现在参考图4,方法400可以由计算机设备102(图1)用来评估在着色器程序12(图1)中使用的计算24(图1)的较低精度。方法400的动作可以在下面参考图1的架构进行讨论。
在402处,方法400可以包括从编译器接收用于使用半精度进行计算的着色器程序的经编辑的程序代码。编译器16可以将经编辑的程序代码34传送到用户界面50以用于显示。
在404处,方法400可以可选地包括接收标识使用半精度的计算的改变的报告。一方面,用户可以使用报告40中的信息对程序代码14和/或经编辑的程序代码34进行进一步的编辑并创建经修订的程序代码52。例如,用户可以改变程序代码14中的标识的计算36的精度。此外,用户可以选择将标识的计算的一部分改变为半精度38。这样,用户可以使用所提供的信息作为引导来降低着色器程序12内精度。
在406处,方法400可以包括使用应用来执行经编辑的程序代码。用户可以使用用户界面50打开应用10或应用10的踪迹,并且可以使用应用10运行从编译器16接收到的经编辑的程序代码34。
在408处,方法400可以包括确定应用的输出质量是否在质量阈值内。输出46的图像质量可以被评估以确定着色器程序12是否可以容忍降低的精度而不降低输出46的图像质量。例如,可以将渲染图像47的图像质量与质量阈值30进行比较,以确定渲染图像47的质量是否在质量阈值内。当渲染图像47的图像质量几乎没有损失时,渲染图像47的质量可以低于质量阈值。如此,着色器程序12可以容忍降低的精度而不会降低输出46中的图像质量,并且在310处,方法300可以结束。
当渲染图像47的图像质量有损失时,渲染图像47的质量可以高于质量阈值。这样,在不降低输出46中的图像质量的情况下,着色器程序12可以不容忍降低的精度,并且可以对着色器程序12进行进一步的修订和/或改变。
在412处,方法400可以可选地包括修订经编辑的程序代码。当图像质量有损失时,用户可以修订经编辑的程序代码34并生成改变在着色器程序12中使用的较低精度的量的经修订的程序代码52。经修订的程序代码52可以被传送到编译器16以用于进一步的评估和/或修改。
在414处,方法400可以可选地包括调整由编译器执行的分析。此外,当图像质量有损失时,用户可以对由编译器16执行的分析进行调整。例如,用户可以从编译器16执行的搜索中移除特定指令,以使得编译器可以无法将指令标识为容忍较低精度。此外,用户可以关闭通道18,该通道18执行搜索以标识在其中精度可以被降低的操作集22。
在416处,方法400可以可选地包括从由编译器执行的分析中添加或移除计算路径。用户还可以标识其中可以在着色器程序代码14内降低精度的一个或多个计算24,并且将计算24传送到编译器16以用于评估。评估组件28可以评估是否可以针对计算24降低精度,并且可以向用户提供通知32,通知32具有关于可能的精度损失的警告。用户可以响应于从编译器16、14接收的信息来改变计算24的精度,并且可以生成经修订的程序代码52。经修订的程序代码52可以被传送到编译器16以用于进一步的评估和/或修改。
方法400可以向用户提供用于降低着色器程序中的精度的交互过程。另外,方法400可以向用户提供更多细节和/或信息,以用于在做出降低着色器程序中的精度的决定时使用。如此,用户在开发着色器程序时可以更容易地量化精度损失。
现在参考图5,与图1相比,根据实现可以被配置为计算机设备102的示例计算机500包括附加的组件细节。在一个示例中,计算机500可以包括用于与本文描述的一个或多个组件和功能相关联的处理功能。处理器54可以包括单个或多组处理器或多核处理器。另外,处理器54可以被实现为集成处理系统和/或分布式处理系统。
计算机500还可以包括存储器56,诸如用于存储由处理器54执行的应用的本地版本。存储器56可以包括能够由计算机使用的存储器类型,诸如随机存取存储器(RAM)、只读存储器(ROM)、磁带、磁盘、光盘、易失性存储器、非易失性存储器及其任意组合。附加地,处理器54可以包括并执行操作系统110(图1)。
此外,计算机500可以包括通信组件58,通信组件58提供用本文所述的硬件、软件和服务来建立和维持与一方或多方的通信。通信组件58可以承载计算机设备102上的组件之间,以及计算机设备102和外部设备之间的通信,诸如跨通信网络的设备和/或串行或本地连接到计算机设备102的设备。例如,通信组件58可以包括一个或多个总线,并且还可以包括分别传送和接收与传送器和接收器相关联的链组件,传送器和接收器可操作以用于与外部设备接合。
附加地,计算机500可以包括数据存储库60,数据存储库60可以是硬件和/或软件的任何合适的组合,其提供结合本文描述的实现采用的信息、数据库和程序的大容量存储装置。例如,数据存储库60可以是应用10、GPU 44、编译器16和/或显示器48的数据存储装置。
计算机500还可以包括用户界面组件50,用户界面组件50可操作为从计算机设备102的用户接收输入并且还可操作为生成输出以呈现给用户。用户界面组件50可以包括一个或多个输入设备,包括但不限于键盘、数字键盘、鼠标、显示器48(例如,可以是触敏显示器)、导航键、功能键、麦克风、语音识别组件、能够从用户接收输入的任何其他机制或其任何组合。此外,用户界面组件50可以包括一个或多个输出设备,包括但不限于显示器、扬声器、触觉反馈机构、打印机、能够向用户呈现输出的任何其他机构、或其任何组合。
在实现中,用户界面组件50可以传送和/或接收与应用10、GPU44、编译器16和/或显示器48的操作相对应的消息。另外,处理器54执行应用10、GPU 44、编译器16和/或显示器48,存储器56或数据存储库60可以存储它们。
如在本申请中使用的,术语“组件”、“系统”等旨在包括与计算机相关的实体,诸如但不限于硬件、固件、硬件和软件的组合、软件、或正在执行的软件。例如,组件可以是但不限于在处理器上运行的进程、处理器、对象、可执行文件、执行线程、程序和/或计算机。举例来说,在计算机设备上运行的应用和计算机设备都可以是组件。一个或多个组件可以驻留在一个进程和/或执行线程中,并且组件可以位于一台计算机上和/或分布在两台或多台计算机之间。此外,这些组件可以从其上存储有各种数据结构的各种计算机可读介质执行。组件可以诸如根据具有一个或多个数据分组的信号通过本地和/或远程过程的方式通信,诸如来自与本地系统、分布式系统中的另一个组件交互的一个组件的数据,和/或可以跨网络通信,诸如跨互联网与其他系统通过信号的方式通信。
此外,术语“或”旨在意指包含“或”而不是排除“或”。也就是说,除非另有说明或从上下文清楚可见,否则短语“X采用A或B”旨在意指任何自然包容性排列。即,以下任何一种情况都满足短语“X采用A或B”满足:X采用A;X采用B;或者X采用A和B。另外,除非另有说明或从上下文中清楚可见指向单数形式,否则本申请和所附权利要求中使用的冠词“一”和“一个”一般应被解释为意指“一个或多个”。
可能已经按照可以包括若干设备、组件、模块等的系统呈现了各种实现或特征。应当理解和领会,各种系统可以包括附加的设备、组件、模块等和/或可以不包括结合附图讨论的所有的设备、组件、模块等。也可以使用这些方法的组合。
结合本文公开的实施例描述的方法的各种说明性逻辑、逻辑块和动作可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他可编程逻辑器件、离散的门或晶体管逻辑、离散的硬件组件,或其设计为执行本文描述的功能的任何组合中特殊编程的一个来实现或执行。通用处理器可以是微处理器,但在备选方案中,处理器可以是任何常规的处理器、控制器、微控制器或状态机。处理器还可以被实现为计算机设备的组合,例如,DSP和微处理器的组合、多个微处理器、接合DSP的一个或多个微处理器,或任何其他这种配置。附加地,至少一个处理器可以包括可操作为执行上述步骤和/或动作中的一个或多个的一个或多个组件。
此外,结合本文公开的实现来描述的方法或算法的步骤和/或动作可以直接体现在硬件中、体现在在由处理器执行的软件模块中、或者体现在这两者的组合中。软件模块可以驻留在RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动磁盘、CD-ROM或本领域已知的任何其他形式的存储介质中。示例性存储介质可以被耦合到处理器,以使得处理器可以从存储介质读取信息和向存储介质写入信息。备选地,存储介质可以与处理器集成在一起。此外,在一些实现中,处理器和存储介质可以驻留在ASIC中。附加地,ASIC可以驻留在用户终端中。备选地,处理器和存储介质可以作为离散的组件驻留在用户终端中。另外,在一些实现中,方法或算法的步骤和/或动作可以作为代码集和/或指令集之一或其任何组合驻留在机器可读介质和/或计算机可读介质上,其可以被并入到计算机程序产品中。
在一个或多个实现中,所描述的功能可以以硬件、软件、固件或其任何组合来实现。如果以软件实现,则这些功能可以作为一个或多个指令或代码在计算机可读介质上被存储或被传输。计算机可读介质包括计算机存储介质和通信介质,包括便于将计算机程序从一个地方传送到另一个地方的任何介质。存储介质可以是计算机可以访问的任何可用介质。作为示例而非限制,这种计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储装置、磁盘存储装置或其他磁存储设备,或可以用于存储以指令或数据结构形式的期望程序代码且可由计算机访问的任何其他介质。本文使用的磁盘和光盘包括压缩光盘(CD)、激光光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘通常用激光以光学方式再现数据。上述的组合也应该被包括在计算机可读介质的范围内。
虽然已经结合其示例描述了本公开的实现,但是本领域技术人员将理解,可以在不脱离其范围的情况下对上述实现进行变型和修改。根据本文公开的示例,通过说明书的考虑或通过实践,其他实现对于本领域技术人员来说将是明显的。
Claims (15)
1.一种计算机设备,包括:
支持半精度存储和着色器程序中的算术的图形处理单元(GPU);
存储数据和指令的存储器;
被配置为与所述存储器通信的至少一个处理器;
与所述存储器和所述至少一个处理器通信的编译器,其中所述编译器可操作以:
接收用于着色器程序的程序代码以与所述GPU一起使用;
在所述程序代码上执行至少一个通道,以选择所述程序代码内的操作集,以降低由所述操作集使用的多个计算的精度;
针对所述多个计算中的每个计算,评估将针对所述计算的所述精度降低到半精度的精度损失风险;
响应于所述精度损失风险低于精度损失阈值,通过将所述计算重写为所述半精度来生成经编辑的程序代码;以及
响应于所述精度损失风险高于所述精度损失阈值,提供具有针对可能的精度损失的警告的通知。
2.根据权利要求1所述的计算机设备,其中所述精度损失阈值标识所述计算是否支持所述半精度,以及
其中响应于先前被标识为支持半精度或响应于用户输入,所述操作集被选择。
3.根据权利要求1所述的计算机设备,其中所述GPU的硬件参数被所述编译器使用以评估所述精度损失风险。
4.根据权利要求1所述的计算机设备,其中在所述计算不支持所述半精度的情况下,所述精度损失风险高于所述精度损失阈值,并且在所述计算支持所述半精度的情况下,所述精度损失风险低于所述精度损失阈值。
5.根据权利要求1所述的计算机设备,其中所述编译器还可操作以执行迭代过程以确定是否要降低所述操作集内的所述多个计算的所述精度。
6.根据权利要求1所述的计算机设备,其中所述编译器还可操作以:
将所述经编辑的程序代码提供给所述GPU以用于处理成要在显示器上呈现的输出;以及
将所述通知提供给所述显示器上的用户界面。
7.一种用于降低着色器程序中使用的计算的精度的方法,包括:
在计算机设备上的编译器处,接收用于着色器程序的程序代码以与图形处理单元(GPU)一起使用,所述图形处理单元(GPU)支持半精度存储和所述着色器程序中的算术;
在所述程序代码上执行至少一个通道,以选择所述程序代码内的操作集,以降低由所述操作集使用的多个计算的精度;
针对所述多个计算中的每个计算,评估将针对所述计算的所述精度降低到半精度的精度损失风险;
响应于所述精度损失风险低于精度损失阈值,通过将所述计算重写为所述半精度来生成经编辑的程序代码;以及
响应于所述精度损失风险高于所述精度损失阈值,提供具有针对精度损失的警告的通知。
8.根据权利要求7所述的方法,其中所述精度损失阈值标识所述计算是否支持所述半精度,以及
其中响应于先前被标识为支持半精度或响应于用户输入,所述操作集被选择。
9.根据权利要求7所述的方法,其中所述GPU的硬件参数被所述编译器使用以评估所述精度损失风险。
10.根据权利要求7所述的方法,其中在所述计算不支持所述半精度的情况下,所述精度损失风险高于所述精度损失阈值,并且在所述计算支持所述半精度的情况下,所述精度损失风险低于所述精度损失阈值。
11.根据权利要求7所述的方法,还包括:
执行迭代过程以确定是否要降低所述操作集内的所述多个计算的所述精度。
12.根据权利要求7所述的方法,其中所述方法还包括:
生成报告,所述报告标识对所述计算的所述精度做出的改变并且提供对所述做出的改变的解释。
13.根据权利要求7所述的方法,其中所述方法还包括:
响应于用户输入来调整对所述程序代码的分析的级别。
14.根据权利要求7所述的方法,其中所述方法还包括:
将所述经编辑的程序代码提供给所述GPU以处理成要在显示器上呈现的输出;以及
将所述通知提供给所述显示器上的用户界面。
15.一种计算机可读介质,所述计算机可读介质存储能够由计算机设备执行的指令,所述指令包括:
至少一个指令以用于使所述计算机设备接收用于着色器程序的程序代码以与图形处理单元(GPU)一起使用,所述图形处理单元(GPU)支持半精度存储和所述着色器程序中的算术;
至少一个指令以用于使所述计算机设备在所述程序代码上执行至少一个通道,以选择所述程序代码内的操作集,以降低由所述操作集使用的多个计算的精度;
至少一个指令以用于使所述计算机设备针对所述多个计算中的每个计算,评估将所述计算的所述精度降低到半精度的精度损失风险;
至少一个指令以用于使所述计算机设备响应于所述精度损失风险低于精度损失阈值,通过将所述计算重写为所述半精度来生成经编辑的程序代码的至少一个指令;以及
至少一个指令以用于使所述计算机设备响应于所述精度损失风险高于所述精度损失阈值,提供具有针对精度损失的警告的通知。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/429,989 US11120602B2 (en) | 2019-06-03 | 2019-06-03 | Acceleration of shader programs by compiler precision selection |
US16/429,989 | 2019-06-03 | ||
PCT/US2020/028606 WO2020247073A1 (en) | 2019-06-03 | 2020-04-17 | Acceleration of shader programs by compiler precision selection |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113924547A true CN113924547A (zh) | 2022-01-11 |
Family
ID=70978542
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080040930.3A Pending CN113924547A (zh) | 2019-06-03 | 2020-04-17 | 通过编译器精度选择的着色器程序加速 |
Country Status (6)
Country | Link |
---|---|
US (1) | US11120602B2 (zh) |
EP (1) | EP3963443B1 (zh) |
JP (1) | JP7451568B2 (zh) |
KR (1) | KR20220012898A (zh) |
CN (1) | CN113924547A (zh) |
WO (1) | WO2020247073A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11127185B1 (en) * | 2020-07-24 | 2021-09-21 | Weta Digital Limited | Manipulating code for animation control rig generation |
US11868759B2 (en) * | 2021-12-08 | 2024-01-09 | Advanced Micro Devices, Inc. | Shader source code performance prediction |
US11935175B2 (en) * | 2022-04-07 | 2024-03-19 | Huawei Technologies Co., Ltd. | Apparatus, method, and computer-readable medium for image processing using variable-precision shading |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4443100B2 (ja) | 2002-07-31 | 2010-03-31 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラム変換方法、これを用いたデータ処理装置及びプログラム |
US7461116B2 (en) * | 2003-09-17 | 2008-12-02 | Agility Design Solutions Inc. | Emulation of a fixed point operation using a corresponding floating point operation |
US20090051687A1 (en) | 2005-10-25 | 2009-02-26 | Mitsubishi Electric Corporation | Image processing device |
US8301583B2 (en) * | 2008-10-09 | 2012-10-30 | International Business Machines Corporation | Automated data conversion and route tracking in distributed databases |
US10089089B2 (en) | 2015-06-03 | 2018-10-02 | The Mathworks, Inc. | Data type reassignment |
US10296292B2 (en) * | 2016-10-20 | 2019-05-21 | Advanced Micro Devices, Inc. | Dynamic variable precision computation |
US10726514B2 (en) * | 2017-04-28 | 2020-07-28 | Intel Corporation | Compute optimizations for low precision machine learning operations |
US11150899B2 (en) * | 2018-04-09 | 2021-10-19 | Advanced Micro Devices, Inc. | Selecting a precision level for executing a workload in an electronic device |
-
2019
- 2019-06-03 US US16/429,989 patent/US11120602B2/en active Active
-
2020
- 2020-04-17 WO PCT/US2020/028606 patent/WO2020247073A1/en unknown
- 2020-04-17 EP EP20730775.2A patent/EP3963443B1/en active Active
- 2020-04-17 JP JP2021571327A patent/JP7451568B2/ja active Active
- 2020-04-17 CN CN202080040930.3A patent/CN113924547A/zh active Pending
- 2020-04-17 KR KR1020217041909A patent/KR20220012898A/ko active Search and Examination
Also Published As
Publication number | Publication date |
---|---|
WO2020247073A1 (en) | 2020-12-10 |
JP7451568B2 (ja) | 2024-03-18 |
EP3963443B1 (en) | 2024-05-08 |
EP3963443A1 (en) | 2022-03-09 |
US20200380754A1 (en) | 2020-12-03 |
JP2022535013A (ja) | 2022-08-04 |
US11120602B2 (en) | 2021-09-14 |
KR20220012898A (ko) | 2022-02-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3963443B1 (en) | Acceleration of shader programs by compiler precision selection | |
EP3757794A1 (en) | Methods, systems, articles of manufacturing and apparatus for code review assistance for dynamically typed languages | |
US9557976B2 (en) | Adaptable and extensible runtime and system for heterogeneous computer systems | |
US9823911B2 (en) | Method and apparatus for compiling code based on a dependency tree | |
US9430203B2 (en) | Information processing apparatus and compilation method | |
US11868759B2 (en) | Shader source code performance prediction | |
US11782813B2 (en) | Methods and apparatus to determine refined context for software bug detection and correction | |
US20120284701A1 (en) | Efficient conditional flow control compilation | |
US11055077B2 (en) | Deterministic software code decompiler system | |
CN115454398A (zh) | 一种c语言程序验证器的浮点计算精度分析方法及系统 | |
US10853042B2 (en) | Interactive code optimizer | |
US11714618B2 (en) | Streaming compiler for automatic adjoint differentiation | |
GB2527567A (en) | Optimising software code | |
WO2018163304A1 (ja) | ソースコード改善装置、ソースコード改善方法及びソースコード改善プログラム | |
US11410036B2 (en) | Arithmetic processing apparatus, control method, and non-transitory computer-readable recording medium having stored therein control program | |
CN113031952A (zh) | 深度学习模型的执行代码的确定方法、装置及存储介质 | |
US11487506B2 (en) | Condition code anticipator for hexadecimal floating point | |
KR20240060268A (ko) | 데이터의 레이블링을 자동적으로 처리하기 위한 방법, 이를 수행하는 서비스서버 및 컴퓨터-판독가능 매체 | |
WO2024054238A1 (en) | Fault-tolerant approximate computing data processing | |
KR20240097681A (ko) | 통합 컴파일러용 딥러닝 모델 그래프 및 추상구문트리 생성 장치 및 방법 | |
Wong et al. | Compilation and Other Software Techniques Enabling Approximate Computing | |
CN117873903A (zh) | 代码测试方法、装置、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |