CN103608777A - 图形处理单元中的存储器共享 - Google Patents
图形处理单元中的存储器共享 Download PDFInfo
- Publication number
- CN103608777A CN103608777A CN201280029553.9A CN201280029553A CN103608777A CN 103608777 A CN103608777 A CN 103608777A CN 201280029553 A CN201280029553 A CN 201280029553A CN 103608777 A CN103608777 A CN 103608777A
- Authority
- CN
- China
- Prior art keywords
- kernel
- working
- working group
- gpu
- label
- 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.)
- Granted
Links
Images
Classifications
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5033—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering data affinity
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Image Processing (AREA)
- Image Generation (AREA)
Abstract
本发明的方面是针对一种用图形处理单元GPU处理数据的方法。根据本发明的一些方面,所述方法包括接收定义着色器处理器的执行次序的输入,其中所述执行次序包括多个内核标号及多个工作组标号。所述方法还可包含将所述多个工作组标号及所述多个内核标号中所识别的内核的工作组指派给所述着色器处理器。所述方法还可包括通过所述着色器处理器执行所述多个工作组标号及所述多个内核标号中所识别的内核的所述工作组以处理输入数据,其中将执行次序流执行包括在所述多个工作组标号中所识别的两个或两个以上工作组之间共享输入数据。
Description
技术领域
本发明涉及使用图形处理单元(GPU)来处理数据。
背景技术
图形处理装置可经实施以进行多种图像处理或其它通用处理应用程序。举例来说,图形处理单元(GPU,有时被称作通用图形处理单元(GPGPU))可执行受益于高平行度的应用程序,例如色彩校正算法、人脸检测算法、模式辨识算法、扩增实境应用程序、多种算法应用程序(例如,小波变换、傅里叶变换等)或多种其它应用程序。
一般来说,GPU经设计以使用驻留于GPU中的一个或一个以上着色器处理器来处理一系列指令,所述指令可被称作着色器指令。在实例图像处理应用程序中,着色器指令可定义将由着色器处理器对组成图像的像素执行的一个或一个以上数学操作。通过将着色器指令应用于像素,根据由着色器指令定义的数学操作而改变或评估像素值。
可将着色器指令组织成被称作内核的着色器程序代码。内核可定义由GPU执行的功能或任务。为了执行内核,将程序代码划分成若干工作项(例如,GPU中的基本工作单元),工作项被组织成一个或一个以上工作组(例如,一组工作项)。
发明内容
一般来说,本发明的方面涉及产生及处理内核及工作组执行次序以用于图形处理。内核及工作组执行次序可提供与图形处理单元(GPU)的着色器处理器(SP)相关联的存储器资源的管理。举例来说,内核及工作组执行次序允许存储于SP的本地存储器资源中的数据由不同内核的工作组共享。在一个实例中,本发明的方面是针对一种用图形处理单元(GPU)处理数据的方法。所述方法包含接收定义着色器处理器的执行次序的输入,其中所述执行次序包括多个内核标号及多个工作组标号。所述方法还包含将所述多个工作组标号及所述多个内核标号中所识别的内核的工作组指派给所述着色器处理器。所述方法还包含通过所述着色器处理器执行所述多个工作组标号及所述多个内核标号中所识别的内核的所述工作组以处理输入数据。
在另一实例中,本发明的方面是针对包括定序器模块的图形处理单元(GPU)。所述定序器模块经配置以接收定义着色器处理器的执行次序的输入,其中所述执行次序包括多个内核标号及多个工作组标号。所述定序器模块还经配置以将所述多个工作组标号及所述多个内核标号中所识别的内核的工作组指派给所述着色器处理器。所述着色器处理器经配置以执行所述多个工作组标号及所述多个内核标号中所识别的内核的所述工作组以处理输入数据。
在另一实例中,本发明的方面是针对用指令编码的计算机可读存储媒体,所述指令用于致使计算装置的一个或一个以上可编程处理器接收定义着色器处理器的执行次序的输入,其中所述执行次序包括多个内核标号及多个工作组标号。所述指令还致使计算装置的一个或一个以上可编程处理器将所述多个工作组标号及所述多个内核标号中所识别的内核的工作组指派给所述着色器处理器。所述指令还致使计算装置的一个或一个以上可编程处理器通过所述着色器处理器执行所述多个工作组标号及所述多个内核标号中所识别的内核的所述工作组以处理输入数据。
在另一实例中,本发明的方面是针对一种图形处理单元(GPU),其包括用于接收定义着色器处理器的执行次序的输入的装置,其中所述执行次序包括多个内核标号及多个工作组标号。所述GPU还包括用于将所述多个工作组标号及所述多个内核标号中所识别的内核的工作组指派给所述着色器处理器的装置。所述GPU还包括用于通过所述着色器处理器执行所述多个工作组标号及所述多个内核标号中所识别的内核的所述工作组以处理输入数据的装置。
一个或一个以上实例的细节陈述于附图及以下描述中。其它特征、目标及优势将从描述及附图和从权利要求书中显而易见。
附图说明
图1为说明具有可经配置以实施本发明的方面的图形处理单元(GPU)的计算装置的框图。
图2为说明根据本发明的方面的具有图像数据的实例图像的框图,所述图像数据具有可由GPU执行的用于处理图像的相关联的指令。
图3为说明根据本发明的方面的具有可由GPU执行的三个内核的应用程序的框图。
图4为说明可经配置以进行本发明的方面的GPU的框图。
图5为说明根据本发明的方面的经配置以分配第一内核、第二内核及第三内核146的工作组的定序器模块的实例的框图。
图6为说明根据本发明的方面的经配置以分配第一内核、第二内核及第三内核的工作组的定序器模块的实例的框图。
图7为说明根据本发明的方面的指派执行次序流的实例的框图。
图8为说明根据本发明的方面的产生及执行一个或一个以上执行次序流的方法的流程图。
具体实施方式
本发明的方面大体上涉及定义及产生用于由GPU的着色器处理器(SP)执行的着色器指令流,所述GPU可实施为GPGPU。通常,GPU包含经设计以执行一个或一个以上着色器程序(在本文中被称作“内核”)的多个SP。内核定义可经实施以分析或修改多种输入数据的功能。实例包含用于并行处理相对较大数值的数据集的功能。在图像处理上下文中,功能可包含(例如)色彩校正算法、人脸检测算法或用于进行扩增实境应用程序的功能。其它实例包含变换功能、用于射线跟踪的功能,或多种其它功能。
内核包括经分组成工作组的个别工作项(例如,GPU中的基本工作单元)。在GPU经实施以处理图像(例如,视频数据帧、计算机产生的图形图像、静态图像等)的实例中,输入数据为图像,且工作项经配置以分析或修改图像的像素。可将多个工作项组织成工作组(例如,一组工作项)。因此,在图像处理实例中,工作组可包含与图像中的特定像素群组相关的指令。
当执行内核时,GPU将与工作组相关联的输入数据载入到SP的本地存储器中,之后SP可执行工作组。通常,当GPU执行内核时,GPU在不识别或控制哪一SP执行特定工作组的情况下将内核的工作组指派给SP。举例来说,GPU可包含按固定模式将工作组分配到SP的硬件,所述固定模式可不由GPU应用程序开发者(例如,计算机程序员)配置。在此实例中,通过均匀地分配及执行与特定内核相关联的所有工作组,之后继续移到下一个内核,GPU按顺序执行具有多个内核的应用程序。
工作组数据通常无法在SP之间共享。举例来说,SP通常为GPU内的离散且物理上分离的单元,且GPU应用程序开发者不控制哪一SP执行特定工作组。因此,在具有处理相同或实质上相同的输入数据的多个内核的应用程序中,可需要将与特定工作组相关联的输入数据载入到不同SP的本地存储器中。举例来说,在无能力控制GPU的哪一SP执行特定内核的特定工作组的情况下,具有与第二内核的工作组相同的输入数据的第一内核的工作组可由GPU的不同SP处理。
本发明的方面涉及产生及处理内核及工作组执行次序。内核及工作组执行次序支持与GPU的SP相关联的本地存储器资源的管理。举例来说,由GPU执行的内核及工作组执行次序允许存储于SP本地存储器中的数据由不同内核的工作组共享。内核及工作组执行次序可被称作“指令流”。指令流将工作组与内核系结或实际上连结在一起,使得与一个内核的一个工作组相关联的输入数据可使用单个SP由多个其它内核共享及连续执行。通过产生指令流,输入数据能够保留在本地SP存储器中,且可能可用于多个内核的工作组。产生指令流减少存储器带宽消耗以及SP算术逻辑单元(ALU)操作,这是因为ALU操作对于多次提取相同数据而言是不必要的。
在一些实例中,当GPU正执行具有处理相同或实质上相同的输入数据的多个内核的应用程序时,内核及工作组执行次序为有用的。在一个实例实施方案中,GPU可经实施以处理图像(例如,视频数据帧、计算机产生的图形图像、静态图像等)。在此实例中,工作项可对应于与图像的特定像素相关的指令。可将多个工作项组织成包含与图像的特定像素群组相关的指令的工作组。当处理与像素群组相关联的工作组时,GPU将与像素群组相关联的图像数据载入到SP的本地存储器中。
在无能力控制GPU的哪一SP执行特定工作组的情况下,在图像处理实例中,连续执行多个内核可导致由不同SP处理相同的输入图像区域。举例来说,为了执行第一内核,GPU将与整个图像相关联的数据一次一个工作组地载入到GPU的SP的本地存储器中以用于执行。为了在执行第一内核之后执行第二内核,GPU将相同图像数据重新载入到GPU的SP的本地存储器中以用于执行。因此,将输入图像数据载入到本地SP存储器中许多次,其中每一内核一次。整个图像的SP本地存储器输入带宽消耗大致等于图像数据大小乘以内核的数目(例如,具有3个内核的用于分析64MB图像的程序导致3x64MB或192MB的带宽消耗)。在内核与其经执行的工作组之间无任何输入数据共享的情况下,消耗相对较大的存储器带宽量。
在图像处理实例中,产生及执行指令流允许与图像的特定部分相关联的数据载入到特定SP的本地存储器资源中一次且用多个内核执行。提供具有三个内核(例如,第一内核、第二内核及第三内核)的实例程序。将与第一内核的第一工作组相关联的数据载入到特定SP的本地存储器中,且由SP执行第一工作组。另外,提供包含内核及工作组执行次序的指令流,内核及工作组执行次序指示相同SP随后执行第二内核的第一工作组,接着是第三内核的第一工作组。因此,不需要在执行第二内核及第三内核之前将与第一工作组相关联的图像数据载入到特定SP的本地存储器中。替代地,第二内核及第三内核使用先前针对第一内核载入的输入数据。以此方式,可减少存储器带宽消耗,这是因为与输入图像的特定区域相关联的数据仅需载入到本地SP存储器中一次且可用多个内核处理。在上文提供的三内核实例中,存储器带宽消耗减少三分之二。
可以多种方式定义指令流。根据一些方面,用户识别将从利用指令流中受益的候选内核。举例来说,用户可识别多次利用相同输入数据的内核。利用指令流可通过减少输入数据需要载入到本地存储器资源中的次数,帮助管理SP的本地存储器资源。
在识别候选者之后,用户可在由GPU执行的程序中定义指令流。举例来说,GPU应用程序编程通常由应用程序开发者(例如,计算机程序员)用应用程序接口(API)来执行,所述API提供可运行于多个平台、操作系统及硬件上的标准软件接口。API的实例包含开放式图形库(“OpenGL”,版本4.1于2010年7月26号发布且公开可用)、统一计算设备架构(由NVIDIA公司开发的“CUDA”,版本3.2于2010年9月17号发布)、及DirectX(由微软公司开发,版本11于2009年10月27号发布)。一般来说,API包含由相关联的硬件执行的一组预定标准化命令。API命令允许用户指导GPU的硬件组件执行命令而无关于硬件组件的细节的用户知识。
本发明的方面涉及允许用户定义指令流的一个或一个以上API命令。举例来说,可在设计环境中开发及产生一个或一个以上API命令。API命令接着可包含于API(例如,上文所描述的API)中,作为用于API的用户(例如,计算机程序员)的预配置选项。
用户可实施预配置指令流API命令以指定应用程序中的将在应用程序的开发及译码期间由GPU执行的指令流。举例来说,指令流API命令允许用户指定来自将由特定SP按顺序处理的多内核应用程序的不同内核的指令(例如,一个或一个以上工作组)。在执行包含指令流标号的应用程序之后,GPU便根据所接收的标号将指令(例如,不同内核的工作组)投送到GPU的SP。
在另一实例中,自动化系统可经实施以产生指令流。举例来说,例如编译器程序等程序可自动地产生用于应用程序的指令流,所述应用程序用多个内核重复处理相同输入数据。在此实例中,程序可分割每一内核的指令,使得每一指令群组对应于预定量的输入数据(例如,指令的工作组)。程序接着可通过连结来自不同内核的指令群组以使得与一个内核的一个指令群组相关联的输入数据可使用单个SP由多个其它内核共享及连续执行而产生指令流。
在非限制性图像处理实例中,GPU应用程序开发者可将输入图像及用于处理所述图像的具有三个内核的应用程序提供给产生程序的指令流。产生程序的指令流可基于图像的预定义空间区域自动地产生指令流。举例来说,产生程序的指令流可将三个内核中的每一者的指令分割成指令群组,其中每一指令群组对应于输入图像的预定义区域。产生程序的指令流接着可通过连结与相同输入图像区域相关联的内核中的每一者的指令群组而产生指令流。
举例来说,例如编译器程序或其它开发/分析程序等程序可识别将从实施指令流中受益的候选内核。举例来说,程序可监视存储器存取模式,且识别由一个以上内核使用的数据。在此实例中,程序可监视且记录与具有多个内核的应用程序的工作组相关联的读取/写入存取模式。在记录之后,程序可检测每一内核的相应的工作组的输入/输出相依性。即,程序可确定多个内核应用程序的哪些工作组利用相同输入数据。基于此数据共享信息,指令流标号可插入到应用程序中,其促进来自多内核应用程序的不同内核的工作组由特定SP按顺序处理。举例来说,代码可插入到应用程序中,其指导GPU执行来自不同内核的工作组,所述不同内核共享将由相同SP按顺序执行的相同输入数据。
用于识别候选内核且向指令流指定不同内核的工作组的程序可在应用程序开发期间执行或在GPU应用程序执行期间“在运作中”。举例来说,根据一些方面,GPU应用程序开发者可实施用于识别候选内核且向指令流指定不同内核的工作组的程序。所开发的GPU应用程序接着可包含将由GPU执行的指令流标号。在另一实例中,计算装置的主机处理器或GPU可实施在执行GPU应用程序时“在运作中”的用于识别候选内核且向指令流指定不同内核的工作组的程序。
图1为说明可经配置以实施本发明的方面的计算装置20的框图。如图1中所示,计算装置20包含主机处理器24、存储装置28、存储器32、网络模块36、用户接口40及显示器44。计算装置20还包含图形处理单元(GPU)48。
在一些实例中,计算装置20可包含或为便携式计算装置(例如,移动电话、上网本、膝上型计算机、平板装置、数字媒体播放器、游戏装置或其它便携式计算装置)的一部分。或者,计算装置20可被配置为桌上型计算机或其它固定计算装置。计算装置20可包含图1中出于清楚起见而未展示的额外组件。举例来说,计算装置20可包含用于在计算装置20的组件之间传送数据的一个或一个以上通信桥。此外,图1中所示的计算装置20的组件在计算装置20的每一实例中可能并非必要的。举例来说,用户接口40及显示器44可在计算装置20外部,例如在计算装置20为桌上型计算机的实例中。
主机处理器24可包含以下各者中的任何一者或一者以上:微处理器、控制器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或等效离散或集成逻辑电路。另外,在本发明中,归于主机处理器24的功能可体现为软件、固件、硬件或其任何组合。
主机处理器24处理供在计算装置20内执行的指令。主机处理器24可能够处理存储于存储装置28上的指令或存储于存储器32中的指令。实例应用程序包含用于处理可视图像(例如,过滤图像,针对预定义特征分析图像等)的应用程序。主机处理器24可基于用户经由用户接口40进行的选择执行一个或一个以上应用程序。在一些实例中,主机处理器24可在无用户交互的情况下执行一个或一个以上应用程序。
根据本发明的一些方面,且如下文关于GPU48更详细所描述,主机处理器24可与GPU48合作以执行与一个或一个以上应用程序相关联的各种任务。举例来说,主机处理器24可初始化应用程序的执行,且将与应用程序相关联的某些处理功能推卸或委任给GPU48。在实例中,主机处理器24可初始化图像处理应用程序的执行,且将与应用程序相关联的某些处理功能推卸给GPU48。
存储装置28可包含一个或一个以上计算机可读存储媒体。存储装置28可经配置以用于长期存储信息。在一些实例中,存储装置28可包含非易失性存储元件。此些非易失性存储元件的实例可包含磁性硬盘、光盘、软盘、快闪存储器或电可编程存储器(EPROM)或电可擦除且可编程(EEPROM)存储器的形式。在一些实例中,存储装置28可被视为非暂时性存储媒体。术语“非暂时性”可指示存储媒体并不以载波或传播信号体现。然而,术语“非暂时性”不应被解释为意谓存储装置28为不可移的。作为一个实例,存储装置28可从计算装置20中移除,且移动到另一装置。作为另一实例,实质上类似于存储装置28的存储装置可插入到计算装置20中。
存储装置28可存储用于由主机处理器24或GPU48执行一个或一个以上应用程序的指令。存储装置28还可存储用于由主机处理器24或GPU48使用的数据。举例来说,存储装置28可存储用于由主机处理器24或GPU48处理的图像数据。
存储器32可经配置以存储计算装置20在操作期间的信息。在一些实例中,存储器32为暂时存储器,意谓存储器32的主要目的不是长期存储。在一些实例中,存储器32可描述为计算机可读存储媒体。因此,尽管存储可随时间而改变的数据,存储器32还可被视为“非暂时性的”。在一些实例中,存储器32还可描述为易失性存储器,意谓当关掉计算机时存储器32并不维持所存储的内容。易失性存储器的实例包含随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)及现有技术中已知的其它形式的易失性存储器。
在一些实例中,存储器32可用以存储用于由主机处理器24或GPU48执行的程序指令。存储器32可由运行于计算装置20上的软件或应用程序使用以在程序执行期间暂时地存储信息。因而,存储器32可由计算装置20的其它组件(例如,主机处理器24及GPU48)存取。
计算装置20可利用网络模块36经由一个或一个以上网络(例如,一个或一个以上无线网络)与外部装置通信。网络模块36可为例如以太网卡等网络接口卡、光学收发器、射频收发器或可发送及接收信息的任何其它类型的装置。在一些实例中,计算装置20可利用网络模块36与外部装置(例如,服务器、移动电话或其它网络计算装置)无线地通信。
计算装置20还包含用户接口40。用户接口40的实例包含,但不限于,跟踪球、鼠标、键盘及其它类型的输入装置。用户接口40还可包含作为显示器44的一部分而并入的触敏式屏幕。显示器44可包括液晶显示器(LCD)、有机发光二级管(OLED)显示器、等离子体显示器或另一类型的显示装置。
计算装置20的GPU48可为具有用于执行GPU应用程序的固定功能且可编程组件的专用硬件单元。GPU48还可包含DSP、通用微处理器、ASIC、FPGA或其它等效集成或离散逻辑电路。GPU48还可包含例如专用存储器等其它组件,如关于图4更详细所描述。此外,尽管在图1中展示为分离组件,但在一些实例中,GPU48可形成为主机处理器24的部分。GPU48可经配置以利用根据多种应用程序编程接口(API)的处理技术。举例来说,用户可使用可运行于多个平台、操作系统及硬件上的标准软件接口来对将由GPU48执行的应用程序进行编程。在一些实例中,GPU48可经配置以利用使用OpenCL、CUDA或DirectX API集合(如上文所描述)产生的应用程序。
根据一些实例,GPU48可实施为通用图形处理单元(GPGPU)。举例来说,GPU48可进行传统上由主机处理器24进行的多种通用计算功能。实例包含多种图像处理功能,包含视频解码及后处理(例如,解块、噪声减少、色彩校正等)及其它专用图像处理功能(例如,面部检测/辨识、模式辨识、小波变换等)。在一些实例中,GPU48可与主机处理器24合作以执行应用程序。举例来说,主机处理器24可通过将用于由GPU48执行的指令提供给GPU48,将某些功能推卸给GPU48。
当实施为GPGPU时,GPU48执行本文中被称作内核的着色器程序。内核可由用户使用API(例如,上文所描述的实例API)来定义。内核可包括经分组成工作组的个别工作项(例如,GPU中的基本工作单元)。
根据本发明的一些方面,GPU48接收且执行在本文中被称作指令流的内核及工作组执行次序。GPU48可使用内核及工作组执行次序来管理与GPU48的SP(例如,如(例如)关于图4所展示及描述)相关联的本地存储器资源。举例来说,GPU48可使用内核及工作组执行次序来与不同内核的工作组共享存储于SP本地存储器中的数据。
下图中提供的某些实例可指执行工作项及工作组以执行图像处理应用程序的GPU。举例来说,工作项及工作组在下文中可描述为与图像(例如,视频数据帧)的像素相关联。然而,应理解,GPU可经实施以进行除了对多种输入数据的图像处理功能之外的多种功能(例如,从并行处理中受益的任何功能及数据集)。因此,例如,下文关于指令流及工作组之间的存储器共享所描述的实例及方面可由对多种其它输入数据集执行多种其它功能的GPU进行。
图2为说明具有图像数据的实例图像49的框图,所述图像数据具有用于处理图像49的相关联的指令。指令表示为划分成多个工作组50A到50P(统称为工作组50),其中每一工作组包含多个工作项52。指令可由GPU(例如,图1中所示的GPU48)执行。在图2中所示的实例中,将用于处理图像49的指令划分成16个工作组50,且将每一工作组50划分成64个分离工作项52,但其它划分是可能的。
在图2中所示的实例中,图像49为正方形、大致16兆字节(MB)的图像,其包含1024个像素。工作项52中的每一者表示可由GPU48执行的基本工作单元。在一些实例中,每一工作项52包含可与图像49的特定像素相关的指令。因此,当GPU48执行工作项52时,图像49的对应像素可得到处理(例如,根据指令来分析或改变)。可将工作项52组织成包含与图像49的特定像素群组相关的指令的工作组50。当处理工作组50时,可将与和工作组50相关联的特定像素群组相关的图像数据载入到SP的本地存储器资源(如(例如)下文关于图4所展示及描述)。
关于图2所描述的像素数据、工作项与工作组之间的关系仅为可能的指令结构的一个实例。在其它实例中,工作项可与图像49的一个以上或一个以下像素相关。
图3为说明呈可由GPU(例如,图1中所示的GPU48)执行的三个内核(例如,第一内核56、第二内核57及第三内核58)的配置的工作组的框图。再次,可执行每一内核以执行与给定应用程序相关的特定功能。在一些实例中,内核56到58可定义色彩校正算法、人脸检测算法、模式辨识算法、扩增实境应用程序、多种算法应用程序(例如,小波变换、傅里叶变换等)或多种其它应用程序的功能。仅出于说明的目的,关于图1中所示的实例GPU48及图2中所示的实例图像49描述图3。
GPU48可执行内核56到58以对图像(例如,图2中所示的图像49)进行特定任务。举例来说,GPU48可实施为GPGPU以进行多种功能,例如人脸检测/辨识、模式辨识及适合用于并行处理(例如,同时处理一个以上指令)的许多其它功能。作为简化非限制性实例而提供,内核56到58可实施于人脸检测应用程序中。在此实例中,GPU48可实施内核56到58以检测图像49中的一个或一个以上人脸。内核56到58中的每一者可经配置以执行特定人脸检测相关功能。此些内核56到58可被称作“分类器”。即,内核56到58将像素分类为具有(或不具有)特定预定义特征。内核56到58可包含已使用数个训练图像创建的数学公式。举例来说,内核56到58可包含已在测试环境中用数个预定义图像开发的数学公式。
在图3中所示的实例中,GPU48可连续地执行内核56到58以确定每一像素是否包含内核56到58中所陈述的预定义性质。即,当由GPU48执行时,每一内核56到58可传回布尔值,所述布尔值可用以识别与人脸相关联的预定义性质。如果某一像素展现出内核56到58中所陈述的所有预定义性质(例如,与像素相关联的布尔结果满足某一预定义准则),那么所述像素被视为候选人脸像素。如果某一像素未展现出内核56到58中所陈述的预定义性质(例如,与像素相关联的布尔结果不满足某一预定义准则),那么所述像素被排除视为人脸像素。
在图3的图像处理实例中,与图像49相关联的数据被处理三次,对于每一内核56到58处理一次。举例来说,内核56到58的工作组可对应于图像49的相同输入图像区域。内核56到58中的每一者的类似编号的工作组可包含将对图像49的相同输入图像区域进行的一组指令。
本发明的方面涉及将内核56到58的类似编号的工作组系结到指令流中以用于由GPU48处理的指令的产生。举例来说,用户(例如,计算机或应用程序员)或程序可创建指令流,所述指令流指导GPU48使用相同SP执行内核56的工作组0,接着是内核57的工作组0,且接着是内核58的工作组0。以此方式,GPU48可将对应于工作组0的图像49的输入区域载入到GPU48的着色器处理器(SP)的本地存储器资源中(例如,如(例如)关于图4所展示及描述),且使用内核56到58来按顺序处理所述输入图像区域。
在一些实例中,用户(例如,计算机或应用程序员)可在开发内核56到58时使用预配置API命令来定义指令流,所述指令流包含内核56到58的标号。举例来说,用户可实施预配置指令流API命令来向将由GPU48执行的指令流指定内核56到58的工作组。在执行与内核56到58相关联的指令流标号之后,GPU48将内核56到58的工作组投送到GPU48的某一SP。
在另一实例中,自动化系统可经实施以产生包含内核56到58的工作组标号的指令流。举例来说,编译器程序或其它程序(例如,从经编译的低级机器汇编代码跟踪存储器存取模式的程序)可监视或分析存储器存取模式且识别与工作组(例如,工作组0)相关联的所述数据由内核56到58存取多次。程序接着可向指令流指定工作组,使得由GPU48的SP按顺序处理所述工作组。在执行与内核56到58相关联的指令流标号之后,GPU48将内核56到58的工作组投送到GPU48的某一SP。
图4为说明可经配置以进行本发明的方面的GPU60的框图。在一些实例中,GPU60可与图1中所示的GPU48类似地或相同地经配置。在图4中所示的实例中,GPU60包含存储器72、分别具有着色器处理器存储器78A到78C(统称为SP存储器78)的着色器处理器76A到76C(统称为SP76),及定序器模块82。
在其它实例中,GPU60可包含图4中出于清楚起见而未展示的其它组件。举例来说,GPU60还可包含与分析及呈现图像相关的多种其它模块,例如光栅处理器(rasterizer)、纹理单元、一个或一个以上缓冲器或其它GPU组件。另外,GPU60可包含比图4中所示的组件多或少的组件。举例来说,GPU60在图4中展示为包含三个SP76。然而,在其它实例中,GPU60可包含比图4中所示的SP多或少的SP。
在一些实例中,GPU存储器72可类似于图1中所示的存储器32。举例来说,GPU存储器72可为暂时计算机可读存储媒体。GPU存储器72的实例包含随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)及现有技术中已知的其它形式的存储器。在GPU60经形成为另一处理器的部分(例如,图1中所示的主机处理器24)的实例中,GPU存储器72可由除GPU60之外的组件存取。
GPU存储器72可经配置为GPU60的全局存储器。举例来说,GPU存储器72可配置以在操作期间将指令及信息存储于GPU60内(例如,用于由GPU60处理的图像数据及指令)。GPU存储器72还可经配置以存储已由GPU60处理的数据的结果。在一些实例中,GPU存储器72与在GPU60外部的计算装置组件介面连接。举例来说,并入有GPU60的计算装置的组件最初可将数据(例如,一个或一个以上视频数据帧)传递到GPU存储器78以用于由GPU60处理。GPU60接着处理数据且将结果存储到GPU存储器72。随后可从GPU存储器72将结果读取到计算装置的另一组件。
SP76可经配置为处理组件的可编程管线。在一些实例中,SP76可被称作“统一着色器”,因为SP76可执行几何形状、顶点或像素着色操作以呈现图形。SP76还可用于GPGPU应用中以用于执行通用计算。举例来说,SP76可经实施以分析或以其它方式处理图像,例如图2中所示的图像49。SP76可包含图4中未特定展示的一个或一个以上组件,例如用于提取及解码指令的组件及用于进行算术计算的一个或一个以上算术逻辑单元(“ALU”)。SP76还包含一个或一个以上存储器、高速缓冲存储器或寄存器,例如SP存储器78。
SP存储器78可经配置为用于存储由SP76处理的数据的寄存器或数据高速缓冲存储器。在一些实例中,SP存储器78为SP76的本地存储器。举例来说,与全局GPU存储器72相比,SP存储器78可相对较小,且在执行之前存储与一个或一个以上工作组相关联的数据。SP存储器78可具有与GPU存储器72相比相对较低的时延。举例来说,SP存储器78可由SP76相对较快地存取。然而,与从全局存储器72到SP存储器78的数据传送相关联的时延通常大得多。举例来说,从全局存储器72到SP存储器78的数据传送可消耗多个时钟周期,从而创建瓶颈且使GPU60的总体性能变缓。
SP存储器78可在GPU60正在操作时与GPU存储器72交换数据。举例来说,GPU60将与一个或一个以上工作组相关联的数据从GPU存储器72发送到SP存储器78。一旦存储于SP存储器78中,SP76并行操作以存取且处理存储于分离SP存储器78中的数据。在执行所述数据之后,SP76便将结果传回到GPU存储器72。一般来说,SP存储器78与SP76之间的存储器带宽大于GPU存储器72与SP76之间的存储器带宽。因此,SP76可通常比SP76可从GPU存储器72读取数据更快地从相关联的SP存储器78读取数据。即,GPU存储器72通常展现出比与SP存储器78相关联的时延高的时延。因此,数据在由SP76执行之前被传送到SP存储器78可能是有益的。
定序器模块82控制GPU60内的指令及数据流。定序器模块82可包括用于将工作项、工作组及相关联的数据分配到SP存储器78以用于由SP76执行的固定功能及可编程组件的组合。因此,定序器模块82管理GPU存储器72与SP76之间的数据传送。仅出于实例的目的,关于相对于图3所展示及描述的应用程序来描述定序器模块82的工作组分配。
定序器模块82可按固定分配模式分配工作组而不考虑哪些工作组是由SP76的特定SP执行。举例来说,为了处理具有多个内核56到68的实例应用程序54(图3中所示),定序器模块82可将工作组均匀地分配到GPU60的所有SP76。另外,如下文关于图5更详细所描述,定序器模块82可将内核的所有工作组分配到SP76,之后继续移到下一个内核。举例来说,定序器模块82可将内核56的工作组0分配到SP76A,将内核56的工作组1分配到SP76B,将内核56的工作组2分配到SP76C等等,直到内核56已由SP76处理为止。
在其它实例中,根据本发明的方面,定序器模块82可接收且执行内核及工作组执行次序。举例来说,定序器模块82可接收定义指示定序器模块82将内核的工作组分配到SP76的特定SP的指令流的指令。指令流将不同内核的工作组系结在一起,使得其由SP76的相同SP处理。指令流提供一种方式来管理SP存储器78的资源。举例来说,通过进行定义指令流的指令,定序器模块82允许与一个工作组相关联的输入数据由多个其它内核的工作组共享及连续执行。
定序器模块82可经实施以在GPU60正执行具有处理相同或实质上相同的输入数据的多个内核的应用程序时进行定义指令流的指令。举例来说,如关于图3所描述,应用程序54包含三个内核56到58,每一内核具有多个相关联的工作组。内核56的工作组0对应于与内核57的工作组0及内核58的工作组0相同的输入数据。因此,定序器模块82可按顺序将内核56到58的工作组0分配到SP76A。另外,定序器模块82可将内核56到58的工作组1分配到SP76B等等,直到所有内核的所述工作组已由SP76执行为止。
以此方式,定序器模块82可管理SP存储器78的本地存储器资源。举例来说,在执行内核56的工作组0之前,GPU60将与内核56的工作组0相关联的输入数据从GPU存储器72传送到SP存储器78A。在执行内核56的工作组0之后,且代替提取用于SP存储器78A的新数据,定序器模块82指示SP76A执行内核57的工作组0,接着是内核58的工作组0。工作组0的输入数据在内核56到58当中是相同的,因此与工作组0相关联的数据可保留在SP存储器78A中,且由所有三个内核56到58的工作组0共享。
与按固定分配模式分配工作组的系统相比较,执行指令流且在不同内核的工作组之间共享数据可提供本地存储器带宽节省。举例来说,在不同内核的工作组之间共享数据允许在GPU存储器72与SP存储器78之间传送较少的数据。在图3中所示的三个内核实例中,GPU存储器72与SP存储器78之间的存储器带宽消耗减少三分之二。GPU60可将与工作组(例如,工作组0)相关联的数据传送到本地SP存储器一次且在所有三个内核56到58之间共享数据,而不是将与所述工作组相关联的数据传送到本地SP存储器三次(例如,对于每一内核传送一次)。
根据本发明的一些实例,与执行指令流相关联的本地存储器带宽节省还可提供时间节省。举例来说,在SP可执行与工作组相关联的相同数目的计算以执行给定程序(例如,程序54)时,可实现时间节省,这是因为在GPU存储器72与SP存储器78之间可传送较少的数据。如上文所描述,GPU存储器72与SP存储器78之间的数据传送可为相对时间密集型过程,所述时间密集型过程将瓶颈引入到执行程序54的过程中。因此,减少在GPU存储器72与SP存储器78之间需要传送的数据量还可减少与GPU存储器72与SP存储器78之间的数据传送相关联的瓶颈。
由定序器模块82接收的定义指令流的指令可由用户产生或可自动地产生(例如,由编译器程序)。举例来说,用户(例如,软件开发者)可使用包含一个或一个以上指令流命令的API来定义且实施指令流。在接收到具有指令流命令的应用程序之后,定序器模块82执行指令流命令以管理与SP76相关联的本地存储器资源。
可由计算装置的主机处理器(例如,图1中所示的主机处理器24)将定义指令流的指令发射到定序器模块82。在其中GPU60为相异装置(例如,不包含于具有主机处理器的计算装置中)的实例中,另一处理组件可负责将含有指令流的指令发射到定序器模块82。
图5为说明定序器模块140的实例的框图,定序器模块140将第一内核142、第二内核144及第三内核146的工作组分配到具有第一SP存储器156A的第一SP152A、具有第二SP存储器156B的第二SP152B及具有第三SP存储器156C的第三SP152C(统称为SP152及SP存储器156)。根据本发明的一些方面,定序器模块140及SP152可并入于GPU中,例如图1中所示的GPU48或图4中所示的GPU60。
定序器模块140及SP152可与关于图4所展示及描述的定序器模块82及SP76类似地或相同地配置。举例来说,定序器模块140可负责控制GPU内的指令及数据流。定序器模块140可包含用于将工作项及工作组分配到SP152及相关联的SP存储器156的固定功能及可编程组件的组合。
定序器模块140按固定分配模式分配内核142到146的工作组,而不控制不同内核的工作组的特定标号。举例来说,定序器模块140通过以下方式来分配第一内核142的工作组,按顺序将第一工作组WG0分配到SP152A(如由线160所表示),将第二工作组WG1分配到SP152B(如由线161所表示),将第三工作组WG2分配到SP152C(如由线162所表示)等等,直到已分配且执行第一内核142为止。定序器模块140接着继续移到第二内核144及第三内核146,且将所述工作组分配到SP152。举例来说,定序器模块140可按固定分配模式继续,且可将第二内核144的所有工作组分配在SP152当中。定序器模块140接着可继续进行到第三内核146,且将第三内核146的所有工作组分配在SP152当中。
在无能力控制哪一SP152执行特定工作组的情况下,可需要将与工作组相关联的数据载入到SP存储器156中的一者以上中。如图5的实例中所示,遵循固定分配模式,在处理整个第一内核142之后,定序器模块140将第二内核144的工作组WG0分配到SP152B(线161)。因此,必须将与WG0相关联的输入数据载入到SP存储器156B中。另外,在处理整个第二内核144之后,归因于分配模式的固定性质,定序器模块140将第三内核146的工作组WG0分配到SP152C(线162)。因此,将与WG0相关联的输入数据载入到SP存储器156C中。
如上文关于图4所描述,通常必须在SP可执行工作组之前将与特定工作组相关联的数据载入到SP的本地存储器中。在无能力控制哪一SP152执行特定工作组的情况下,无法在内核之间共享与工作组相关联的数据。在图5中所示的实例中,必须在由SP152A到152C处理之前在不同时间将与工作组WG0相关联的数据载入到SP存储器156A、156B及156C中的每一者中。因此,SP152的存储器带宽等于用于每一内核的输入数据的三倍。
图6为说明定序器模块180的实例的框图,定序器模块180将第一内核184、第二内核186及第三内核188的工作组分配到具有第一SP存储器204A的第一SP200A、具有第二SP存储器204B的第二SP200B及具有第三SP存储器204C的第三SP200C(统称为SP200及SP存储器204)。根据本发明的一些方面,定序器模块180及SP200可并入于GPU中,例如图1中所示的GPU48或图4中所示的GPU60。
定序器模块180及SP200可与关于图4所展示及描述的定序器模块82及SP76类似地或相同地经配置。举例来说,定序器模块180可负责控制GPU内的指令及数据流。定序器模块180可包含用于将工作项及工作组分配到SP存储器204以用于由SP200执行的固定功能及可编程组件的组合。
根据本发明的一些方面,定序器模块82根据向指令流指定工作组的预定义指令来分配内核184到188的工作组。举例来说,定序器模块82可经配置以接收将不同内核的工作组系结在一起以使得其由相同SP执行的指令流。因此,定序器模块180可经配置以基于将内核的工作组系结在一起的指令流分配工作组,而不是按固定模式(如(例如)图5中所示)分配内核184到188的工作组。
在图6中所示的实例中,定序器模块180执行将内核184的工作组WG0系结到内核186的工作组WG0且系结到内核188的工作组WG0的指令流。内核184到186的工作组WG0皆与相同输入数据相关联。通过执行指令流,使用SP200A按顺序处理内核184到188的工作组WG0。因此,与WG0相关联的输入数据(其可在内核184到188当中是相同的)可在内核184到188的工作组WG0之间共享。举例来说,与工作组WG0相关联的数据可在处理内核184的WG0时被载入到SP存储器204A中,且由内核186的WG0及内核188的WG0共享。
将数据保留在SP存储器204A中且在多个工作组之间共享所述数据提供对SP存储器204A的有效管理。举例来说,所述数据可保留于SP存储器204A中且由多个内核的多个工作组共享,而不是必须在工作组的每一次执行之后提取新数据且将新数据传送到SP存储器204A中。因此,可减少本地存储器带宽消耗。在图6中所示的三内核实例中,与图5中所示的三内核实例相比较,本地存储器带宽消耗减少三分之二。
根据本发明的一些实例,与执行指令流相关联的本地存储器带宽节省还提供时间节省。举例来说,在SP200可执行与不利用指令流的系统相同数目的与工作组相关联的计算以执行给定程序时,可实现时间节省,这是因为必须在GPU全局存储器与SP存储器204之间传送较少的数据。GPU全局存储器与SP存储器204之间的数据传送可为相对时间密集型过程,所述时间密集型过程将瓶颈引入到执行内核184到188的过程中。因此,减少在GPU全局存储器与SP存储器204之间传送所需的数据量还减少与GPU全局存储器与SP存储器204之间的数据传送相关联的瓶颈。
图7为说明将执行次序流240、244及248指派给具有第一SP存储器256A的第一SP252A、具有第二SP存储器256B的第二SP252B及具有第三SP存储器256C的第三SP252C(统称为SP252及SP存储器256)的实例的框图。根据本发明的一些方面,SP252可并入于GPU中,例如图1中所示的GPU48或图4中所示的GPU60。
图7中所示的实例包含执行与三个内核相关联的工作组的三个SP252。然而,应理解,执行次序流可实施于具有比图7中所示的SP多或少的SP(例如,2个SP、10个SP、100个SP)的系统中。另外,执行次序流可将比图7中所示的三个多或少的工作组及内核连结在一起。
可由定序器模块(例如,图4中所示的定序器模块82)将执行次序流或指令流240到248指派给SP252。指令流240到248实际上将不同内核的工作组系结在一起,使得其由相同SP处理。举例来说,如图7中所示,指令流240将内核1的工作组0连结到内核2的工作组0及内核3的工作组0。同样,指令流244将内核1的工作组1连结到内核2的工作组1及内核3的工作组1,且指令流248将内核1的工作组2连结到内核2的工作组2及内核3的工作组2。
在图7中所示的实例中,与相似编号的工作组相关联的输入数据中的至少一些是一致的。举例来说,与内核1的工作组0相关联的输入数据与和内核2的工作组0及内核3的工作组0相关联的输入数据相同,或与和内核2的工作组0及内核3的工作组0相关联的输入数据具有至少某一重叠。因此,SP252A可通过将与工作组0相关联的输入数据载入到SP存储器256A中及在执行内核1的工作组0、内核2的工作组0及内核3的工作组0时共享所述输入数据来执行指令流240。以此方式,执行指令流240减少在内核1、2及3的执行期间传送到SP存储器256A中及传送到SP存储器256A之外所需要的数据量。可针对SP252B及SP存储器256B且针对SP252C及SP存储器256C进行类似操作。
图8为说明产生及执行例如图7中所示的流240到248等执行次序(例如,“指令流”)的方法300的流程图。根据本发明的一些方面,方法300可由GPU进行,例如图1中所示的GPU48或图4中所示的GPU60。仅出于说明的目的,方法300的部分可描述为由图4中所示的实例GPU60进行。
如图8中所示,最初识别用于执行次序流的候选者(304)。根据一些方面,用户识别将从利用指令流中受益的候选内核。举例来说,用户可识别多次利用相同输入数据的内核。在另一实例中,例如编译器程序等程序可识别将从实施指令流中受益的候选内核。举例来说,编译器程序可监视存储器存取模式,且识别由一个以上内核使用的输入数据。当由程序的一个以上内核使用输入数据时,指令流可经实施以系结利用相同数据的工作组,使得由相同SP执行所述工作组。以此方式利用指令流可通过减少输入数据需要载入到本地存储器资源中的次数,帮助管理SP的本地存储器资源。举例来说,输入数据可被载入到SP的本地存储器中一次且在多个内核的多个工作组之间共享。
在已识别候选者之后,产生执行次序流标号(308)。用户可使用适用于包含指令流命令的API定义指令流。举例来说,例如OpenGL、CUDA、DirectX或用于创建GPU程序的任何其它API等API可适用于包含允许用户向指令流指定工作组及其相关联的内核的一个或一个以上命令。在另一实例中,例如编译器程序等程序可在识别重复的存储器存取模式之后自动地产生指令流。
在产生指令流之后,将执行次序标号发射到GPU(例如,GPU60)且由所述GPU接收(312)。在一些实例中,定序器模块82可接收定义包含一个或一个以上内核标号及一个或一个以上工作组标号的执行次序流的输入。可由计算装置的主机处理器(例如,图1中所示的主机处理器24)将指令流发射到定序器模块82。在GPU60为相异装置(例如,不包含于具有主机处理器的计算装置中)的实例中,另一处理组件可负责接收指令流,且将其发射到定序器模块82。
定序器模块82可通过将流指派给SP(例如,SP76)实施执行次序(316)。举例来说,定序器模块82可指派将由GPU60的相同SP执行的指令流中所指定的工作组。SP通过执行在执行次序中所指定的指令来执行指令流(320)。举例来说,SP按顺序执行在指令流中所指定的工作组。通过如此做,与在指令流中所指定的工作组相关联的输入数据可在指令流中所指定的工作组之间共享。执行指令流可减少在GPU存储器72与SP存储器78之间传送所需要的数据量,且减少执行特定程序所需要的总时间。
在上文所提供的实例中,指令流描述为将不同内核的工作组系结在一起以使得由相同SP连续地执行不同内核的工作组。以此方式将不同内核的工作组系结在一起辅助管理与SP相关联的存储器资源,这是因为与工作组相关联的数据可由多个内核共享。然而,应理解,术语“工作组”一般是指代指令群组。举例来说,“工作组”可在统一计算设备架构(由NVIDIA公司开发的“CUDA”,版本3.2于2010年9月17号发布)中被称作“线程块”。
还应理解,仅作为实例来提供工作组及内核标号。本发明的存储器管理方面可适用于GPU应用程序的其它配置。举例来说,其它GPU应用程序可包含单个相对较大“内核”,所述单个相对较大“内核”包含在执行期间使用相同输入数据超过一次的指令。在此实例中,本发明的方面仍可适用于管理存储器资源。尽管使用相同输入数据的指令属于相同内核,仍可创建将所述指令系结在一起的指令流。
在一个或一个以上实例中,所描述的功能可以硬件、硬件上执行的软件、硬件上执行的固件或其任何组合来实施。在一些实例中,存储于计算机可读媒体上的指令可致使硬件组件执行上文所描述的其相应的功能。计算机可读媒体可包含计算机数据存储媒体。数据存储媒体可以是可由一个或一个以上计算机或一个或一个以上处理器存取以检索用于实施本发明中所述的技术的指令、代码和/或数据结构的任何可用媒体。举例说明且并非限制,此些计算机可读媒体可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置,或其它磁性存储装置、快闪存储器,或可用于以指令或数据结构的形式进行或存储所要的程序代码且可被计算机存取的任何其它媒体。上述各者的组合也应包含在计算机可读媒体的范围内。
代码可由一个或一个以上处理器(例如,一个或一个以上DSP)、通用微处理器、ASIC、FPGA或其它等效集成或离散逻辑电路来执行。因此,如本文中所使用的术语“处理器”可指上述结构或适合于实施本文中所描述的技术的任一其它结构中的任一者。另外,在一些方面中,本文中所描述的功能性可提供在针对编码和解码而配置的专用硬件和/或软件模块中或并入在组合的编解码器中。并且,可将所述技术完全实施于一个或一个以上电路或逻辑元件中。
本发明的技术可实施在各种各样的装置或设备中,包含无线手持机、集成电路(IC)或IC的集合(例如,芯片集)。在本发明中描述各种组件、模块或单元是为了强调经配置以执行所揭示技术的装置的功能方面,而未必要求通过不同硬件单元来体现。而是,如上所述,各种单元可由互操作硬件单元(包含如上所述的一个或一个以上处理器)的集合与合适的软件和/或固件共同组合。
已描述了各种实例。这些及其它实例属于所附权利要求书的范围内。
Claims (29)
1.一种用图形处理单元GPU来处理数据的方法,所述方法包括:
接收定义着色器处理器的执行次序的输入,其中所述执行次序包括多个内核标号及多个工作组标号;
将所述多个工作组标号及所述多个内核标号中所识别的内核的工作组指派给所述着色器处理器;以及
通过所述着色器处理器执行所述多个工作组标号及所述多个内核标号中所识别的内核的所述工作组以处理输入数据。
2.根据权利要求1所述的方法,其中所述多个内核标号识别多个内核,且其中所述多个内核的每一内核定义由所述GPU实行的功能。
3.根据权利要求1所述的方法,其中所述多个工作组标号识别多个工作组,且其中所述多个工作组的每一工作组包括由所述GPU对输入数据执行的指令。
4.根据权利要求1所述的方法,其中接收定义所述执行次序的输入包括接收将第一内核的第一工作组连结到第二内核的第一工作组的标号,其中所述第一内核的所述第一工作组及所述第二内核的所述第一工作组与实质上相同的输入数据相关联。
5.根据权利要求4所述的方法,其中执行所述执行次序包括在所述第一内核的所述第一工作组之后由所述着色器处理器执行所述第二内核的所述第一工作组。
6.根据权利要求1所述的方法,其中将执行次序流执行包括在所述多个工作组标号中所识别的两个或两个以上工作组之间共享输入数据。
7.根据权利要求6所述的方法,其中在所述两个或两个以上工作组之间共享输入数据包括将所述输入数据保留于所述着色器处理器的本地存储器中以用于执行所述两个或两个以上工作组的第一工作组及所述两个或两个以上工作组的第二工作组。
8.根据权利要求1所述的方法,其进一步包括响应于用户输入而使用应用程序编程接口API产生定义所述执行次序的所述输入。
9.一种图形处理单元GPU,其包括:
定序器模块,其经配置以接收定义着色器处理器的执行次序的输入,其中所述执行次序包括多个内核标号及多个工作组标号;
其中所述定序器模块经配置以将所述多个工作组标号及所述多个内核标号中所识别的内核的工作组指派给所述着色器处理器;以及
其中所述着色器处理器经配置以执行所述多个工作组标号及所述多个内核标号中所识别的内核的所述工作组以处理输入数据。
10.根据权利要求9所述的GPU,其中所述多个内核标号识别多个内核,且其中所述多个内核的每一内核定义由所述GPU实行的功能。
11.根据权利要求9所述的GPU,其中所述多个工作组标号识别多个工作组,且其中所述多个工作组的每一工作组包括由所述GPU对输入数据执行的指令。
12.根据权利要求9所述的GPU,其中所述定序器模块经进一步配置以接收将第一内核的第一工作组连结到第二内核的第一工作组的标号,其中所述第一内核的所述第一工作组及所述第二内核的所述第一工作组与实质上相同的输入数据相关联。
13.根据权利要求12所述的GPU,其中所述着色器处理器经进一步配置以在所述第一内核的所述第一工作组之后执行所述第二内核的所述第一工作组。
14.根据权利要求9所述的GPU,其中所述着色器处理器进一步包括着色器处理器存储器,且所述着色器处理器经配置以存储与所述多个工作组标号中所识别的两个或两个以上工作组相关联的输入数据。
15.根据权利要求14所述的GPU,其中所述着色器处理器存储器经进一步配置以保留与所述两个或两个以上工作组相关联的所述所存储的输入数据,且在所述两个或两个以上工作组之间共享所述所存储的数据。
16.一种图形处理单元GPU,其包括:
用于接收定义着色器处理器的执行次序的输入的装置,其中所述执行次序包括多个内核标号及多个工作组标号;
用于将所述多个工作组标号及所述多个内核标号中所识别的内核的工作组指派给所述着色器处理器的装置;以及
用于执行所述多个工作组标号及所述多个内核标号中所识别的内核的所述工作组以处理输入数据的装置。
17.根据权利要求16所述的GPU,其中所述多个内核标号识别多个内核,且其中所述多个内核的每一内核定义由所述GPU实行的功能。
18.根据权利要求16所述的GPU,其中所述多个工作组标号识别多个工作组,且其中所述多个工作组的每一工作组包括由所述GPU对输入数据执行的指令。
19.根据权利要求16所述的GPU,其中所述用于接收输入的装置经进一步配置以接收将第一内核的第一工作组连结到第二内核的第一工作组的标号,其中所述第一内核的所述第一工作组及所述第二内核的所述第一工作组与实质上相同的输入数据相关联。
20.根据权利要求19所述的GPU,其中所述用于执行的装置经进一步配置以在所述第一内核的所述第一工作组之后执行所述第二内核的所述第一工作组。
21.根据权利要求16所述的GPU,其中所述用于执行的装置进一步包括用于存储与所述多个工作组标号中所识别的两个或两个以上工作组相关联的输入数据的装置。
22.根据权利要求21所述的GPU,其中所述用于存储输入数据的装置经进一步配置以保留与所述两个或两个以上工作组相关联的所述所存储的输入数据,且在所述两个或两个以上工作组之间共享所述所存储的数据。
23.一种用指令编码的计算机可读存储媒体,所述指令用于致使具有图形处理单元GPU的计算装置的一个或一个以上可编程处理器:
接收定义着色器处理器的执行次序的输入,其中所述执行次序包括多个内核标号及多个工作组标号;
将所述多个工作组标号及所述多个内核标号中所识别的内核的工作组指派给所述着色器处理器;以及
通过所述着色器处理器执行所述多个工作组标号及所述多个内核标号中所识别的内核的所述工作组以处理输入数据。
24.根据权利要求23所述的计算机可读存储媒体,其中所述多个内核标号识别多个内核,且其中所述多个内核的每一内核定义由所述GPU实行的功能。
25.根据权利要求23所述的计算机可读存储媒体,其中所述多个工作组标号识别多个工作组,且其中所述多个工作组的每一工作组包括由所述GPU对输入数据执行的指令。
26.根据权利要求23所述的计算机可读存储媒体,其进一步包括用于致使计算装置的一个或一个以上可编程处理器接收将第一内核的第一工作组连结到第二内核的第一工作组的标号的指令,其中所述第一内核的所述第一工作组及所述第二内核的所述第一工作组与实质上相同的输入数据相关联。
27.根据权利要求26所述的计算机可读存储媒体,其中执行所述执行次序包括在所述第一内核的所述第一工作组之后由所述着色器处理器执行所述第二内核的所述第一工作组。
28.根据权利要求23所述的计算机可读存储媒体,其中将执行次序流执行包括在所述多个工作组标号中所识别的两个或两个以上工作组之间共享输入数据。
29.根据权利要求28所述的计算机可读存储媒体,其中在所述两个或两个以上工作组之间共享输入数据包括将所述输入数据保留于所述着色器处理器的本地存储器中以用于执行所述两个或两个以上工作组的第一工作组及所述两个或两个以上工作组的第二工作组。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/164,615 US9092267B2 (en) | 2011-06-20 | 2011-06-20 | Memory sharing in graphics processing unit |
US13/164,615 | 2011-06-20 | ||
PCT/US2012/038659 WO2012177343A1 (en) | 2011-06-20 | 2012-05-18 | Memory sharing in graphics processing unit |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103608777A true CN103608777A (zh) | 2014-02-26 |
CN103608777B CN103608777B (zh) | 2017-05-10 |
Family
ID=46201818
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280029553.9A Expired - Fee Related CN103608777B (zh) | 2011-06-20 | 2012-05-18 | 图形处理单元中的存储器共享 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9092267B2 (zh) |
EP (1) | EP2721488B1 (zh) |
JP (1) | JP5752853B2 (zh) |
KR (1) | KR101590734B1 (zh) |
CN (1) | CN103608777B (zh) |
WO (1) | WO2012177343A1 (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106462426A (zh) * | 2014-05-30 | 2017-02-22 | 苹果公司 | 用于图形处理单元的组合计算任务 |
CN106462941A (zh) * | 2014-06-26 | 2017-02-22 | 高通股份有限公司 | Gpu中的共享寄存器的加载方案 |
CN107003934A (zh) * | 2014-12-08 | 2017-08-01 | 英特尔公司 | 改进共享本地存储器和系统全局存储器之间的存储器访问性能的装置和方法 |
CN108241508A (zh) * | 2016-12-27 | 2018-07-03 | 三星电子株式会社 | 处理OpenCL内核的方法及用于该方法的计算设备 |
CN109791507A (zh) * | 2016-10-21 | 2019-05-21 | 超威半导体公司 | 改进分布式gpus的数据局部性的机制 |
CN109964244A (zh) * | 2016-12-22 | 2019-07-02 | 苹果公司 | 用于图形处理的本地图像块 |
CN113034629A (zh) * | 2021-05-17 | 2021-06-25 | 腾讯科技(深圳)有限公司 | 图像处理方法、装置、计算机设备及存储介质 |
Families Citing this family (46)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8842122B2 (en) * | 2011-12-15 | 2014-09-23 | Qualcomm Incorporated | Graphics processing unit with command processor |
US9256915B2 (en) | 2012-01-27 | 2016-02-09 | Qualcomm Incorporated | Graphics processing unit buffer management |
US9009712B2 (en) * | 2012-03-16 | 2015-04-14 | Advanced Micro Devices, Inc. | GPU distributed work-item queuing |
US9286648B2 (en) * | 2012-08-03 | 2016-03-15 | Nadar Mariappan S | Zero communication block partitioning |
US20140122558A1 (en) * | 2012-10-29 | 2014-05-01 | Nvidia Corporation | Technique for offloading compute operations utilizing a low-latency data transmission protocol |
JP5971115B2 (ja) * | 2012-12-26 | 2016-08-17 | 富士通株式会社 | 情報処理プログラム、情報処理方法及び装置 |
US20140232733A1 (en) * | 2013-02-19 | 2014-08-21 | Jason Caulkins | Graphics Processing Unit Pre-Caching |
US9052740B2 (en) * | 2013-03-12 | 2015-06-09 | Qualcomm Incorporated | Adaptive data path for computer-vision applications |
US20140274243A1 (en) * | 2013-03-15 | 2014-09-18 | Colorado Seminary | Tailoring educational learning environments |
GB2533284B (en) * | 2014-12-11 | 2017-04-12 | Imagination Tech Ltd | Performing object detection |
US9749548B2 (en) | 2015-01-22 | 2017-08-29 | Google Inc. | Virtual linebuffers for image signal processors |
US10291813B2 (en) | 2015-04-23 | 2019-05-14 | Google Llc | Sheet generator for image processor |
US9965824B2 (en) | 2015-04-23 | 2018-05-08 | Google Llc | Architecture for high performance, power efficient, programmable image processing |
US9769356B2 (en) | 2015-04-23 | 2017-09-19 | Google Inc. | Two dimensional shift array for image processor |
US9772852B2 (en) | 2015-04-23 | 2017-09-26 | Google Inc. | Energy efficient processor core architecture for image processor |
US9756268B2 (en) | 2015-04-23 | 2017-09-05 | Google Inc. | Line buffer unit for image processor |
US9785423B2 (en) | 2015-04-23 | 2017-10-10 | Google Inc. | Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure |
US10095479B2 (en) | 2015-04-23 | 2018-10-09 | Google Llc | Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure |
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 |
GB2541179B (en) | 2015-07-31 | 2019-10-30 | Imagination Tech Ltd | Denoising filter |
US10313641B2 (en) | 2015-12-04 | 2019-06-04 | Google Llc | Shift register with reduced wiring complexity |
US9830150B2 (en) | 2015-12-04 | 2017-11-28 | Google Llc | Multi-functional execution lane for image processor |
US10204396B2 (en) | 2016-02-26 | 2019-02-12 | Google Llc | Compiler managed memory for image processor |
US10387988B2 (en) | 2016-02-26 | 2019-08-20 | Google Llc | Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform |
US10380969B2 (en) | 2016-02-28 | 2019-08-13 | Google Llc | Macro I/O unit for image processor |
US10838782B2 (en) * | 2016-05-24 | 2020-11-17 | Accenture Global Solutions Limited | Event abstractor |
US20180007302A1 (en) | 2016-07-01 | 2018-01-04 | Google Inc. | Block Operations For An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register |
US10546211B2 (en) | 2016-07-01 | 2020-01-28 | Google Llc | Convolutional neural network on programmable two dimensional image processor |
US20180005059A1 (en) | 2016-07-01 | 2018-01-04 | Google Inc. | Statistics Operations On Two Dimensional Image Processor |
US20180005346A1 (en) | 2016-07-01 | 2018-01-04 | Google Inc. | Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register |
US10552934B2 (en) | 2016-07-01 | 2020-02-04 | Intel Corporation | Reducing memory latency in graphics operations |
US10223822B2 (en) * | 2016-12-22 | 2019-03-05 | Apple Inc. | Mid-render compute for graphics processing |
US10367639B2 (en) | 2016-12-29 | 2019-07-30 | Intel Corporation | Graphics processor with encrypted kernels |
US10255105B2 (en) | 2017-04-11 | 2019-04-09 | Imagination Technologies Limited | Parallel computing architecture for use with a non-greedy scheduling algorithm |
US10552161B2 (en) | 2017-06-21 | 2020-02-04 | International Business Machines Corporation | Cluster graphical processing unit (GPU) resource sharing efficiency by directed acyclic graph (DAG) generation |
WO2019043710A1 (en) * | 2017-08-31 | 2019-03-07 | Rail Vision Ltd | SYSTEM AND METHOD FOR IMPROVING FLOW IN NUMEROUS CALCULATIONS |
KR102649351B1 (ko) | 2018-11-06 | 2024-03-20 | 삼성전자주식회사 | 세분화된 상태들에 기초한 그래픽스 프로세서 및 그래픽스 처리 방법 |
WO2020184982A1 (ko) * | 2019-03-11 | 2020-09-17 | 서울대학교산학협력단 | 이종클러스터 시스템에서 실행되는 프로그램을 실행시키는 방법 및 컴퓨터 프로그램 |
CN110446046B (zh) * | 2019-08-19 | 2021-04-27 | 杭州图谱光电科技有限公司 | 一种基于嵌入式平台的批量图像快速解码方法 |
FR3105469B1 (fr) * | 2019-12-19 | 2021-12-31 | Thales Sa | Processeur graphique, plateforme comprenant un tel processeur graphique et un processeur central multicoeurs, et procede de gestion de ressource (s) d'un tel processeur graphique |
US11288765B2 (en) | 2020-04-28 | 2022-03-29 | Sony Interactive Entertainment LLC | System and method for efficient multi-GPU execution of kernels by region based dependencies |
US11809902B2 (en) * | 2020-09-24 | 2023-11-07 | Advanced Micro Devices, Inc. | Fine-grained conditional dispatching |
KR20220052546A (ko) * | 2020-10-21 | 2022-04-28 | 삼성전자주식회사 | 데이터 처리 방법 및 장치 및 이를 포함한 전자 장치 및 가속기 시스템 |
KR102351134B1 (ko) * | 2021-08-03 | 2022-01-13 | 주식회사 미리디 | 웹 서버 기반의 디자인 리소스 관리 방법 및 시스템 |
US20230047481A1 (en) * | 2021-08-11 | 2023-02-16 | Apple Inc. | Affinity-based Graphics Scheduling |
US20240220314A1 (en) * | 2022-12-30 | 2024-07-04 | Advanced Micro Devices, Inc. | Data dependency-aware scheduling |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101849227A (zh) * | 2005-01-25 | 2010-09-29 | 透明信息技术有限公司 | 在单片构造的硅芯片上采用多个图形核心的图形处理和显示系统 |
US20110050716A1 (en) * | 2009-09-03 | 2011-03-03 | Advanced Micro Devices, Inc. | Processing Unit with a Plurality of Shader Engines |
CN102047241A (zh) * | 2008-05-30 | 2011-05-04 | 先进微装置公司 | 本地与全局数据共享 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0693737A3 (en) * | 1994-07-21 | 1997-01-08 | Ibm | Method and apparatus for managing tasks in a multiprocessor system |
US7548244B2 (en) | 2005-01-12 | 2009-06-16 | Sony Computer Entertainment Inc. | Interactive debugging and monitoring of shader programs executing on a graphics processor |
US7728841B1 (en) | 2005-12-19 | 2010-06-01 | Nvidia Corporation | Coherent shader output for multiple targets |
US9135017B2 (en) | 2007-01-16 | 2015-09-15 | Ati Technologies Ulc | Configurable shader ALU units |
KR100980449B1 (ko) * | 2007-12-17 | 2010-09-07 | 한국전자통신연구원 | 병렬 전역조명 렌더링 방법 및 시스템 |
US8120608B2 (en) | 2008-04-04 | 2012-02-21 | Via Technologies, Inc. | Constant buffering for a computational core of a programmable graphics processing unit |
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 |
US8456480B2 (en) * | 2009-01-14 | 2013-06-04 | Calos Fund Limited Liability Company | Method for chaining image-processing functions on a SIMD processor |
US9354944B2 (en) | 2009-07-27 | 2016-05-31 | Advanced Micro Devices, Inc. | Mapping processing logic having data-parallel threads across processors |
US8499305B2 (en) * | 2010-10-15 | 2013-07-30 | Via Technologies, Inc. | Systems and methods for performing multi-program general purpose shader kickoff |
US8683468B2 (en) * | 2011-05-16 | 2014-03-25 | Advanced Micro Devices, Inc. | Automatic kernel migration for heterogeneous cores |
-
2011
- 2011-06-20 US US13/164,615 patent/US9092267B2/en active Active
-
2012
- 2012-05-18 JP JP2014516973A patent/JP5752853B2/ja not_active Expired - Fee Related
- 2012-05-18 WO PCT/US2012/038659 patent/WO2012177343A1/en active Application Filing
- 2012-05-18 EP EP12725205.4A patent/EP2721488B1/en not_active Not-in-force
- 2012-05-18 CN CN201280029553.9A patent/CN103608777B/zh not_active Expired - Fee Related
- 2012-05-18 KR KR1020147001412A patent/KR101590734B1/ko active IP Right Grant
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101849227A (zh) * | 2005-01-25 | 2010-09-29 | 透明信息技术有限公司 | 在单片构造的硅芯片上采用多个图形核心的图形处理和显示系统 |
CN102047241A (zh) * | 2008-05-30 | 2011-05-04 | 先进微装置公司 | 本地与全局数据共享 |
US20110050716A1 (en) * | 2009-09-03 | 2011-03-03 | Advanced Micro Devices, Inc. | Processing Unit with a Plurality of Shader Engines |
Non-Patent Citations (2)
Title |
---|
NVIDIA: "《NVIDIA CUDA Programming Guide 3.0》", 20 February 2010 * |
PRABHAT KUMAR等: "High Performance Data Mining Using R on Heterogeneous Platforms", 《2011 IEEE INTERNATIONAL PARALLEL & DISTRIBUTED PROCESSING SYMPOSIUM》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106462426A (zh) * | 2014-05-30 | 2017-02-22 | 苹果公司 | 用于图形处理单元的组合计算任务 |
CN106462426B (zh) * | 2014-05-30 | 2020-03-03 | 苹果公司 | 用于图形处理单元的组合计算任务 |
CN106462941A (zh) * | 2014-06-26 | 2017-02-22 | 高通股份有限公司 | Gpu中的共享寄存器的加载方案 |
CN106462941B (zh) * | 2014-06-26 | 2018-08-28 | 高通股份有限公司 | Gpu中的共享寄存器的加载方案 |
CN107003934A (zh) * | 2014-12-08 | 2017-08-01 | 英特尔公司 | 改进共享本地存储器和系统全局存储器之间的存储器访问性能的装置和方法 |
US10621088B2 (en) | 2014-12-08 | 2020-04-14 | Intel Corporation | Apparatus and method to improve memory access performance between shared local memory and system global memory |
CN107003934B (zh) * | 2014-12-08 | 2020-12-29 | 英特尔公司 | 改进共享本地存储器和系统全局存储器之间的存储器访问性能的装置和方法 |
CN109791507A (zh) * | 2016-10-21 | 2019-05-21 | 超威半导体公司 | 改进分布式gpus的数据局部性的机制 |
CN109964244A (zh) * | 2016-12-22 | 2019-07-02 | 苹果公司 | 用于图形处理的本地图像块 |
CN108241508A (zh) * | 2016-12-27 | 2018-07-03 | 三星电子株式会社 | 处理OpenCL内核的方法及用于该方法的计算设备 |
CN108241508B (zh) * | 2016-12-27 | 2023-06-13 | 三星电子株式会社 | 处理OpenCL内核的方法及用于该方法的计算设备 |
CN113034629A (zh) * | 2021-05-17 | 2021-06-25 | 腾讯科技(深圳)有限公司 | 图像处理方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
JP5752853B2 (ja) | 2015-07-22 |
JP2014523021A (ja) | 2014-09-08 |
KR20140015631A (ko) | 2014-02-06 |
CN103608777B (zh) | 2017-05-10 |
US9092267B2 (en) | 2015-07-28 |
EP2721488B1 (en) | 2017-08-16 |
US20120320070A1 (en) | 2012-12-20 |
KR101590734B1 (ko) | 2016-02-01 |
WO2012177343A1 (en) | 2012-12-27 |
EP2721488A1 (en) | 2014-04-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103608777A (zh) | 图形处理单元中的存储器共享 | |
CN103999128B (zh) | 具有命令处理器的图形处理单元 | |
US20180211357A1 (en) | Pipelined approach to fused kernels for optimization of machine learning workloads on graphical processing units | |
CN109154886B (zh) | 用于处理数据的方法和设备 | |
EP2732370B1 (en) | Instruction culling in graphics processing unit | |
KR102356705B1 (ko) | 커널 퓨징, 리사이징 및 인터리빙 자동 연산 방법 | |
CN102279766B (zh) | 并行模拟多个处理器的方法及系统、调度器 | |
CN106462941B (zh) | Gpu中的共享寄存器的加载方案 | |
CN107851004A (zh) | 针对通用寄存器(gpr)的寄存器溢出管理 | |
US8615770B1 (en) | System and method for dynamically spawning thread blocks within multi-threaded processing systems | |
CN104050275A (zh) | 项目评审方法和系统 | |
US8711160B1 (en) | System and method for efficient resource management of a signal flow programmed digital signal processor code | |
CN112395010A (zh) | 实现工作负载的静态映射的乱序流水线执行的方法和装置 | |
CN106030453A (zh) | 支持图形处理单元频率的动态调整的方法和装置 | |
EP3137993A1 (en) | Combining compute tasks for a graphics processing unit | |
WO2023107789A1 (en) | Deterministic replay of a multi-threaded trace on a multi-threaded processor | |
Serpa et al. | Optimization strategies for geophysics models on manycore systems | |
US9779535B2 (en) | Configuring resources used by a graphics processing unit | |
US8959497B1 (en) | System and method for dynamically spawning thread blocks within multi-threaded processing systems | |
US9152458B1 (en) | Mirrored stateful workers | |
US20140149716A1 (en) | Systems and method for assigning executable functions to available processors in a multiprocessing environment | |
US9430304B2 (en) | Method and system for block scheduling control in a processor by remapping | |
US20230097115A1 (en) | Garbage collecting wavefront | |
Nepali | Evaluation of GPU based Cloud Solutions (Scalability of Deep Learning in the Cloud) | |
CN117808048A (zh) | 一种算子执行方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for 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: 20170510 Termination date: 20200518 |
|
CF01 | Termination of patent right due to non-payment of annual fee |