CN105027089B - 内核功能性检查器 - Google Patents
内核功能性检查器 Download PDFInfo
- Publication number
- CN105027089B CN105027089B CN201380073036.6A CN201380073036A CN105027089B CN 105027089 B CN105027089 B CN 105027089B CN 201380073036 A CN201380073036 A CN 201380073036A CN 105027089 B CN105027089 B CN 105027089B
- Authority
- CN
- China
- Prior art keywords
- kernel
- micro
- equipment
- input
- variable
- 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.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
描述了称为内核功能性检查器的调试系统和方法,以用于使得能够实现针对设备特定的API(应用程序接口)所写的软件的调试而无需在软件驱动器或硬件中的支持或改变。针对OpenCL描述了特定示例实施例,但所公开的方法也可以用于使得能够实现用于诸如DirectX®和OpenGL®之类的其它设备特定的API的调试能力。
Description
技术领域
本文所述的实施例一般涉及计算机软件和用于测试计算机软件的方法及系统。
背景技术
包括CPU(中央处理单元)、GPU(图形处理单元)和其它处理器的组合的计算机系统已经成为平台的重要类别。工业标准框架已经被开发用于对这些所谓的异构系统进行编程。一个这样的框架是OpenCL(开放计算语言)。用于这样的系统的软件的开发涉及检查作为调试(debug)过程的部分的代码的部分的功能性。然而,用于这样的系统的程序的逐行调试的解决方案已经被限制,通常涉及硬件特定的实现方式。
附图说明
图1图示了用于实现内核功能性检查器的示例系统。
图2是示例内核功能性检查器中的软件组件之间的接口。
图3图示在一个实施例中的内核功能性检查器的解析器和驱动应用的基本操作。
图4示出由内核功能性检查器所执行的方法的示例。
图5是图示根据示例实施例的示例机器的框图,在所述示例机器上本文所讨论的技术(例如,方法)中的任何一个或多个可以执行。
具体实施方式
本文所述的是称为内核功能性检查器的调试系统,用于使得能够实现用于在不同硬件上运行的OpenCL内核的高级调试能力而无需在软件驱动器或硬件中的改变或支持。内核功能性检查器可以包括用于OpenCL内核的逐行调试、运行时断点、私有、局部和全局存储器查看和编辑、运行时断言/条件断点、工作项(线程)切换和步进、局部和全局工作组步进以及编辑并继续调试。下述特定示例实施例是用于OpenCL的,但所公开的方法也可以用于使得能够实现用于诸如DirectX®和OpenGL®(开放图形库)之类的其它设备特定的API(应用程序接口)的高级调试能力。
内核功能性检查器的一个实施例利用基于软件和基于硬件的OpenCL执行的混合方法。在软件中,确定用来以正确的次序正确地运行给定的OpenCL内核内的单独的语句(statement)的必要信息,并且那些语句然后被分派给OpenCL设备以用于执行。作为结果,OpenCL执行被控制,如同它是软件应用一样,并且语句可以在硬件上运行以实现与当在OpenCL设备上整个地运行内核时将会获得的相同的输出。内核功能性检查器可以支持内核执行的完全控制,并允许用户在内核执行的每个阶段检查所有存储器对象。
在一个实施例中,内核功能性检查器可以被描述为由三个基本组件构成。解析器组件(也称为CL解析器)负责在有效的OpenCL内核中读取并然后输出有效的微内核和必要的元数据。驱动应用组件(也称为调试引擎)从解析器接收输出并然后负责正确地运行内核,处置所有存储器和内核执行任务。第三组件是用户接口,其向用户提供接口,通过所述接口向驱动应用发出命令以及显示输出。在操作中,有效的OpenCL内核首先被传递到解析器组件,其执行内核的语义分析以生成一系列微内核,所述微内核中的每一个表示来自原始内核的指令集。在典型的使用中,该指令集将是由原始OpenCL内核中的单行源代码表示的指令,但也可以是由单独的源行所表示的指令的子集,以允许调试源行的单独部分。除了生成这些微内核之外,CL解析器还从内核中提取元数据用于流控制、内核变元(argument)、私有和局部变量以及索引,以正确地映射变量以用于驱动应用。驱动应用组件使用该输出来提供一种系统以用于用户以各种方式步进通过内核的执行,包括(但不限于)逐行步进和执行直到指定的断点。
示例系统描述
图1图示了用于实现内核功能性检查器的示例系统。具有CPU(中央处理单元)105
和主机存储器110的主机100与用户接口115(例如,具有键盘的显示监视器)通信并对接到一个或多个计算设备150,所述一个或多个计算设备中的每一个可以是例如GPU(图形处理单元)。主机100运行标准操作系统,所述标准操作系统经由设备特定的驱动器与计算设备150通信。计算设备150可以被称为OpenCL设备,当主机经由OpenCL驱动器与其通信时。计算设备150由全局存储器155和多个计算元件(有时也称为核或处理元件)构成,所述多个计算元件被群组成多个计算单元160。图1示出两个这样的计算单元160a和160b,其分别具有局部存储器165a和165b。计算单元160a合并分别具有私有存储器167a和169a的计算元件166a和168a,并且计算单元160b合并分别具有私有存储器167b和169b的计算元件166b和168b。所有计算元件和主机可以访问全局存储器155。计算单元的局部存储器仅由属于该计算单元的计算元件可访问,并且计算元件的私有存储器仅由该计算元件可访问。
OpenCL应用由主机程序和一个或多个内核构成。内核是OpenCL中的可执行代码的基本单元。主机程序在主机上运行,而每个内核由单个计算元件执行。内核或线程可以由计算元件并发地执行以提供数据的并行处理。主机程序经由OpenCL API而部署内核以供在OpenCL设备上执行,所述OpenCL API经由OpenCL设备驱动器编译内核源代码并运行内核。整数索引空间被创建,其中由计算元件执行的内核的每个实例被指派索引空间中的点。正执行的内核的每个实例被称为工作项,所述工作项由其在索引空间中的坐标所标识,所述坐标被称为工作项的全局ID。每个并发执行的工作项使用如由单个内核定义的指令的相同序列。然而,工作项的行为可以变化,由于由使用不同全局ID的代码选择的不同数据以及由于可以被不同数据影响的代码内的条件分支语句。每个工作项由计算元件执行,并且工作项进一步被组织成工作组,其中每个工作组由计算单元执行。属于相同工作组的工作项因而能够访问与工作组关联的计算单元的局部存储器。
内核功能性检查器
图2图示了示例内核功能性检查器中的软件组件之间的接口。内核功能性检查器201与用户接口115通信并与OpenCL API 203对接。OpenCL API 203经由OpenCL驱动器205在计算设备150上编译并运行从内核功能性检查器部署的微内核。
图3图示了在一个实施例中的内核功能性检查器的解析器301和驱动应用303的基本操作。解析器将OpenCL内核取为输入,并输出用于1)微内核和符号及2)流控制的信息。微内核和符号包含用于将被步进通过的输入内核的单独的可执行语句的信息,以及用以提取在那些语句中使用的变量的值的信息。流控制数据包含与微内核将被执行所按的次序有关的信息以及用于在步进通过输入内核的语句中使用的信息。驱动应用消耗解析器输出并提供用于逐行调试的编程接口。这样的调试活动可以包括例如,步进进入OpenCL内核代码的行,独立地执行每一行以及获得在整个内核中定义的所有变量的结果。以下为根据一个实施例的用于调试OpenCL内核的内核功能性检查器的更详细的描述。
由解析器输出的微内核和符号信息可以被划分成三个类别:微内核(可执行OpenCL内核)、微内核变元(全局存储器空间中)和微内核变量(私有/局部存储器空间中)。微内核是OpenCL内核,其将全局存储器加载到私有和局部存储器中,运行单个OpenCL语句并将结果拷贝回全局存储器。这些微内核中的每一个可以被独立地运行,因而允许用户跨过(step over)并在单独的OpenCL语句之前和之后查看结果。OpenCL内核的简单示例如下:
表示该代码的字符串输入到解析器,解析器将从其中生成以下微内核:
以及
所得到的微内核能够执行原始内核的所有功能语句,但每个语句在独立的内核中。微内核变元包括来自原始内核的变元以及用来将变量的中间值包含在私有和局部存储器空间中的附加变元。微内核变量被包含在微内核自身内,但其值被拷贝到全局存储器和从全局存储器被拷贝,并且提供映射以便访问和修改其值。
如较早讨论的,私有和局部存储器变量通常从主机应用不可访问,但通过使用微内核既可以将所述变量的值拷贝到全局存储器也可以从全局存储器拷贝所述变量的值。所得到的全局存储器值然后可以被直接访问和修改。私有存储器包括到OpenCL内核的统一变元和在OpenCL内核内部初始化的变量,并且私有变量特定于单个全局工作项。参考上文列出的微内核 Copy_LINE0001,从私有到全局存储器的映射通过以下来实现:首先将变元附加到作为整数的缓冲器的表示为INT_SYMBOLS的原始变元并且向该缓冲器中加索引以确定要初始化到私有存储器中或从私有存储器读出的值。在单独的可执行OpenCL语句之前发生初始化,并且之后执行读出。语句本身基本上是未修改的,除了移除类型声明(declaration)之外,移除类型声明对于确保没有变量被重声明是必要的。对于多个不同类型的私有变量来说,多个全局缓冲器变元被附加到缓冲器,并且对于相同类型的多个私有变量来说,新的偏移被添加到现有的附加缓冲器。
局部存储器在内核变元中被指定,并且特定于其相应的局部工作项。局部存储器可以以与私有存储器基本上相同的方式被处置,除了局部存储器中的所有项被初始化和读出之外。此外,由于局部存储器缓冲器的大小是未知的,直到被应用指定为止,所以该信息被传递到微内核作为分离的变元。具有局部存储器变元的示例微内核如下:
该情况中的局部变量为类型float4,因此其信息被保持在全局缓冲器FLOAT4_SYMBOLS中。它利用缓冲器内的偏移(在该情况下,零)而被指明,并被循环通过所有值以从全局存储器拷贝其整个内容和向全局存储器拷贝其整个内容。向和自全局和私有/局部存储器的拷贝可能在计算开销方面是昂贵的,尤其在许多私有变量和大型局部存储器缓冲器的情况下。为了避免这一点,在一个实施例中,内核功能性检查器确定哪些私有/局部变量在微内核语句中被访问并且仅初始化和读出被访问的变量。
为了与驱动应用对接,解析器可以包括关于微内核变元和当创建微内核代码时驻留在那些变元的哪些偏移中的变量的信息。例如,在以上列出的微内核Copy_LINE0001中,解析器需要返回INT_SYMBOLS变元已经被附加到微内核并且变量“gid”以零索引而驻留在INT_SYMBOLS缓冲器中。因此,在一个实施例中,解析器将以下各项传递给驱动应用:微内核代码串、指定每个附加变元的数据结构和指定可以从驱动应用被访问的私有/局部存储器变量连同其相应的附加缓冲器变元及索引的数据结构。在一个实施例中,数据结构被定义为C++类。例如,类可以被定义,其中类的实例针对每一个缓冲器变元而被创建,其具有的成员包括:变元的数据类型、微内核中的变元的索引、缓冲器的大小和该变元中包含的符号的数目。类可以在驱动应用中被分子类,以使得例如实际缓冲器(即,OpenCL中的cl_mem对象)、对实际数据的指针和访问单独的成员的方法可以被添加为成员。另一个类可以被定义,所述类针对每一个私有/局部变量而被实例化,其成员包括数据类型、原始OpenCL内核中的变量的存储器空间、从原始OpenCL代码得出的变量的串表示、到其中存储了变量的信息的缓冲器中的偏移、变量的大小、变量的范围和对表示包含变量的缓冲器变元的类的实例的指针。
诸如if/else(如果/否则)语句和循环之类的一些OpenCL内核语句可能不能与在以上示例中完成的那样简单地被转换成单独的微内核。为了处置这些类型的内核语句,在一个实施例中,解析器生成评估内核语句中的条件的评估微内核并创建从输入内核得出的流控制数据结构,所述流控制数据结构依赖于评估微内核的结果而指定输入内核的微内核将被执行所按的次序。例如,在if/else语句的情况下,输入内核语句的条件被评估,并且结果被存储到全局存储器。驱动应用然后访问该结果和流控制数据结构以步进到下一个功能上正确的下一个微内核。循环(例如,for/while循环)可以被转换成语句和条件,以使得“for”循环变成一系列的三个语句:循环变量初始化步骤、条件评估和对循环变量的操作(通常是递增/递减)。再次,条件评估简单地将条件语句的结果拷贝到全局存储器,并且驱动应用根据定义的流控制来使用该值以确定要执行的下一个微内核。
在一个实施例中,流控制数据结构提供:1)要执行哪些内核行以及以什么次序,2)哪些工作项依赖于其它(以用于存储器同步),以及3)从逐行执行和实际输入的OpenCL代码的映射。在一个实施例中,流控制数据结构可以是流控制语句的列表,其中的每一个对应于一个微内核,并且是如下定义的C类型结构(C结构):
其中,uKernelID是针对语句的唯一标识符,uKernelName是表示对应的微内核名称的串,fileLine是原始输入内核中的对应行号,scopeDepth是该语句的范围的深度,barrierType是指定的存储器屏障,nextTrue是如果条件为真则要执行的下一个语句(-1要终止),并且nextFalse是如果条件为假则要执行的下一个语句(-1要终止)。驱动应用步进通过流控制数据结构中的流控制语句以便确定要以其执行微内核的次序。为了说明,以下给出分支(例如,“if”语句)的情况下的流控制数据结构的操作的示例。在该示例中,特定OCL_DBG_Statement实例被示出为元组:
下述内核测试了浮点数是否大于两个阈值中的任一个,其中threshold2>threshold1:
所生成的微内核是:
流控制数据结构中的所得到的流控制语句为:
每个条件内的语句具有比其条件评估大一的深度,并且全部终止,由于在整个if/else块之后没有任何其它语句。循环基本上以相同方式工作,通过评估条件并确定要执行的下一个语句。
驱动应用经由用户接口与用户通信。在各种实施例中,驱动应用允许用户选择要调试的OpenCL文件,选择在其上调试的OpenCL设备,指定全局和局部工作组大小,选择当前工作项以及工作组,和/或指定工作项和工作组的子集。变量可以通过名称而被访问,其中OpenCL私有、局部和全局变量以及局部声明的变量在其范围被录入时通过名称可访问,并且其中仅有通过当前选择的工作项可访问的变量是可访问的。用户可以能够设置或查看变量,执行对从开始到结束的所有OpenCL微内核进行运行的输入代码的完全执行,和/或逐行进行通过代码。可以强调对应于当前步骤的OpenCL代码中的所查看的行。可以提供步进功能性,其扩展到当前选择的工作项、当前选择的工作组、工作项的指定子集、工作组的指定子集或所有工作项。输入代码可以能够被运行而不在每行停止,其中,功能性扩展到当前选择的工作项、当前选择的工作组、工作项的指定子集、工作组的指定子集或所有工作项。驱动应用可以允许设置断点,其中断点被指定为原始OpenCL内核文件中的行号,其中断点停止到达它的任何工作项的执行,并将该工作项回复到逐行调试功能性,并且其中工作项到达断点,如果它到达从OpenCL文件中相同行中解析出的任何微内核。
图4示出在实施用于诸如OpenCL之类的设备特定API的逐行内核调试过程中由内核功能性检查器执行的方法的示例。在401处接收内核源代码,并在402处对其进行解析以生成符号和(一个或多个)微内核。在403处,经由用户输入而接收要执行的内核行,并且检索与所选内核行关联的(一个或多个)微内核。在404处,经由用户输入而接收所选的索引空间、要显示的工作项、要显示的内核变量和初始化值。在405处,部署(一个或多个)微内核到计算设备以供执行,其中微内核在执行之前将数据从全局存储器拷贝到私有或局部存储器变量中并在执行之后将数据从一个或多个私有或局部存储器变量拷贝回到全局存储器中。在406处,显示所选变量的值。
图5是图示示例机器500的框图,在示例机器500上本文讨论的技术(例如,方法)中的任何一个或多个可以执行。在可替换实施例中,机器500可以作为独立设备进行操作,或者可以连接(例如联网)到其它机器。在联网的部署中,机器500可以作为服务器-客户端网络环境中的服务器机器、客户端机器或二者进行操作。在示例中,机器500可以充当对等式(P2P)(或其它分布式)网络环境中的对等机器。机器500可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、移动电话、web(网络)器具、网络路由器、交换机或桥接器、或者能够执行指令(顺序的或以其它方式的)的任何机器,所述指令指定要由该机器采取的动作。此外,虽然图示了仅单个机器,但术语“机器”也应被理解为包括单独地或联合地执行指令集(或多个集合)以执行本文所讨论的方法中的任何一个或多个的机器的任何集合,诸如云计算、软件即服务(SaaS)、其它计算机集群配置。
如本文描述的示例可以包括逻辑或多个组件、模块或机构,或者可以在逻辑或多个组件、模块或机构上操作。模块是能够执行指定操作的有形实体(例如,硬件),并且可以以某种方式被配置或布置。在示例中,电路可以以指定的方式被布置(例如,内部地或相对于诸如其它电路之类的外部实体)为模块。在示例中,一个或多个计算机系统(例如,独立的、客户端或服务器计算机系统)或者一个或多个硬件处理器的全部或部分可以由固件或软件(例如,指令、应用部分或应用)配置为进行操作以执行指定的操作的模块。在示例中,软件可以驻留在机器可读介质上。在示例中,软件当被模块的底层硬件执行时使硬件执行指定的操作。
因此,术语“模块”被理解为包含有形实体,即被物理地构造、特定地配置(例如,硬接线)或暂时地(例如,短暂地)配置(例如,编程)成以指定方式进行操作或执行本文描述的任何操作的部分或全部的实体。考虑其中模块被暂时地配置的示例,每个模块不需要在时间上的任何一个时刻被实例化。例如,在模块包括通过使用软件而配置的通用硬件处理器的情况下,通用硬件处理器可以在不同时间被配置为相应的不同模块。软件可以相应地将硬件处理器配置成例如在一个时间实例处构成特定模块并且在不同的时间实例处构成不同模块。
机器(例如,计算机系统)500可以包括硬件处理器502(例如,中央处理单元(CPU)、图形处理单元(GPU)、硬件处理器核或其任何组合)、主存储器504、和静态存储器506,其中一些或全部可以经由互链路(例如,总线)508与彼此进行通信。机器500还可以包括显示设备510、字母数字输入设备512(例如,键盘)和用户接口(UI)导航设备514(例如,鼠标)。在示例中,显示设备510、输入设备512和UI导航设备514可以是触摸屏显示器。机器500可以附加地包括大容量存储设备(例如,驱动单元)516、信号生成设备518(例如,扬声器)、网络接口设备520和一个或多个传感器521,诸如全球定位系统(GPS)传感器、罗盘、加速计或其它传感器。机器500可以包括输出控制器528,诸如串行(例如,通用串行总线(USB)、并行或其它有线或无线(例如,红外(IR))连接以通信或控制一个或多个外围设备(例如,打印机、读卡器等)。
大容量存储设备526可以包括机器可读介质522,在所述机器可读介质上存储数据结构或指令524的一个或多个集合(例如,软件),所述数据结构或指令的一个或多个集合体现本文描述的技术或功能中的任何一个或多个或被本文描述的技术或功能中的任何一个或多个利用。指令524还可以在其被机器500执行期间完全地或至少部分地驻留在主存储器504内、在静态存储器506内或在硬件处理器502内。在示例中,硬件处理器502、主存储器504、静态存储器506或大容量存储设备516的一个或任何组合可以构成机器可读介质。
虽然机器可读介质522被图示为单个介质,但术语“机器可读介质”可以包括被布置成存储一个或多个指令524的单个介质或多个介质(例如,集中式或分布式数据库,和/或关联的高速缓存和服务器)。
术语“机器可读介质”可以包括能够存储、编码或承载指令以供机器800执行并且使机器500执行本公开的技术中的任何一个或多个,或者能够存储、编码或承载被这样的指令使用或与其关联的数据结构的任何介质。非限制性机器可读介质示例可以包括固态存储器、以及光学和磁性介质。在示例中,大容量的机器可读介质包括带有具有静止质量(resting mass)的多个粒子的机器可读介质。大容量的机器可读介质的特定示例可以包括:非易失性存储器,诸如半导体存储器设备(例如,电可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM))和闪速存储器设备;磁盘,诸如内部硬盘和可移除盘;磁光盘;以及CD-ROM和DVD-ROM盘。
还可以经由网络接口设备520使用传输介质通过通信网络526来发射或接收指令524,所述网络接口设备利用多种传输协议(例如,帧中继、因特网协议(IP)、传输控制协议(TCP)、用户数据报协议(UDP)、超文本传输协议(HTTP)等)中的任何一个。示例通信网络除其它外可以包括局域网(LAN)、广域网(WAN)、分组数据网络(例如,因特网)、移动电话网络(例如,蜂窝网络)、普通旧式电话(POTS)网络和无线数据网络(例如,已知为Wi-Fi®的电气和电子工程师协会(IEEE)802.11标准族,已知为WiMAX®的IEEE 802.16标准族),对等式(P2P)网络。在示例中,网络接口设备520可以包括一个或多个物理插口(例如,以太网、同轴或电话插口)或者一个或多个天线以连接到通信网络526。在示例中,网络接口设备520可以包括多个天线以使用以下技术中的至少一个而无线地通信:单输入多输出(SIMO)、多输入多输出(MIMO)或多输入单输出(MISO)技术。术语“传输介质”应被理解为包括能够存储、编码或承载指令以供机器500执行的任何无形介质,并且包括数字或模拟通信信号或其它无形介质以促进这样的软件的通信。
附加注解和示例
在示例1中,一种用于实现内核功能性检查器的系统包括:主机设备,其经由设备特定的API(应用编程接口)而对接到计算设备;设备特定的API解析器,其由主机设备执行以用于接收输入内核的设备特定的API源代码串,以用于解析所述串以生成从输入内核得出的一个或多个设备特定的API可执行的微内核;以及驱动应用,其用于将所生成的微内核中的一个或多个发送到计算设备以供执行。设备特定的API可执行的微内核可以将私有或局部存储器变量的中间值拷贝到全局存储器中。
在示例2中,示例1的主题可以可选地包括,其中所述微内核包括输入内核的变元和附加全局缓冲器变元,其包含输入内核的局部或私有存储器变量的中间值。
在示例3中,示例1或示例2的主题可以可选地包括,其中所述设备特定的API解析器还用于生成从输入内核得出的流控制数据结构,所述流控制数据结构指定用于微内核的执行次序,并且其中所述驱动应用用于将所生成的微内核中的一个或多个发送到计算设备以供根据由流控制数据结构所指定的次序来执行。
在示例4中,示例1到3中任一项的主题可以可选地包括,其中所述设备特定的API解析器还用于生成用于每个微内核的一个或多个数据结构,其包含用于微内核的源代码串、附加到微内核的每个缓冲器变元和对应于附加变元的输入内核的私有和局部变量连同偏移索引,所述偏移索引标识变量在附加缓冲器变元中被存储在哪里。
在示例5中,示例1到4中任一项的主题可以可选地包括,其中所述微内核执行从输入内核得出的设备特定的API语句,并且针对由设备特定的API语句访问的输入内核的私有或局部存储器变量,所述微内核在执行设备特定的API语句之前将数据从全局存储器拷贝到私有或局部存储器变量中并且在执行设备特定的API语句之后将数据从一个或多个私有或局部存储器变量拷贝回到全局存储器中。
在示例6中,示例1到5中任一项的主题可以可选地包括,其中所述微内核自和向微内核的加索引的全局缓冲器变元拷贝输入内核的具有相同类型的私有存储器变量的值,其中全局缓冲器变元的每个索引对应于特定私有存储器变量。
在示例7中,示例1到6中任一项的主题可以可选地包括,其中所述微内核自和向微内核的加索引的全局缓冲器变元拷贝输入内核的具有相同类型的局部存储器缓冲器的值,其中全局缓冲器变元的每个索引对应于特定局部存储器缓冲器,并且其中,局部存储器缓冲器的大小被传递到微内核作为变元。
在示例8中,示例1到7中任一项的主题可以可选地包括,其中所述设备特定的API解析器还用于:针对输入内核中的每个条件分支或循环语句,生成条件评估内核,所述条件评估内核评估语句中的条件并将评估的结果存储在附加的全局缓冲器中;以及生成流控制数据结构,以使得在执行条件评估微内核之后,所述流控制数据结构取决于在附加的全局缓冲器中存储的评估的结果来指定接下来要执行哪个微内核。
在示例9中,示例1到8中任一项的主题可以可选地包括,其中所述设备特定的API解析器还用于,在输入内核中的条件循环语句的情况下,生成微内核以用于初始化循环变量并如由输入内核源代码指定的那样在循环变量上执行操作。
在示例10中,示例1到9中任一项的主题可以可选地还包括用户接口,并且其中所述驱动应用还用于经由用户接口而接收输入内核源代码的一行或多行的选择,并根据流控制结构而执行从输入内核源代码的所选行得出的那些微内核。
在示例11中,示例1到11中任一项的主题可以可选地包括,其中所述驱动应用还用于经由用户接口而接收输入内核源代码的一个或多个全局、局部或私有变量的选择,并显示对应于所选一个或多个变量的微内核缓冲器的内容。
在示例12中,示例1到11中任一项的主题可以可选地包括,其中所述驱动应用还用于经由用户接口而接收用于输入内核源代码的一个或多个所选的全局、局部或私有变量的所选值,并将对应于所选一个或多个变量的微内核缓冲器的内容设置成所选值。
在示例13中,一种由经由设备特定的API(应用编程接口)对接到计算设备的主机执行的方法包括:接收输入内核的设备特定的API源代码串,解析所述输入串以将输入内核分解成一个或多个设备特定的API可执行的微内核,以及将微内核中的一个或多个部署到计算设备以供执行。
在示例14中,示例13的主题可以可选地包括,其中每个微内核的变元包括输入内核的变元和附加的全局缓冲器变元以用于包含输入内核的局部或私有存储器变量的中间值。
在示例15中,示例13到14中任一项的主题可以可选地包括,其中所述微内核执行从输入内核得出的设备特定的API语句,并且针对由设备特定的API语句访问的输入内核的私有或局部存储器变量,所述微内核在执行设备特定的API语句之前将数据从全局存储器拷贝到私有或局部存储器变量中,并且在执行设备特定的API语句之后将数据从一个或多个私有或局部存储器变量拷贝回到全局存储器中。
在示例16中,示例13到15中任一项的主题可以可选地包括,其中所述微内核自和向微内核的加索引的全局缓冲器变元拷贝输入内核的具有相同类型的私有存储器变量的值,其中全局缓冲器变元的每个索引对应于特定私有存储器变量。
在示例17中,示例13到16中任一项的主题可以可选地包括,其中所述微内核自和向微内核的加索引的全局缓冲器变元拷贝输入内核的具有相同类型的局部存储器缓冲器的值,其中全局缓冲器变元的每个索引对应于特定局部存储器缓冲器,并且其中局部存储器缓冲器的大小被传递到微内核作为变元。
在示例18中,示例13到17中任一项的主题可以可选地还包括生成用于每个微内核的一个或多个数据结构,其包含用于微内核的源代码串、附加到微内核的每个缓冲器变元和对应于附加变元的输入内核的私有和局部变量连同偏移索引,所述偏移索引标识变量在附加的缓冲器变元中存储在哪里。
在示例19中,示例13到18中任一项的主题可以可选地还包括生成从输入内核得出的流控制数据结构,所述流控制数据结构指定用于微内核的执行次序,以及根据流控制数据结构所指定的次序而将微内核从主机设备部署到计算设备。
在示例20中,示例13到18中任一项的主题可以可选地还包括:针对输入内核中的每个条件分支或循环语句,生成条件评估微内核,所述条件评估微内核评估语句中的条件并将评估的结果存储在附加的全局缓冲器中;并且,其中在执行条件评估微内核之后,所述流控制数据结构取决于存储在附加的全局缓冲器中的评估的结果来指定接下来要执行哪个微内核。
在示例21中,示例13到19中任一项的主题可以可选地还包括,对于输入内核中的条件循环语句的情况,生成微内核以用于初始化循环变量并如由输入内核源代码指定的那样在循环变量上执行操作。
在示例22中,示例13到21中任一项的主题可以可选地还包括,经由用户接口而接收输入内核源代码的一行或多行的选择,并根据流控制结构而执行从所选的输入内核源代码得出的那些微内核。
在示例23中,示例13到22中任一项的主题可以可选地还包括,经由用户接口而接收输入内核源代码的一个或多个全局、局部或私有变量的选择,并显示对应于所选的一个或多个变量的微内核缓冲器的内容。
在示例24中,示例13到23中任一项的主题可以可选地还包括,经由用户接口而接收索引空间,所述索引空间指定当微内核被部署到计算设备时要执行的线程的数目。
在示例25中,示例13到24中任一项的主题可以可选地还包括,经由用户接口而接收微内核的线程的选择,对于其而言,当微内核被计算设备执行时要显示对应于所选的一个或多个变量的微内核缓冲器。
在示例26中,示例13到25中任一项的主题可以可选地还包括,经由用户接口而接收用于输入内核源代码的一个或多个所选的全局、局部或私有变量的所选值,并将对应于所选的一个或多个变量的微内核缓冲器的内容设置成所选值。
在示例27中,示例13到26中任一项的主题可以可选地包括,其中所述设备特定的API是OpenCL(开放计算机语言)、DirectX或OpenGL。
在示例28中,示例13到27中任一项的主题可以可选地包括,其中所述计算设备是GPU(图形处理单元)。
示例29是一种包含指令的机器可读介质,所述指令当被执行时使机器实施如在示例13到28中任一项中所阐述的方法。
示例30是一种用于实现内核功能性检查器的系统,所述内核功能性检查器包括用于执行如在示例13到28中任一项中所阐述的方法的装置。
以上详细描述包括对形成详细描述的一部分的附图的参考。附图通过图示的方式示出可以被实践的特定实施例。这些实施例在本文中也被称为“示例”。这样的示例可以包括除了所示出或描述的那些之外的元件。然而,还设想的是包括所示出或描述的元件的示例。此外,还设想的是使用关于特定示例(或其一个或多个方面)或关于本文所示出或描述的其它示例(或其一个或多个方面)所示出或描述的那些元件(或其一个或多个方面)的任何组合或置换的示例。
在本文档中所引用的出版物、专利和专利文档通过引用以其全部被并入于此,如同单独地通过应用被并入。在通过引用被如此并入的那些文档和本文档之间的不一致的使用的情况下,(一个或多个)并入的参考中的使用是对本文档的使用的补充;对于不可调和的不一致性来说,本文档中的使用进行支配。
在本文档中,使用术语“一”或“一个”,如在专利文档中常见的,用于包括一个或多于一个,独立于“至少一个”或“一个或多个”的任何其它实例或使用。在本文档中,术语“或”被用于指非排他性的或,以使得“A或B”包括“A但不是B”,“B但不是A”以及“A和B”,除非以其它方式指示。在随附权利要求中,术语“包括”和“在其中”被用作相应术语“包括有”和“其中”的简明话语等同物。而且,在以下权利要求中,术语“包括”和“包括有”是开放式的,即,包括除在权利要求中这样的术语之后列出的那些之外的元件的系统、设备、物品或过程仍视为落在该权利要求的范围内。此外,在下述权利要求中,术语“第一”、“第二”和“第三”等仅仅被用作标记,并且不意图暗示用于其对象的数字次序。
以上描述意图为说明性而非限制性的。例如,上述示例(或其一个或多个方面)可以与其它组合地使用。其它实施例可以诸如被本领域普通技术人员在回顾以上描述时使用。摘要用于允许读者快速地弄清技术公开的性质,例如以遵照美国中的37 C.F.R. §1.72(b)。摘要在理解到它将不用于解释或限制权利要求的范围或含义的情况下被提交。而且,在以上具体实施方式中,各种特征可以被群组在一起以使本公开整体化。然而,权利要求可以不阐述本文公开的每一个特征,由于实施例可以以所述特征的子集为特征。此外,实施例可以包括比在特定示例中公开的那些更少的特征。因而,下述权利要求由此被并入具体实施方式中,其中权利要求独立地作为分离的实施例。参考随附权利要求连同这样的权利要求被赋予的等同物的完整范围来确定本文公开的实施例的范围。
Claims (34)
1.一种用于实现内核功能性检查器的系统,包括:
主机设备,其包括中央处理单元和主机存储器;
计算设备,其包括处理电路系统和存储器;
其中所述主机设备经由设备特定的API(应用编程接口)对接到所述计算设备,其中所述设备特定的API对由主机程序部署到内核中的内核源代码进行编译,所述内核经由设备特定的设备驱动器运行在所述计算设备上;
其中所述计算设备包括多个计算元件,所述多个计算元件与通过被称为工作项的计算元件执行的输入内核的每个实例并发地执行输入内核的多个实例;
其中所述计算设备具有能由所述计算设备和主机设备两者访问的全局存储器,并且还具有只能由所述计算设备访问的私有和局部存储器;
设备特定的API解析器,其由所述主机设备执行以用于接收输入内核的设备特定的API源代码串并用于解析所述串以从输入内核源代码串的每个可执行语句生成一个或多个设备特定的API可执行的微内核,其中所生成的微内核是能单独执行的,并且包含将其每一个私有或局部存储器的中间值复制到全局存储器中的指令;
驱动应用,其用于将所生成的微内核经由设备特定的API发送到所述计算设备以供执行;
与所述驱动应用通信的用户接口,所述用户接口允许用户控制所述微内核的执行并且设置或查看微内核变量;
其中所述设备特定的API解析器进一步用于生成从所述输入内核得到的流控制数据结构,该流控制数据结构指定微内核的执行顺序,并且其中所述驱动应用进一步用于将所生成的微内核的一个或多个微内核发送到所述计算设备以根据由所述流控制数据结构指定的顺序来执行;以及
其中所述驱动应用还用于允许经由所述用户接口来设置断点,其中断点被指定为所述输入内核的源代码串的行号,其中断点停止达到该断点的任何工作项的执行,并且将该工作项回复到针对微内核语句的逐行调试功能性,并且其中如果工作项达到从输入内核的源代码串的具有由断点指定的行号的行解析出的任何微内核时,则该工作项达到断点。
2.根据权利要求1所述的系统,其中所述微内核包括所述输入内核的变元和附加的全局缓冲器变元,其包含所述输入内核的局部或私有存储器变量的中间值。
3.根据权利要求1所述的系统,其中所述设备特定的API解析器还用于生成用于每个微内核的一个或多个数据结构,其包含用于所述微内核的源代码串、附加到所述微内核的每个缓冲器变元和对应于附加的变元的输入内核的私有和局部变量连同偏移索引,所述偏移索引标识所述变量在附加的缓冲器变元中被存储在哪里。
4.根据权利要求1所述的系统,其中所述微内核执行从所述输入内核得出的设备特定的API语句,并且针对由设备特定的API语句访问的输入内核的私有或局部存储器变量,在执行设备特定的API语句之前将数据从全局存储器拷贝到私有或局部存储器变量中并且在执行设备特定的API语句之后将数据从一个或多个私有或局部存储器变量拷贝回到全局存储器中。
5.根据权利要求1所述的系统,其中所述微内核从所述微内核的加索引的全局缓冲器变元和向所述微内核的加索引的全局缓冲器变元拷贝所述输入内核的具有相同类型的私有存储器变量的值,其中所述全局缓冲器变元的每个索引对应于特定的私有存储器变量。
6.根据权利要求1所述的系统,其中微内核从所述微内核的加索引的全局缓冲器变元和向所述微内核的加索引的全局缓冲器变元拷贝所述输入内核的具有相同类型的局部存储器缓冲器的值,其中所述全局缓冲器变元的每个索引对应于特定的局部存储器缓冲器,并且其中,所述局部存储器缓冲器的大小被传递到所述微内核作为变元。
7.根据权利要求1到6中任一项所述的系统,其中所述设备特定的API解析器还用于:
针对输入内核中的每个条件分支或循环语句,生成条件评估微内核,所述条件评估微内核评估语句中的条件并将评估的结果存储在附加的全局缓冲器中;以及,
生成流控制数据结构,以使得在执行条件评估微内核之后,所述流控制数据结构取决于存储在附加的全局缓冲器中的评估的结果来指定接下来要执行哪个微内核。
8.根据权利要求7所述的系统,其中所述设备特定的API解析器还用于,在所述输入内核中的条件循环语句的情况下,生成微内核以用于初始化循环变量并如由输入内核源代码指定的那样在所述循环变量上执行操作。
9.根据权利要求7所述的系统,其中所述驱动应用还用于经由所述用户接口而接收所述输入内核源代码的一行或多行的选择,并根据流控制结构而执行从输入内核源代码的所选的行得出的那些微内核。
10.根据权利要求9所述的系统,其中所述驱动应用还用于经由用户接口而接收所述输入内核源代码的一个或多个全局、局部或私有变量的选择,并显示对应于所选的一个或多个变量的微内核缓冲器的内容。
11.根据权利要求9所述的系统,其中所述驱动应用还用于经由所述用户接口而接收用于所述输入内核源代码的一个或多个所选的全局、局部或私有变量的所选值,并将对应于所选的一个或多个变量的微内核缓冲器的内容设置成所选值。
12.一种用于检查设备特定的API(应用编程接口)的功能性的方法,包括:
操作经由所述设备特定的API(应用编程接口)对接到计算设备的主机设备,其中所述设备特定的API对由主机程序部署到内核中的内核源代码进行编译,所述内核经由设备特定的设备驱动器运行在所述计算设备上;
其中所述计算设备包括多个计算元件,所述多个计算元件与通过被称为工作项的计算元件执行的输入内核的每个实例并发地执行输入内核的多个实例;
其中所述计算设备具有能由所述计算设备和主机设备两者访问的全局存储器,并且还具有只能由所述计算设备访问的私有和局部存储器;
在所述主机设备处执行设备特定的API解析器,该设备特定的API解析器接收输入内核的设备特定的API源代码串并解析所述串以从输入内核源代码串的每个可执行语句生成一个或多个设备特定的API可执行的微内核,其中所生成的微内核是能单独执行的,并且包含将其每一个私有或局部存储器的中间值复制到全局存储器中的指令;
在主机设备处执行驱动应用,该驱动应用将所生成的微内核经由设备特定的API发送到所述计算设备以供执行;
经由用户接口与所述驱动应用通信,所述用户接口允许用户控制所述微内核的执行并且设置或查看微内核变量;
执行所述设备特定的API解析器以生成从所述输入内核得到的流控制数据结构,该流控制数据结构指定微内核的执行顺序,并且执行所述驱动应用以将所生成的微内核的一个或多个微内核发送到所述计算设备以根据由所述流控制数据结构指定的顺序来执行;以及
经由所述用户接口来设置一个或多个断点,其中断点被指定为所述输入内核的源代码串的行号,其中断点停止达到该断点的任何工作项的执行并且将该工作项回复到针对微内核语句的逐行调试功能性,并且其中如果工作项达到从输入内核的源代码串的具有由断点指定的行号的行解析出的任何微内核时,则该工作项达到断点。
13.根据权利要求12所述的方法,其中微内核的变元包括所述输入内核的变元和附加的全局缓冲器变元以用于包含所述输入内核的局部或私有存储器变量的中间值。
14.根据权利要求12所述的方法,其中微内核从所述微内核的加索引的全局缓冲器变元和向所述微内核的加索引的全局缓冲器变元拷贝输入内核的具有相同类型的私有存储器变量的值,其中全局缓冲器变元的每个索引对应于特定的私有存储器变量。
15.根据权利要求12所述的方法,还包括生成用于每个微内核的一个或多个数据结构,其包含用于所述微内核的源代码串、附加到所述微内核的每个缓冲器变元和对应于附加的变元的输入内核的私有和局部变量连同偏移索引,所述偏移索引标识变量在附加的缓冲器变元中被存储在哪里。
16.根据权利要求12所述的方法,还包括:
针对所述输入内核中的每个条件分支或循环语句,生成条件评估微内核,所述条件评估微内核评估语句中的条件并将评估的结果存储在附加的全局缓冲器中;并且,
其中在执行所述条件评估微内核之后,所述流控制数据结构取决于存储在附加的全局缓冲器中的评估的结果来指定接下来要执行哪个微内核。
17.根据权利要求12所述的方法,还包括,经由用户接口而接收输入内核源代码的一行或多行的选择,并根据流控制结构而执行从所选的输入内核源代码得出的那些微内核。
18.根据权利要求17所述的方法,还包括,经由用户接口而接收输入内核源代码的一个或多个全局、局部或私有变量的选择,并显示对应于所选的一个或多个变量的微内核缓冲器的内容。
19.根据权利要求18所述的方法,还包括,经由用户接口而接收索引空间,所述索引空间指定当微内核被部署到计算设备时要执行的线程的数目。
20.根据权利要求18所述的方法,还包括,经由用户接口而接收微内核的线程的选择,对于其而言,当微内核被计算设备执行时要显示对应于所选的一个或多个变量的微内核缓冲器。
21.根据权利要求18所述的方法,还包括,经由用户接口而接收用于输入内核源代码的一个或多个所选的全局、局部或私有变量的所选值,并将对应于所选的一个或多个变量的微内核缓冲器的内容设置成所选值。
22.根据权利要求12所述的方法,其中所述设备特定的API是OpenCL(开放计算机语言)。
23.一种包含指令的机器可读介质,所述指令当被执行时使机器实施如由权利要求12到22中任一项所述的方法。
24.一种用于检查设备特定的API(应用编程接口)的功能性的装置,包括:
用于操作经由所述设备特定的API(应用编程接口)对接到计算设备的主机设备的部件,其中所述设备特定的API对由主机程序部署到内核中的内核源代码进行编译,所述内核经由设备特定的设备驱动器运行在所述计算设备上;
其中所述计算设备包括多个计算元件,所述多个计算元件与通过被称为工作项的计算元件执行的输入内核的每个实例并发地执行输入内核的多个实例;
其中所述计算设备具有能由所述计算设备和主机设备两者访问的全局存储器,并且还具有只能由所述计算设备访问的私有和局部存储器;
用于在所述主机设备处执行设备特定的API解析器的部件,该设备特定的API解析器接收输入内核的设备特定的API源代码串并解析所述串以从输入内核源代码串的每个可执行语句生成一个或多个设备特定的API可执行的微内核,其中所生成的微内核是能单独执行的,并且包含将其每一个私有或局部存储器的中间值复制到全局存储器中的指令;
用于在主机设备处执行驱动应用的部件,该驱动应用将所生成的微内核经由设备特定的API发送到所述计算设备以供执行;
用于经由用户接口与所述驱动应用通信的部件,所述用户接口允许用户控制所述微内核的执行并且设置或查看微内核变量;
用于执行所述设备特定的API解析器以生成从所述输入内核得到的流控制数据结构的部件,该流控制数据结构指定微内核的执行顺序,并且执行所述驱动应用以将所生成的微内核的一个或多个微内核发送到所述计算设备以根据由所述流控制数据结构指定的顺序来执行;以及
经由所述用户接口来设置一个或多个断点,其中断点被指定为所述输入内核的源代码串的行号,其中断点停止达到该断点的任何工作项的执行并且将该工作项回复到针对微内核语句的逐行调试功能性,并且其中如果工作项达到从输入内核的源代码串的具有由断点指定的行号的行解析出的任何微内核时,则该工作项达到断点。
25.根据权利要求24所述的装置,其中微内核的变元包括所述输入内核的变元和附加的全局缓冲器变元以用于包含所述输入内核的局部或私有存储器变量的中间值。
26.根据权利要求24所述的装置,其中微内核从所述微内核的加索引的全局缓冲器变元和向所述微内核的加索引的全局缓冲器变元拷贝输入内核的具有相同类型的私有存储器变量的值,其中全局缓冲器变元的每个索引对应于特定的私有存储器变量。
27.根据权利要求24所述的装置,还包括用于生成用于每个微内核的一个或多个数据结构的部件,其包含用于所述微内核的源代码串、附加到所述微内核的每个缓冲器变元和对应于附加的变元的输入内核的私有和局部变量连同偏移索引,所述偏移索引标识变量在附加的缓冲器变元中被存储在哪里。
28.根据权利要求24所述的装置,还包括:
用于针对所述输入内核中的每个条件分支或循环语句生成条件评估微内核的部件,所述条件评估微内核评估语句中的条件并将评估的结果存储在附加的全局缓冲器中;并且
其中在执行所述条件评估微内核之后,所述流控制数据结构取决于存储在附加的全局缓冲器中的评估的结果来指定接下来要执行哪个微内核。
29.根据权利要求24所述的装置,还包括,用于经由用户接口而接收输入内核源代码的一行或多行的选择,并根据流控制结构而执行从所选的输入内核源代码得出的那些微内核的部件。
30.根据权利要求29所述的装置,还包括,用于经由用户接口而接收输入内核源代码的一个或多个全局、局部或私有变量的选择,并显示对应于所选的一个或多个变量的微内核缓冲器的内容的部件。
31.根据权利要求30所述的装置,还包括,用于经由用户接口而接收索引空间,所述索引空间指定当微内核被部署到计算设备时要执行的线程的数目的部件。
32.根据权利要求30所述的装置,还包括,用于经由用户接口而接收微内核的线程的选择的部件,对于其而言,当微内核被计算设备执行时要显示对应于所选的一个或多个变量的微内核缓冲器。
33.根据权利要求30所述的装置,还包括,用于经由用户接口而接收用于输入内核源代码的一个或多个所选的全局、局部或私有变量的所选值,并将对应于所选的一个或多个变量的微内核缓冲器的内容设置成所选值的部件。
34.根据权利要求24所述的装置,其中所述设备特定的API是OpenCL(开放计算机语言)。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2013/031346 WO2014142876A1 (en) | 2013-03-14 | 2013-03-14 | Kernel functionality checker |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105027089A CN105027089A (zh) | 2015-11-04 |
CN105027089B true CN105027089B (zh) | 2018-05-22 |
Family
ID=51537274
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380073036.6A Expired - Fee Related CN105027089B (zh) | 2013-03-14 | 2013-03-14 | 内核功能性检查器 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9442826B2 (zh) |
EP (1) | EP2972880B1 (zh) |
CN (1) | CN105027089B (zh) |
WO (1) | WO2014142876A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10169032B2 (en) * | 2014-10-16 | 2019-01-01 | International Business Machines Corporation | Parallel development of diverged source streams |
US9965343B2 (en) * | 2015-05-13 | 2018-05-08 | Advanced Micro Devices, Inc. | System and method for determining concurrency factors for dispatch size of parallel processor kernels |
WO2017074377A1 (en) * | 2015-10-29 | 2017-05-04 | Intel Corporation | Boosting local memory performance in processor graphics |
US20180033114A1 (en) * | 2016-07-26 | 2018-02-01 | Mediatek Inc. | Graphics Pipeline That Supports Multiple Concurrent Processes |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3261239B2 (ja) * | 1993-07-27 | 2002-02-25 | 富士通株式会社 | データ転送の一括化処理方法 |
US6983454B2 (en) * | 2002-03-29 | 2006-01-03 | International Business Machines Corporation | Extended “run to” function |
US7548244B2 (en) * | 2005-01-12 | 2009-06-16 | Sony Computer Entertainment Inc. | Interactive debugging and monitoring of shader programs executing on a graphics processor |
KR101327722B1 (ko) | 2005-07-20 | 2013-11-11 | 엘지전자 주식회사 | 전자기기의 방열장치 |
US7958512B2 (en) * | 2005-10-31 | 2011-06-07 | Microsoft Corporation | Instrumentation to find the thread or process responsible for an application failure |
KR20070109432A (ko) * | 2006-05-11 | 2007-11-15 | 삼성전자주식회사 | 커널 인지 디버깅 장치 및 방법 |
GB2466078B (en) * | 2008-12-15 | 2013-11-13 | Advanced Risc Mach Ltd | Apparatus and method for tracing activities of a shader program executed on shader circuitry of a data processing apparatus |
US8341602B2 (en) | 2009-01-29 | 2012-12-25 | Microsoft Corporation | Automated verification of a type-safe operating system |
US9020939B2 (en) * | 2009-06-30 | 2015-04-28 | International Business Machines Corporation | Correlating queries issued by applications with their source lines and analyzing applications for problem determination and where used analysis |
KR101613971B1 (ko) * | 2009-12-30 | 2016-04-21 | 삼성전자주식회사 | 프로그램 코드의 변환 방법 |
US8843879B2 (en) * | 2010-09-13 | 2014-09-23 | Massively Parallel Technologies, Inc. | Software design and automatic coding for parallel computing |
US10025643B2 (en) * | 2012-05-10 | 2018-07-17 | Nvidia Corporation | System and method for compiler support for kernel launches in device code |
-
2013
- 2013-03-14 US US13/995,734 patent/US9442826B2/en active Active
- 2013-03-14 EP EP13878207.3A patent/EP2972880B1/en not_active Not-in-force
- 2013-03-14 WO PCT/US2013/031346 patent/WO2014142876A1/en active Application Filing
- 2013-03-14 CN CN201380073036.6A patent/CN105027089B/zh not_active Expired - Fee Related
Non-Patent Citations (1)
Title |
---|
A Hardware-Aware Debugger for the OpenGL Shading Language;Magnus Strengert ET AL;《Graphics Hardware》;20071231;附图1,第3页第3节第2-4段,第4页第5节第2段、第5.1节第1-2段以及第5.2节 * |
Also Published As
Publication number | Publication date |
---|---|
US20150121051A1 (en) | 2015-04-30 |
US9442826B2 (en) | 2016-09-13 |
WO2014142876A1 (en) | 2014-09-18 |
EP2972880B1 (en) | 2018-07-18 |
EP2972880A1 (en) | 2016-01-20 |
CN105027089A (zh) | 2015-11-04 |
EP2972880A4 (en) | 2016-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108885545B (zh) | 用于实时数据流编程语言的工具和方法 | |
US20110225289A1 (en) | Determining Differences in an Event-Driven Application Accessed in Different Client-Tier Environments | |
CN107480327B (zh) | 一种仿真验证方法、装置和电子设备 | |
CN102279790A (zh) | 分布式调试方法和系统 | |
CN105027089B (zh) | 内核功能性检查器 | |
US10977309B2 (en) | Methods and systems for creating networks | |
EP3069266B1 (en) | Determination of production vs. development uses from tracer data | |
CN104050080A (zh) | 用户态调试linux内核的方法及系统 | |
US11789913B2 (en) | Integration of model execution engine containers with a model development environment | |
CN111367786B (zh) | 一种符号执行方法、电子设备以及存储介质 | |
US10387124B2 (en) | System and method for creating domain specific language | |
CN109614325B (zh) | 一种确定控件属性的方法及装置、电子设备和存储介质 | |
CN115422866A (zh) | 用于在仿真器上仿真逻辑系统设计的方法及相关设备 | |
US9569572B2 (en) | Selectively loading design data for logical equivalency check | |
US10073938B2 (en) | Integrated circuit design verification | |
US20240086165A1 (en) | Systems and methods for building and deploying machine learning applications | |
US8935144B2 (en) | System and method for examining concurrent system states | |
CN108334313A (zh) | 用于大型soc研发的持续集成方法、装置及代码管理系统 | |
US20230069588A1 (en) | Variant model-based compilation for analog simulation | |
CN115686467A (zh) | 动态语言中的类型推断 | |
CN103577170A (zh) | 网络应用的构建方法及装置 | |
CN111949510B (zh) | 测试处理方法、装置、电子设备及可读存储介质 | |
CN113610242A (zh) | 数据处理方法、装置和服务器 | |
Neto et al. | Component models for embedded systems in industrial cyber-physical systems | |
JP2017041196A (ja) | スタブ化対象判定装置、方法、及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180522 Termination date: 20210314 |
|
CF01 | Termination of patent right due to non-payment of annual fee |