CN104699461A - 在多线程数据处理装置上对线程调度进行配置 - Google Patents
在多线程数据处理装置上对线程调度进行配置 Download PDFInfo
- Publication number
- CN104699461A CN104699461A CN201410725587.2A CN201410725587A CN104699461A CN 104699461 A CN104699461 A CN 104699461A CN 201410725587 A CN201410725587 A CN 201410725587A CN 104699461 A CN104699461 A CN 104699461A
- Authority
- CN
- China
- Prior art keywords
- thread
- thread scheduling
- data processing
- scheduling
- data
- 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
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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/483—Multiproc
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/484—Precedence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/485—Resource constraint
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及在多线程数据处理装置上对线程调度进行配置。提供了一种用于以单程序多数据的方式对目标数据集执行数据处理的装置,该装置具有:执行电路,所述执行电路被配置为执行多个线程;线程调度配置存储设备,所述线程调度配置存储设备被配置为存储定义多个线程调度配置的信息;以及线程调度电路,所述线程调度电路被配置为使得所述执行电路以选定顺序执行所述多个线程,所述选定顺序由选定线程调度配置来定义。还提供了一种操作该装置的方法以及一种编译用于该装置的源程序的方法。
Description
技术领域
本发明涉及数据处理。更具体地,本发明涉及在多线程数据处理装置上执行的多个线程的调度。
背景技术
以单程序多数据(SPMD)方式进行编程、然后执行多个线程来执行所需的数据处理的数据处理装置,特别是图形处理单元(GPU),在性能上有所增长,并且确实成为了非图形计算的通用平台。通过编程模型(例如,OpenCL、Renderscript和CUDA),程序员能够将这些大规模并行架构用于计算域,例如,线性代数、图像处理和分子科学。这种设备越来越普及,使得可编程性、可维护性和可移植性问题变得非常重要。
SPMD编程模型(例如上面提到的那些)具有有利的灵活性,它们允许程序员指定线程的独立性,从而消除了排序约束。然而,正是这一灵活性也给程序员带来了负担,由于线程被编程的具体方式可对架构性能产生影响。正因如此,程序员仍然需要手动执行数据局部性优化(例如,存储器合并或循环分块),并且考虑GPU架构特征(例如,核心计数和片上存储器分级结构)。此外,从纯编程的角度来看,程序员确定线程到工作组(在OpenCL中)/块(在CUDA中)的分配的自由可能是可取的,但会负面地影响GPU的调度自由和缓存性能。
仍然存在提高多线程数据处理装置(例如,GPU)的性能的可能性。
发明内容
从第一方面来看,本发明提供了一种用于以单程序多数据的方式对目标数据集执行数据处理的装置,该装置包括:
执行电路,该执行电路被配置为执行多个线程以执行数据处理;
线程调度配置存储设备,该线程调度配置存储设备被配置为存储定义多个线程调度配置的信息,每个线程调度配置定义多个线程将由所述执行电路执行的顺序;以及
线程调度电路,该线程调度电路被配置为响应于线程调度选择信号使得所述执行电路按照选定顺序执行所述多个线程,该选定顺序由多个线程调度配置中的选定线程调度配置来定义。
从第二方面来看,本发明提供了一种以单程序多数据的方式对目标数据集执行数据处理的方法,该方法包括以下步骤:
执行多个线程以执行数据处理;
存储定义多个线程调度配置的信息,每个线程调度配置定义多个线程将在执行步骤中执行的顺序;以及
响应于线程调度选择信号控制多个线程按照由所述多个线程调度配置中的选定线程调度配置定义的选定顺序来执行。
从第三方面来看,本发明提供了一种用于以单程序多数据的方式对目标数据集执行数据处理的装置,该装置包括:
用于执行多个线程以执行数据处理的装置;
用于存储定义多个线程调度配置的信息的装置,每个线程调度配置定义多个线程将由用于执行多个线程的装置执行的顺序;以及
用于响应于线程调度选择信号控制所述多个线程按照由所述多个线程调度配置中的选定线程调度配置定义的选定顺序来执行的装置。
附图说明
本发明将参考附图中所示出的本发明的实施例,仅以举例的方式来进一步说明,其中:
图1示意性地示出了根据一个实施例的数据处理***,在该数据处理***中,编译器根据源程序生成可执行程序以在装置上执行;
图2示出了由程序员作出的算法选择能够对缓存访问效率产生影响,以及本技术能够如何解决这一问题;
图3示意性地示出了在一个实施例中,可由装置执行的六个不同的数据处理类型;
图4示意性地示出了五个不同的线程调度配置风格;
图5A示意性地示出了在一个实施例中,在使用不同配置跨步值的“跨步”风格中配置的一些线程调度;
图5B示意性地示出了在一个实施例中,“分片式”风格线程调度配置的不同片大小;
图6A示意性地示出了在一个实施例中的二维目标数据集;
图6B示意性地示出了对应于图6A所示的目标数据集的、要被执行的线程的全集,以及这些线程的子集可被如何分配给处理器核以供执行;
图6C示意性地示出了两种用于将四个线程块分配到两个并行多线程处理器核上的调度技术;
图7示意性地示出了在一个实施例中的、具有两个并行处理器核的装置;
图8示意性地示出了在一个实施例中,在性能分析过程中可被执行的步骤序列;
图9示意性地示出了在一个实施例的方法中可被采取的一系列步骤;
图10示意性地、更详细地示出了在一个实施例中的编译器;
图11A示意性地示出了在一个实施例中,对于若干线程的存储器访问序列的相似性度量的计算;
图11B示意性地示出了在一个实施例中,考虑到对于若干线程的存储器访问序列的两个存储器访问之间的存储器空间距离的相似性度量的计算;
图12示意性地示出了在一个实施例中,可由编译器采取的一系列步骤;
图13示意性地、更详细地示出了在一个实施例中的编译器;
图14示意性地示出了在一个实施例中,可由编译器采取的一系列步骤;以及
图15示意性地生成了通用计算设备,在一些实施例中,本技术可在该通用计算设备上执行。
具体实施方式
本发明的发明人发现,(例如,根据每周期指令(IPC)进行测量的)以单程序多数据(SPMD)的方式进行编程以同时执行多个线程来执行数据处理的多线程数据处理装置的性能能够根据该装置被配置为按照其进行操作的线程调度策略而各不相同。该数据处理例如可以是但不限于图形处理任务,并且能够是(如上面所提到的GPU现在发现的各种应用)比如与线性代数或分子科学相关的非图形任务。对于图形处理的示例,当考虑五个不同的线程调度风格(即,简单顺序、“跨步”(具有可配置的跨步长度和粒度)、“之字形(zigzag)”(在线程的2D网格中,将奇数行的排序反转)、“分片式(tiled)”(在线程的2D网格中的2D子分片)、以及“希尔伯特(Hilbert)曲线”(用于穿过2D网格的空间填充分形(fractal))),并且使用六个不同的基准处理任务(即,积分图像(按行)计算、积分图像(按列)计算、11乘11卷积,矩阵乘法、矩阵复制(每行)和矩阵复制(每列))来测试这些风格中的每一个的若干配置时,发明人的研究显示,产生了各种不同的性能。本发明通过提供具有线程调度配置存储设备的装置来解决这一问题,该线程调度配置存储设备被配置为存储定义多个线程调度配置的信息,这些线程调度配置定义多个线程要被执行电路执行的顺序。定义很多不同的线程调度配置的信息可被存储在线程调度配置存储设备中,从而允许该装置以其调度它的线程用于执行的方式进行有利地重新配置。该重新配置例如可以根据该装置需要执行的具体种类的数据处理、在其上执行该数据处理的目标数据集的性质和/或该装置的具体架构布局。为了实现所存储的线程调度配置之一,提供了线程调度电路,该线程调度电路响应于线程调度选择信号来使得执行电路根据相应的选定线程调度来执行多个线程(即,按照由该选定线程调度定义的特定顺序来执行多个线程)。线程调度选择信号本身可来自若干不同的源,这些源或在该装置的内部或在该装置的外部,并且这进一步提供了该装置适应不同处理需求的有利的灵活度。
在一些实施例中,该装置可进一步包括性能控制电路,该性能控制电路被配置为收集与由执行电路执行的数据处理相关的性能数据,并且根据该性能数据生成线程调度选择信号。因此,线程调度选择信号可在该装置自身中生成,特别是由监测执行电路在执行数据处理中的性能,以及然后根据该性能观测而生成线程调度选择信号的电路来生成。性能控制电路例如可以改变线程调度选择电路以使得执行电路切换到新的线程调度配置,该新的线程调度配置预期可改变由性能数据表示的一个或多个性能度量。通常,期望的性能改进是增加指令吞吐量(即,IPC)或降低能量消耗。
在一些实施例中,性能控制电路被配置为控制性能分析过程,该性能分析过程包括以下步骤:
选择要被执行的多个线程的少数子集;
控制执行电路按照由第一线程调度配置定义的第一选定顺序来执行多个线程的少数子集中的第一子集;
改变线程调度选择信号以使得执行电路按照由下一线程调度配置定义的下一选定顺序来执行多个线程的少数子集中的下一子集;以及
重复该改变步骤,直到线程的少数子集中的所有线程均已被执行电路执行,
其中,性能控制电路被配置为设置线程选择信号以使得执行电路执行多个线程的多数剩余子集,该多个线程的多数剩余子集要被执行以按照由在性能分析过程中进行测试的选定线程调度定义的顺序对目标数据集执行数据处理。
因此,性能控制电路可被配置为参与选择适当的线程调度配置来定义执行电路调度多个线程的顺序的基本实证方法。这可能是有利的,因为不同可能的线程调度配置的数量和该装置可能被要求执行数据处理的不同数据处理情境(context)的数量,在一些情况下可使更具分析性的方法难以达到不能实行的程度。因此,由性能控制电路控制的性能分析过程采用迭代的方法,在该迭代方法中,若干不同的线程调度配置被测试,并且针对每个线程调度配置收集性能数据,最终使得性能控制电路能够设置线程选择信号,以使得执行电路随后使用(基于所收集的性能数据)被确定为优选的(如上所述,该“优选”可根据情境采取若干形式)线程调度配置来继续执行其数据处理。此外,性能分析过程在要被执行的多个线程的少数子集上执行。换句话说,性能控制电路从需要被执行的所有多个线程中选择线程的小测试样本群组,并且控制性能分析在该测试样本上执行。此后(即,当性能分析执行完成时),选定的线程调度配置被执行电路用于对要被执行的多个线程中的多数(即,在性能分析过程已在初始“测试”子集上执行后剩余的、要被执行的所有线程的较大部分)进行排序。
在一些实施例中,第一子集和下一子集各自对应于线程的工作组,其中线程的工作组是由该装置的程序员定义的或默认设置的多个线程的选定子集。“工作组”(在OpenCL术语中)或“块”(在CUDA术语中)表示要被一起分配给处理器核以供执行的、分组在一起的若干线程(这可由程序员定义,而这还可交给默认设置),因此,这样的分组可提供由性能控制电路选择的线程的适当子集作为用于在性能分析过程的每次迭代进行测试的性能分析过程的对象。
在一些实施例中,多个线程调度配置中的至少一些进一步根据控制参数进行配置,并且性能分析过程进一步包括针对多个控制参数值收集关于由执行电路执行的数据处理的性能数据。大量的线程调度配置可被设想(上面提到了它的一些示例),但不仅可存在一系列线程调度配置的“风格”(例如,顺序、跨步、分片式等),而且这些线程配置风格中的一些可将其自身进行进一步的配置(例如,跨步长度或片大小),并且,在这种情况下,如果性能分析过程进一步收集针对一系列控制参数值的性能数据是有利的。例如,这可在性能分析过程的性能分析程序的迭代程序中采取嵌套循环的形式,其中外层循环在不同风格的线程调度配置上进行迭代,而内层循环在控制参数值的范围上进行迭代。此外,应该理解的是,虽然一些线程调度配置可根据单个控制参数进行配置,但是其他线程调度配置可根据两个或更多控制参数(例如,在跨步风格线程调度配置中,一个控制参数可确定跨步长度、而另一控制参数可确定粒度(即,在每个跨步间隔中有多少线程被当作一组))进行配置。该粒度例如可以绕排(wrap)或线程块粒度相对应。
在性能分析过程中,在对多个控制参数值进行迭代时,被测试的具体控制参数值被选择的方式可采取各种不同的形式。例如,虽然控制参数可简单地递增,但是可应用函数来确定控制参数值的下一迭代。例如,在一些实施例中,多个控制参数值对应于控制参数的几何级数。这能够是有利的,因为控制参数值的较大范围使得性能分析以有限次数的迭代进行测试。这可使得性能分析过程更加快速地识别(至少粗略地,或许随后跟随着关注于该区域中的控制参数值的、更具体的性能分析过程)控制参数值的适当设置。该几何级数可采取若干不同的形式,但在一些实施例中,该几何级数是控制参数以二为底的幂。控制参数以二为底的幂可能是有利的,因为其相对简单的实现,以及其在数据处理算法中对应于典型数据块大小和模式的潜能。
控制参数可控制各种不同线程调度配置的多个方面,但在一些实施例中,控制参数是跨步值,该跨步值确定被跳过以找到选定顺序中的下一线程的线程的数目,该选定顺序中的下一线程被确定为遵从多个线程的总数的模。该选定顺序中的下一线程被确定为遵从多个线程的总数的模,以使得线程的排序适当地“绕排”在线程的全集中。如上所述,该跨步值还可与进一步的粒度控制参数相关联,该粒度控制参数定义在每个跨步间隔中被放在一起的线程的数量。
在一些实施例中,控制参数至少是一个分片尺寸值,该分片尺寸值确定片在线程的至少二维坐标空间中的尺寸,并且其中选定的顺序使得执行电路基于逐片(tile-by-tile)的方式上执行多个线程。因此,线程调度配置可定义线程基于线程的二维坐标空间中的片进行调度的线程排序。也可设想更高维坐标空间。虽然可以只提供一个分片尺寸值,但是也可设想多个分片尺寸值,两者都依据比如所定义的片的x维和y维,而且定义例如在二维坐标空间中的行的长度,其中用于线程的顺序编号***只在一个维度上被定义。
虽然该装置在性能分析过程完成后执行的数据处理可在其配置需求上相对统一,但是应该认识到,这些需求可随时间变化,例如,由数据处理执行的具体应用改变的情况,因此在一些实施例中,性能控制电路被配置为以预定间隔重复性能分析过程。这些预定间隔可被选择为适合具体***需求,例如,该间隔可以是时间间隔,完成的若干线程,处理的若干图像帧,等等。
当选择将对其执行性能分析过程的线程的少数子集时,避免将在所有多个线程的起始处找到的第一线程集(即,在线程的顺序编号***中,具有线程编号的第一序列的那些线程)是有利的。例如,在图像处理的情境中,并且在线程编号以传统光栅扫描的方式被分配给像素位置的情况下,可能出现由分配给每个图像帧的角落和/或边缘的线程执行的数据处理不能表示“典型”数据处理的情况(例如,在使用围绕当前像素的3x3像素集执行模糊或卷积的情况下,则在边缘上的线程将进入特殊条件声明来处理在当前像素的上方或左方没有像素的事实。因此,它们将具有不同的控制流,并且很可能还具有不同的存储器访问)。因此在一些实施例中,性能控制电路被配置为选择线程的少数子集以在偏离所有多个线程的起始处的预定偏移处开始。这使得性能分析过程能够在若干要被执行的数据处理中的至少更“典型”的线程的少数子集上执行。
如上所述,由性能控制电路收集的性能数据可采取若干不同的形式,但在一些实施例中,性能控制电路被配置为将针对数据处理的度量作为性能数据测量相对于时间的性能。例如,这可以用每周期指令(IPC)计数的形式进行参数化,或例如能够是对要完成的具体性能基准的时间测量。
作为替代或此外,在一些实施例中,性能控制电路被配置为测量针对数据处理的能量使用度量作为性能数据。这例如能够是由该装置在执行预定数据处理任务时消耗的(估计)能量。该能量消耗例如能够通过对高能量操作(例如,浮点加法/乘法、指令提取以及数据在L1和L2缓存与存储器之间移动)进行计数来估计。通过针对每个操作分配标称能量消耗,可以估计所使用的总能量。此外,所使用的静态能量可以通过测量每个被监测单元的活动周期数,并且具有针对每个单元的标称每周期能量消耗(等于功率)来确定。或者,可提供明确的电路来直接测量使用的能量。
作为替代,或此外,在一些实施例中,性能控制电路包括至少一个事件计数器,该事件计数器被配置为对在数据处理过程中预定事件的发生进行计数以作为性能数据。存在可以这样的方式计数的若干预定事件,但在一些实施例中,预定事件是形成该装置的一部分的缓存中的缓存未命中。应该认识到,改进的数据处理性能可与缓存结构的有效利用具有很强的相关性,因此,监测缓存未命中可以是特别有用的度量。
其中的缓存未命中被监测的缓存例如可以是被提供为与具体处理器核相关联的L1缓存,但在一些实施例中,执行电路包括多个处理器核,并且缓存(例如,L2或末级缓存)被多个处理器核共享。
在一些实施例中,该装置可进一步被配置为从外部源接收线程调度选择信号。这给该装置提供了更加有利的可配置度。该外部源可采取各种形式,例如是向该装置的明确输入,以使得***用户能够干预指定应使用的具体线程调度配置。可选地,线程调度选择信号可被封装在由该装置接收的程序中,并且在这种情况下,线程调度选择信号(或许在该程序中以线程调度选择值的形式)一方面可以由程序员明确设置,但是还可设想该值可由编译器来设置,该编译器被提供为基于源程序生成该装置可执行的程序。应该注意的是,线程调度选择值可被明确设置为由该装置从编译器接收到的值,但是也可根据方程进行定义,例如,该方程将在该装置中被解算以确定具体线程调度选择值。例如,这样的方程比如能够采用工作组编号或线程编号作为变量。如下文更详细地描述的,设想了编译器可确定这样的适当的线程调度选择的各种方式。
因此,在一些实施例中,该装置被配置为接收指令集,该指令集定义以单程序多数据方式对目标数据集执行的数据处理,其中线程调度选择信号由该装置根据与该指令集相关联的线程调度选择值定义而生成。
该装置可以是多核设备,并且在一些实施例中,执行电路包括多个处理器核,线程调度电路包括作业管理器电路,并且选定的线程调度配置进一步定义了由作业管理器电路执行的线程到核的分配。因此,在这样的多核环境中,应该认识到,不仅在给定处理器核中的线程执行的顺序可以影响***性能(例如,由于与该核相关联的L1缓存的使用效率的变化),而且***性能还取决于线程组在并行处理器核上的并行执行(例如,根据被这些多个核共享的L2缓存的使用效率),因此,配置线程调度配置以进一步定义由作业管理器电路执行的线程到核的分配,使得能够维护有利的控制度,线程组通过该控制度在并行核上同时被执行。
在一些实施例中,线程调度电路进一步包括随机访问线程池存储设备,该随机访问线程池存储设备被配置为存储即刻可由执行电路执行的线程的指示。虽然先前处理器核中的线程调度器通常以先到先服务的方式从线程池中取回了下一线程以供调度,但是本技术的灵活性通过提供可被线程调度电路随机访问的线程池存储设备而得到增强。换句话说,线程调度电路可自由挑选其指示当前被存储在线程池存储设备中的任意线程,因此使得更广泛的线程调度配置被实现。
本技术还提供了编译源程序的方法,该源程序定义将在装置上以单程序多数据方式对目标数据集执行的数据处理,其中该装置包括:
执行电路,该执行电路被配置为执行多个线程以执行数据处理;
线程调度配置存储设备,该线程调度配置存储设备被配置为存储定义多个线程调度配置的信息,每个线程调度配置定义多个线程将被执行电路执行的顺序;以及
线程调度电路,该线程调度电路被配置为使得执行电路按照由多个线程调度配置中响应于线程调度选择值而选定的线程调度配置来定义的选定顺序来执行多个线程,该方法包括以下步骤:
根据从分析程序中获得的分析信息来选择选定的线程调度配置,该分析程序使用源程序作为输入来执行实行;以及
基于源程序生成该装置的可执行程序,其中可执行程序采用与在选择步骤中选择的选定线程调度配置相对应的线程调度选择值的定义来注释。
因此,本发明设想关于哪个线程调度配置应被该装置使用的决定可以放在该装置的外部,尤其是作为编译源程序的过程的一部分,该源程序定义将由该装置执行的数据处理。分析程序使用源程序作为输入来实行,并且基于该分析程序的结果来确定选定的线程调度配置。此后,该装置的可执行程序基于源程序而生成,并且该可执行程序用线程调度选择值的定义来注释,该线程调度选择值的定义进而将使得适当的选定线程调度配置被使用。
取决于具体***、源程序和性能约束,分析程序可采用各种形式。例如,源程序将导致该装置的相对静态的行为(即,该装置执行由源程序定义的数据处理的方式对于同一可执行程序的后续执行不会显著改变(或完全不变))的情况,该分析程序可采取更明确的分析形式,其中可作出关于该装置在执行可执行程序时的预期性能行为的预测。或者,在源程序被期望产生更加动态的行为的情况(即,性能行为对于后续迭代变化更广泛的情况)下,例如,源程序采取将从一个执行迭代到另一个执行迭代变化的进一步的输入的情况,则分析程序可采取更加实证的形式,其中编译器基于各性能数据来为通告其作出决定的过程。
在一些实施例中,可进行静态分析,该分析程序包括以下步骤:
分析源程序以确定将由多个线程的线程集执行的存储器访问集;
计算相似性度量的值,该相似性度量值将线程集中的每对线程的存储器访问之间的相关性进行量化;以及
选择选定的线程调度配置,以使得选定顺序使得相似性度量的值指示为高相关性的线程对在选定顺序中以彼此靠近的排序距离来执行。
该具体技术认识到,该装置的性能可得益于具有彼此高度相关的相应的存储器访问集的线程对在选定的顺序中靠近彼此来放置。这尤其是因为该装置的存储器***的性质,其中,高度相关的存储器访问将倾向于带来对该存储器结构的更有效的利用,例如,通过每个线程的存储器访问被共同存储于给定的缓存行中。因此,分析程序被配置为,首先识别将被多个线程中的线程集执行的存储器访问,然后使用相似性度量来计算这些存储器访问如何紧密相关(特别是关于共享的或顺序上靠近的存储器地址)。然后,从不同可能的线程调度配置中,试图将被确定为在存储器访问方面高度相关的那些线程对放在选定顺序中彼此更靠近的位置的线程调度配置被选择。然后,这增加了例如产生(例如上面所述的那些)缓存局部性益处的可能性。
但是,本发明进一步认识到,对于要被执行的所有多个线程的相似性度量的完全确定、详尽的静态分析可证明是过度复杂的。例如,在目标数据集是1000 x 1000的二维数据集并且针对那些一百万数据项中的每一个生成线程的情况下,需要被确定以计算相似性度量的值的相关性的数量覆盖了所有线程对(因此包括106!次置换),这可能超过了当前实际可能的领域。因此,在一些实施例中,线程集是多个线程的少数子集。通过适当调整在其上执行分析程序的线程集的大小,可在实行分析程序所需的处理和分析程序根据对适当的线程调度配置的正确选择而产生的精确性之间找到可接受的权衡。
在一些实施例中,多个线程的少数子集被选择以在偏离所有多个线程的起始处的预定偏移处开始。如上所述,在多个线程的该“测试”子集被使用的情况下,选择该测试子集以使得线程的更典型的数据处理被表示可能是有利的,并且这可包括避免选择使得所处理的目标数据值位于靠近二维目标数据集的边缘或角落的测试集。
在一些实施例中,相似性度量量化了每对线程的多对存储器访问之间的相关性。如果相似性度量能够表示给定线程对关于要被这些线程作出的若干存储器访问的相关程度是有利的。针对每个线程对选择多少存储器访问对来分析是在确定该相似性度量值所需的计算处理和对适当的线程调度配置的预测结果的精确性之间可找到适合的权衡的情况的另一示例。在一些实施例中,相似性度量根据距离度量而被配置,该距离度量确定两个存储器访问之间的最大存储器空间距离,由于该最大存储器空间距离,这两个存储器访问可被相似性度量确定为具有非零相关性。因此,虽然对于将被以选定的顺序放置为彼此靠近的线程对(其中这些线程至少部分地作出相同的存储器访问(即,对至少一些等同的存储器位置))明显是有益的,但是应该认识到的是,如果这两个存储器访问的邻近度仍能够带来性能益处,则可允许两个存储器访问之间的某种存储器空间距离。
该存储器空间距离可采用若干形式。例如,在一个这样的实施例中,最大存储器空间距离由数据处理装置中的缓存行大小来给定。这是因为只要两个存储器访问在给定缓存行中相符合就可以获得产生的缓存局部性益处的事实。在一个实施例中,最大存储器空间距离由这两个存储器访问所属的两个线程之间的排序距离来给定的。这允许线程对被以选定的顺序靠近放置(但是或许彼此不同步执行),并且允许仍产生性能益处。
在一些实施例中,多个线程调度配置中的至少一些进一步根据控制参数而被配置。类似的实施例(针对由该装置的性能控制电路执行的性能分析过程加以必要的变更)在上面进行了说明,为简洁起见,此处不再重复。与上述实施例类似,几何级数可采用若干不同的形式,但在一些实施例中,几何级数是控制参数的以2为底的幂。与上述实施例类似,控制参数可控制各种不同线程调度配置的多个方面,但在一些实施例中,控制参数是跨步值,该跨步值确定被跳过以找到选定顺序中的下一线程的线程的数目,该选定顺序中的下一线程被确定为遵从多个线程的总数的模。与上述实施例类似,在一些实施例中,控制参数至少是一个片的尺寸值,该分片尺寸值确定在目标数据集的至少二维坐标空间中的片的尺寸,并且其中选定的顺序使得执行电路在逐片的基础上执行多个线程。
如上所述,作为编译源程序的一部分而被执行的分析程序可采用至少部分实证的形式,并且在一些实施例中,该分析程序包括:
基于源程序测试生成用于数据处理装置的测试可执行程序,其中该测试可执行程序用用测试线程调度配置相对应的测试线程调度选择值定义来注释;
使得该测试可执行程序在该装置上执行,其中该装置进一步包括性能控制电路,该性能控制电路被配置为收集关于由执行电路执行的数据处理的性能数据;
从该装置接收该性能数据;
重复测试生成、使得和接收步骤,其中对于每次重复,测试可执行程序用与新的测试线程调度配置相对应的新的测试线程调度选择值定义来注释,
并且在生成步骤中,线程调度选择信号根据该性能数据而生成。
因此,在这样的实施例中,该装置和编译器彼此合作以最初形成为了执行分析程序的目的的测试***,在该分析程序中,编译器生成测试可执行程序的序列,每个测试可执行程序用新的测试线程调度选择值定义来注释,然后使得该装置(通过其性能控制电路)收集关于由执行电路响应于具体测试执行程序而执行的数据处理的性能数据,并且该性能数据被返回给编译器用于评估。在这样的测试可执行程序序列被执行且其相应的性能数据被分析之后,然后编译器可以确定优选的线程调度配置,并且然后当生成最终的可执行程序以针对目标集的全部执行时,能够用适当的线程调度选择值定义来注释该可执行程序。
然而,分析程序的实证方法也可在不涉及该装置自身的情况下执行,例如,编译器可访问(或在编译器内部或只是可访问编译器)该装置的仿真的情况。因此,在一些实施例中,该分析程序包括:
基于源程序测试生成至少部分测试可执行程序,其中该至少部分测试可执行程序用与测试线程调度配置相对应的测试线程调度选择值定义来注释;
使得该至少部分测试可执行程序在该装置的至少部分仿真上执行,其中该装置的至少部分仿真进一步包括性能控制功能,该性能控制功能被配置为收集关于由该装置的至少部分仿真执行的数据处理的性能数据;
从该装置的至少部分仿真接收该性能数据;
重复测试生成、使得和接收步骤,其中对于每次重复,测试可执行程序用与新的测试线程调度配置相对应的新的测试线程调度选择值定义来注释,
并且在生成步骤中,线程调度选择信号根据该性能数据而生成。
因此,在编译器可访问这样的该装置的至少部分仿真的情况下,则编译器能够生成相应的至少部分测试可执行程序以供在该装置的至少部分仿真上执行,并且能够从该仿真的性能控制功能接收性能数据,该仿真的性能控制功能给出关于由该仿真执行的数据处理的性能数据。如同上述使得测试可执行程序序列在该装置本身上执行的示例,在此测试可执行程序序列也被使得在该仿真上执行,并且每个测试可执行程序用新的测试线程调度选择值定义来注释,以便测试对于每次重复的不同线程调度配置的性能。然后,编译器能够根据接收到的性能数据来确定优选的调度配置,并且然后当最终的可执行程序被生成以供在该装置本身上执行时,其能够用相应的线程调度选择值定义来注释。应该注意的是,该装置的仿真只需要是至少部分的,例如,分析程序的焦点是确定相对于具体装置组件的性能的优选的线程调度配置的情况。
例如,在一些实施例中,该装置的至少部分仿真包括该装置中的缓存的模型。例如,编译器可包括GPU缓存结构的模型,其中该装置为GPU,因此,只有关于缓存使用的线程执行的那些方面需要被仿真。由于类似原因,测试可执行程序只需要是部分测试可执行程序,特别是提供适当的可执行程序以供在该装置的部分仿真上测试。
本技术还提供了计算机可读存储介质,该计算机可读存储介质以非暂时性方式存储被配置为使得计算机实行第四方面的方法的计算机程序。
图1示意性示出了数据处理***10,该数据处理***10基本上包括数据处理装置12,该数据处理装置12在这里是图形处理单元(GPU)。同样地,本领域的普通技术人员将理解,数据处理***10从而通常将进一步包括中央处理单元(CPU),该中央处理单元具有对数据处理***10的整体控制特别是确定将什么数据处理任务交给GPU 12。但是为了简洁起见,该CPU未示出。GPU 12是多线程数据处理装置,其被配置为以单程序多数据(SPMD)的方式来执行其数据处理,并且包括为此目的的多线程执行电路14。将由多线程执行电路14执行的不同线程由该装置的程序员来定义。GPU 12的目标数据集是数据值的图像帧的情况下,程序员可以,例如定义一个线程以对应于该图像帧中的每个像素。因此,应该理解的是,很多线程能够由程序员定义,并且这些线程很可能超过多线程执行电路被配置为能够并行处理的线程数量。例如,在目标数据集是具有1920 x 1080的分辨率的图像帧的情况下,在像素和线程之间的一对一关系给出了2073600个线程。多线程执行电路例如可以被配置为能够并行处理1024个线程,因此将在2025次迭代中处理该目标数据集。
然而,虽然多线程电路14在其能够并行执行的线程总数方面受到限制(例如,如上面的示例中的1024),但是GPU 12被配置为使得其在线程被调度的顺序方面具有很大的灵活性。这不仅关于线程被调度以在多线程执行电路14能够并行处理的线程的最大数量的限制内执行的顺序,而且关于线程组(例如,OpenCL工作组或CUDA块)被调度以在更高级别或粒度上执行的顺序。为此目的,GPU 12被提供有线程调度电路16和线程调度配置存储设备18。线程调度电路16确定线程要被调度以由多线程执行电路14执行的顺序,并且这是参照存储在线程调度配置存储设备18中的信息来完成的。基本上,线程调度配置存储设备18存储定义线程调度电路16可使用的若干(并且有利的是很多)不同的线程调度配置的信息。虽然线程调度配置能够以更明确的格式存储在线程调度配置存储设备18中,但是(为了限制所需存储的量)如果被提供以使得线程调度电路16能够计算排序的功能限定是优选的。线程调度电路16基于其接收到的线程调度选择信号20从存储在线程调度配置存储设备18中的那些线程调度配置中选择具体线程调度配置。此外,线程调度选择信号可由控制参数21增加,该控制参数21使得具体线程调度配置能够以特定方式进行配置,如下将详细说明的。
线程调度选择信号20可由若干不同的源来提供,图1中示出了该源的若干可能。在一个变体中,线程调度选择信号可由从GPU 12的外部源提供的这一值22的明确说明来提供。这给该装置的程序员直接干预GPU12的操作以设置线程调度选择信号20从而设置将被使用的具体线程调度配置的机会。或者,线程调度选择信号20可基于被注释到由GPU 12接收的可执行二进制程序24的线程调度选择值(或定义如何计算该值的方程,例如取决于工作组编号或线程编号)来生成。该可执行二进制程序24由编译器26基于由程序员提供的源程序28来生成。被注释到可执行二进制程序24的线程调度选择值(定义)可由程序员明确地选择,从而可形成源程序28的一部分,因此,将用于指示哪个线程调度配置应被使用的另一机制提供给了***用户。然而,线程调度值也可由编译器26,或是基于它自己基于它从GPU 12接收的性能数据对源程序28进行的分析,或是基于GPU 12的仿真,注释到可执行二进制程序24。这些变体将在下面单独地进行详细讨论。
在GPU 12将性能数据提供给编译器26的情况下,该性能数据来自性能控制电路30,该性能控制电路30被配置为收集关于多线程执行电路14的活动的性能数据。特别地,该性能数据被选择以使能性能控制电路30能够收集关于多线程执行电路14当前正在如何有效地进行操作的信息,该操作基于线程调度电路16用于调度其线程用于执行的线程调度配置。性能控制电路30可使用若干不同度量来评估这点,但是如所示的,这些度量可包括每周期指令(IPC)计数32、能量使用度量34和/或缓存未命中计数36。能量使用度量例如能够是由该装置在执行预定数据处理任务时消耗的(估计)能量。该能量消耗例如能够通过对(例如,浮点加法/乘法、指令提取以及数据在L1和L2缓存与存储器之间移动的)高能量操作进行计数来估计。通过在每个操作处分配标称能量消耗,可以估计所使用的总能量。此外,所使用的静态能量可以通过测量每个被监测单元的活动周期数,并且具有针对每个单元的标称每周期名能量消耗(等于功率)来确定。或者,可提供明确的电路来直接测量所使用的能量。因此,缓存未命中计数36从缓存38(应指出的是该缓存可以只是层级中的若干缓存之一)的多线程执行电路14的使用中获得其信息,多线程执行电路14通过缓存38来访问存储在存储器40中的数据。
GPU 12可被配置为以相对自主的方式来选择线程调度配置,并且在这样的实施例中,性能控制电路30被配置为基于其收集的性能数据来选择适当的线程调度配置并相应地生成线程调度选择信号。这例如可以基于迭代测试程序(例如,以下参考图8进行描述的迭代测试程序)来执行。在其他实施例中,编译器26和GPU 12可合作以确定适当的线程调度配置(例如,通过以下参考图14进行描述的方法),并且在这种情况下,性能电路30被配置为将性能数据传递回编译器26。
图2示出了选定的线程调度排序能够如何给***性能带来益处的简单示例,特别是选定的线程调度顺序能够如何被用于缓和源代码的简单示例,该源代码未针对它将在其上执行的装置而进行优化。示例代码A提供了简单的伪代码示例(即,技术人员可根据该伪代码示例理解所讨论的原理,而不受具体程序语言或目标装置的约束),其中十六个线程(TID=0-15)被生成,并且在2D空间中的选定目标数据点被分配给每个线程以进行处理。因此,可以看出,示例代码A将使得由标号40所示的线程到目标数据项的分配。这对应于行主排序,在行主排序中线程的顺序排序自然地对应于目标数据项的顺序(光栅扫描)排序。在图2的下面部分中,图示示出了由每个线程访问的目标数据项如何使用本地缓存,在此示例中,该本地缓存被配置为使得缓存行能够保留对应于两个目标数据项的数据。因此,在图2左下方的缓存使用示例中可以看出,简单顺序线程调度顺序能够有效使用该缓存,这是因为以下事实:缓存行0保留对应于线程0和线程1的目标数据,而缓存行1保留对应于线程2和线程3的目标数据,缓存行2保留对应于线程4和线程5的目标数据等等。所示的“最大存储器空间距离”指的是缓存行大小,并且以下参考图11B进行详细讨论。
图2还示出了***性能被该程序代码中只是简单的改变而显著影响的可能性。如变体B中所示,代码的这两行的交换或变量x和y的颠倒将导致目标数据项到线程的分配的列主排序,如标号42所示。如果在这种情况下,该装置还使用简单顺序线程调度顺序,则缓存使用的效率将大大降低,因为在调度顺序中的相邻线程将不对应于目标数据集中的相邻数据项。然而,如图2右下方所示,该装置能够通过选择线程调度顺序(例如所示的那个选择线程调度顺序(即,0、4、8、12、1、5等等))以使得有效的缓存使用能够被重新获得来解决这一问题。
然而,应该理解的是,由各线程实行的数据处理任务可各不相同,此外,每个线程访问的目标数据项可显著不同于线程与目标数据项之间的简单一对一对应。图3示意性地示出了可被该装置执行的数据处理的六个不同示例类型,并给出了各种不同方式中的一些的概览,在这些方式中,单独的线程可参考目标数据集的不同部分。根据要被执行的数据处理的相对复杂度,本技术所采用来确定线程调度的方法可视情况而更具分析性或更具实证性。例如,对于数据处理操作,例如所示的矩阵复制操作,可以采用(例如,由图1所示的编译器26实行的)更具分析性的方法,但是对于可能更复杂的操作,例如所示的11x11卷积(或例如在非结构网格上的计算,在非结构网格中,数据通过索引矩阵(例如,A[B[i]])来间接访问),可能出现只有确定选定的线程调度配置的实证方法可以实用的情况。
图4示例性地示出了线程调度排序的五个不同示例风格。此外,可以看出,除“顺序”以外的风格各自采用至少一个配置控制参数,该配置控制参数确定线程调度的该具体风格是如何实现的。例如,线程调度配置的跨步风格采用两个控制参数,一个指示跨步长度(即,每次迭代跳过多少线程),另一个定义粒度(即,每次迭代将多少线程放在一起作为一个块)。在线程调度配置的“分片式”风格中,给出了三个控制参数,第一控制参数(4)给出了行长,而第二和第三控制参数(2,2)给出了片尺寸。图1所示的GPU 12的线程调度配置存储设备18可被配置为存储定义这些线程调度配置风格中的任意风格的信息,并且也允许其基于对控制参数的选择的具体配置。然而,应该注意的是,能够存储在线程调度配置存储设备18中的线程调度配置不限于图4中所示的那些,并且任意其他常规(功能限定的)乃至定制(例如,非常规)的线程调度配置也能够被存储。
图5A示出了“跨步”风格线程调度配置的不同具体配置,以及该具体线程调度能够如何根据控制参数N而被配置,该控制参数N设置跨步值为2N。相应地,在N=0的情况下,产生简单顺序线程调度;在N=1的情况下,产生序列0、2、4等;在N=2的情况下,产生序列0、4、8、12等;等等。此外,注意到图5A中所示的示例线程调度是在简化示例中给出的,其中要被调度的线程总数是16,并且线程调度排序的确定遵从“模15”,以使得,例如在由N=2给定的序列中,线程ID 1跟随线程ID 12(而不是线程ID 16)。作为分析程序(例如,由图1所示的数据处理装置12实行的实证分析程序)的一部分,使用控制参数设置跨步值的几何级数以使得数据处理装置在执行迭代分析程序以确定应当使用哪个线程调度配置时,能够更快地扫过线程调度的该跨步风格的大量配置。因为作为分析线程调度配置的该具体风格的迭代过程的一部分,因此这能够允许适当的线程调度配置被更快地识别。
图5B示出了应用于线程调度配置的“分片式”风格分析的类似原理,其中,这次两个控制参数是变化的,这些参数对应于选定片的线性尺寸。这些参数的每一个以几何方式进行迭代,如同图5A中的控制参数N,并且也允许一系列的片大小被快速且有效地分析。
图6A示意性地示出了二维排列的目标数据集,在该集中具有1000 x1000个独立的目标数据项。图6A中还示出了被确定为用于性能分析的测试目标的目标数据集的子集。要特别注意的是,该测试目标在偏离目标数据集的起始处的偏移处被选择,以使得所产生的数据处理表示全部目标数据集的数据处理的更“典型”的子集(以避免边缘效应等等)。
图6B示意性地示出了可生成的与图6A所示的目标数据集相对应的线程集。因此,示出了一百万个线程的序列。还示出了用于性能分析过程的线程的子集的指示,该性能分析过程在偏离线程的全集的起始(根据线程ID顺序地看)处的偏移处开始。
图6B还示出了在数据处理装置是多核设备的示例中线程组可被如何分配给处理器核以供执行。注意,为图示简单起见,线程组被示为1D数组,并且确实可以平化为这样的数据结构,但可以等价地作为对应于目标数据集的2D数组进行处理。图6B示意性地示出了数据处理装置50,其包括两个处理器核52、54,每个处理器核被配置为能够同时执行多达1024个线程。每个处理器核分别具有其自己的相关联的L1缓存56、58,并且处理器核52、54共享L2缓存60。如图6B所示,要被执行的线程全集可被分组为若干“工作组”,每个工作组包括512个线程,该分配由程序员确定。然后,这些工作组必须作为单元被分配给给定的处理器核以供执行,而每个处理器核因此能够处理两个工作组。工作组被分配给核的方式表示选定的线程调度配置可被实现的进一步的方式。
图6C示意性地示出了4个线程工作组(A-D)可被如何分配给图6B中所示的GPU 50的两个处理器核52、54。图6C中所示的调度器1示出了工作组被以循环方式分配给核,而图6C中的调度器2示出了顺序工作组被(按字母顺序,即原始顺序)分配给顺序核(但是,应注意的是,示出的调度器2的工作组的排序被交换了)。选择实现哪个调度器(由选定的线程调度配置来定义)将取决于在每个工作组中执行的存储器访问的性质。在具有局部性的工作组被分组为彼此靠近的情况下,调度器1能够得益于L2缓存60中(在不同核中的空间上)的局部性,而调度器2能够得益于L1缓存56和58中(在不同工作组中的时间上)的局部性。注意,工作组A-D的阴影指示它们是否被假设为共享数据(即,分别配对为A&B以及C&D)
图7示意性示出了示例多核GPU 100,其包括两个处理器核102、104。这些处理器核102、104中的每一个具有其自己的相关联的L1缓存106、108,并且处理器核102、104共享L2缓存110,通过L2缓存110作出对存储器112的访问。在该数据处理装置中,上述线程调度电路由作业管理器114和分别设在每个处理器核102、104中的线程调度器116、118的协调来提供。因此,作业管理器114、线程调度器116和线程调度器118中的每一个接收线程调度选择信号120以配置其操作,特别是确定使用存储在(作业管理器114、线程调度器116和线程调度器118中的每一个均可访问的)线程调度配置存储设备122中的线程调度配置中的哪一个。因此,线程调度配置能够确定线程工作组如何由作业管理器114分配给核102、104(例如,如上参考图6C所述的),并且配置各线程调度器116、118如何调度线程以供在每个处理器核102、104中执行(例如,使用图4所示的线程调度配置风格之一的具体配置)。当作业管理器114将线程工作组分配给处理器核102、104之一时,该工作组中现在可用于即刻调度的那些线程的指示被存储在该处理器核中的随机访问线程池124、126中。因此,被分配给具体核的线程工作组随后不是被线程调度器以简单的先到先服务的方式来访问,而是线程调度器116、118能够自由地从存储在随机访问线程池124、126的群体中挑选线程以进行调度。线程调度器116、118对线程的调度使得由每个线程执行的、来自内核的具体指令将被分配到在设在每个处理器核中的若干不同的流水线128、130、132之一。这些流水线128、130、132可专用于具体类型数据处理操作,因此(如所示得)可具有不同的长度。一旦指令退出其相应的流水线,则该事实的指示被返回到相应的线程调度器116、118,以使得其可以正确管理线程和指令的进一步调度。因此,从以上讨论来看,应该理解的是,对线程调度配置的选择可试图利用在粒度的不同等级上对于线程到处理器核的分配的局部性效应。这例如可以包括安排两个具体线程将在这两个处理器核102、104上彼此大致并行地实行,例如,得益于L2缓存110中的缓存局部性。其可包括选择线程调度配置,以使得两个具体线程由具体处理器核上的具体线程调度器彼此靠近地进行调度(例如,利用L1缓存106、108中的缓存局部性效应)。其还可包括指令级局部性,其中线程被调度,以使得(例如,在并行流水线128和130中的)独立指令被预期为从局部性效应中获益。
图8示意性地示出了在根据基本实证技术来确定优选的线程调度配置的方法的过程中采取的一系列步骤。因此,这对应于如1所示的配置,其中性能控制电路30被配置为管理该性能分析过程并且生成线程调度选择信号(两者都是性能分析过程的一部分),并且其后在设置最终选定的线程调度选择信号时被用于由数据处理装置12实行的主要数据处理。性能分析过程起始于步骤200。然后,在步骤202,应被执行(例如,以处理整个图像帧)的所有线程的少数子集被选择用于性能分析过程。该少数子集在偏离线程集的起始处的偏移处被选择,如图6B示意性地示出的,以使得用于性能分析的测试目标数据集偏离二维目标数据集(图像帧)的边缘,如图6A示意性地示出的。应该注意的是,以图6A所示的过分简单的方式,并非总是可以避免目标数据集的特定部分的使用,例如,每个线程引用来自遍及目标数据集的一系列位置(乃至所有位置)的目标数据项的情况。接下来,在步骤204,从该少数子集中定义第一子集,并且应对该第一子集执行测试的第一迭代。然后,在步骤206,线程调度选择信号被设置为与要在该迭代中被测试的线程调度配置相对应。在步骤208,判定该线程调度配置是否需要设置额外的控制参数,并且如果需要,则流程通过步骤210进行,在步骤210中,该控制参数被设置为第一值以被测试。然后该流程到达步骤212,在步骤212中,该线程的子集按照由线程调度配置确定的顺序来执行,该线程调度配置是由线程调度选择信号选择的,并且关于该执行的性能数据被收集。在步骤214,如果存在要被测试的控制参数,并且如果该控制参数值的进一步的迭代要被测试,则该流程通过步骤216返回到步骤210,在步骤216中,该控制参数的下一迭代被设置。该控制参数的迭代例如能够是对于跨步风格线程调度配置的参数N的设置,如参考图5A所述的。如果不存在控制参数来迭代,或者如果控制参数的所有迭代均被测试,则该流程从步骤214进行到步骤218,在步骤218中,确定在所选择得用于性能分析的所有线程的少数子集中是否存在线程的另一子集要针对新的线程调度而被测试。如果存在,则该流程返回到步骤204,以使线程的该子集使用新的线程调度配置来进行测试。一旦线程的所有少数子集均被执行,并且相应地若干线程调度(可能用一系列控制参数)被测试,则在步骤220,优选的线程调度(并且可能是控制参数)基于在步骤212的每次迭代中收集的性能数据被确定。然后,性能控制电路30设置线程调度选择信号以将线程调度电路16配置为使得多线程执行电路14使用选定的线程调度配置来执行其数据处理。图8中的可选步骤222示意性地示出了性能分析过程可在一段时间间隔或执行一定数量的线程后进行重复,如果预期装置12的性能可随该间隔而变化。这例如能够是以下情况:由装置12执行的应用预期将改变,并且当应用改变时,新的线程调度配置可能是更适当的。
图9示意性地示出了操作例如由图1中的GPU 12所示的装置的方法的高层视图。在步骤242,该装置接收(由编译器生成的)可执行二进制程序,并且在步骤244,从若干存储的线程调度配置中选择线程调度配置。在步骤244的选择例如可以与上面参考图8所述的性能分析过程相对应。然后,在步骤246,线程调度选择信号被设置为使得该线程调度配置被使用,并且在步骤248,线程被实行。
现在我们转到更详细地考虑图1所示的编译器26,特别是该编译器被配置为确定线程调度选择值(定义)以对其基于源程序28生成的可执行二进制程序24进行注释的情况。在图10示意性地示出的实施例中,编译器26具体处于当可进行源程序28的静态分析时适合的配置中。为了执行该静态分析,编译器26设有分析功能300,该分析功能300被配置为使得编译器26能够对源程序28执行分析程序。该分析功能300包括如图所示的三个主要功能级,即,存储器访问确定级302、相似性计算级304和线程调度选择及控制参数选择级306。线程调度选择及控制参数选择级306参考线程调度配置存储设备308进行操作,线程调度配置存储设备308本质上等价于线程调度配置存储设备18(尤其是具有等价的内容),以使得编译器26能够选择数据处理装置12可用的线程调度配置,并且设置与该线程调度配置相对应的线程调度选择值(定义)(适当的情况下还有控制参数)。如前面所提到的,线程调度选择值可以是明确的值或可以是定义如何(例如,根据工作组编号或线程编号)计算该值的方程。下面参考图11A、图11B和图12给出了分析功能300的操作的更多细节。一旦分析功能300的线程调度选择和控制参数选择组件306确定了选择的线程调度配置,则编译器26生成可执行程序(见组件310),并且将适当的线程调度选择值(定义)(如果适当的话还有控制参数)注释到该可执行程序。然后,该可执行程序被传递到数据处理装置12用于执行。虽然图10所示的编译器26可被配置为以纯分析及静态的方式(即,在该方式中,选定的线程调度配置的确定在不参考任何数据处理装置12的性能的情况下作出)来执行分析程序,,图10还示出了一个变体,在该变体中,来自数据处理装置12中的性能电路30的性能数据被返回给编译器26,特别是返回给分析功能300,以使得该性能数据可被用于调整分析功能300的行为。因此,该配置变体可被视为混合配置,在该混合配置中,由分析功能300执行的分析程序基本保持静态,但由来自性能控制电路30的性能数据的反馈中的动态方面来增加。
图11A和图11B示意性地示出了图10所示的分析功能300的存储器访问确定级302和相似性度量计算级304的功能。分析功能300的这两个级的基本功能是量化由源程序28生成的线程之间的存储空间局部性。首先,如图11A的上面部分所示,存储器访问确定功能302识别将被若干不同的线程作出的存储器访问的集合。注意,存储器访问由数字表示,该数字比如指示每个访问的存储位置或缓存行编号。存储器访问按从左到右进行。为了图示的简单起见,只示出了三个存储器访问和五个不同线程的有限集合。接下来,相似性度量计算功能304基于发现的存储器访问模式来确定相似性度量的值,在图11A的上面部分所示的存储器访问的示例中该相似性度量的值可以由例如图11A的下面部分所示的相似性图表来表示。在相似性图表的每个边上给出的数字表示由该边连接在一起的两个线程的存储器访问的匹配度。该相似度被参数化为0(不匹配)和1(完全匹配)之间的值。因此,例如,可以看到,值1被注释在连接线程t0和t2的边上,因为所有这三个存储器访问相匹配,而值1/3被注释到连接线程t1和t3的边,因为只有一个(到位置7的)存储器访问相匹配。
然而,两个线程各自的存储器访问的存储位置不一定等价地匹配,因为将存在可从在调度中将这两个线程彼此靠近地进行排序而获得性能益处。这是因为如下事实:如果这两个存储器访问例如在单个缓存行中被共享,则可获得该性能益处。再次参考对图2的下面部分的讨论。因此,图11B示出了相似性度量的计算的示例,其中在允许两个存储器访问位置之间的差值6的情况下这些存储器访问仍然被确定为“匹配”。在图11B所示的示例中,最大存储器空间距离6被设置为2,意味着图11B的上面部分所示的存储器访问可最多相差2,且仍被确定为“匹配”。该最大存储器空间距离6可根据存储器层级的一部分的具体配置进行设置,分析程序试图例如根据其性能试图被提高的缓存的行大小提高该具体配置的性能。针对图11B的上面部分所示的存储器访问生成的相似性度量由图11B的下面部分所示的相似性图表示出。然后,基于计算得出的相似性度量来确定线程调度配置例如可以通过确定穿过如图11A和图11B的下面部分所示的相似性图表的路径来执行,该路径使相似性最大化。例如,在图11A的示例中,该排序可以是t0-t2-t1-t4-t3。在图11B的示例中,该排序可以是t1-t0-t2-t3。存储器空间距离可替代地(或另外地)被用于参数化允许线程排序偏离而仍发现匹配的程度。这是因为线程不是同步执行,而可能发散一些。例如,线程1的第二指令实际上可与线程0的第一指令(差不多)同时执行。因此,相似性不仅对相同指令是重要的,而且对不匹配(但接近)的指令也是重要的。
图12示意性地示出了可由编译器26采取的步骤序列,该编译器如示于图10中的实施例所示的那样来进行配置。在步骤320,编译器接收源程序,并且使用该源程序作为输入,在步骤322,要由源程序定义的所有线程中的“分析少数子集”执行的存储器访问的集合被确定。因此,应该理解的是,编译器26的分析功能300被配置为只选择由源程序28定义的所有线程中的少数子集作为分析程序将被执行的基础。以这种方式选择少数子集是重要的,因为应该认识到必须被确定的相似性的数量是线程数量的平方。此外,已知穿过相似性图表的路径的确定是NP(非确定性多项式时间的)难度的。因此,必须准确限制对其实行分析程序的线程的子集的大小,以便使所需计算能够是可行的。作为替代或除此以外(但是未明确示出),通过限制(例如,跨步式或分片式)置换的数量来降低所需的计算量并计算这些置换的相邻调度线程之间的(平均)相似性是可能的。
接下来,在步骤324,使用距离度量6来计算相似性度量,距离度量6是根据分析程序正试图提高其性能的缓存的缓存行长度来设置的。然后,在步骤326,线程调度配置被选择以最小化(或至少降低)高度相关的线程对之间的排序距离。应该注意的是,虽然高度相关的线程对之间的排序距离的完全最小化在实践中可能在所需的计算能力/时间方面开销过高,然而,提高的线程调度配置可被选择,该线程调度配置可被标识为降低高度相关的线程对之前的排序距离。例如,被认为完全不相关的线程对能够被明确地分开,而被确定为高度相关的线程对的至少一部分能够被放到彼此靠近的排序距离(例如,相邻)。因此,即使可能尚未确定完整的完全最优化的线程调度配置,但是仍然可实现***性能的提升。此后,在步骤328,编译器基于用选定的线程调度选择值(定义)(如果适当的话还有控制参数)注释的源程序28生成可执行程序,并且在步骤330,该可执行程序被提供给GPU 12。
图13示意性地、更详细地示出了当被配置为以更加动态或实证的方式确定适当的线程调度配置时的编译器26。在该配置中,确定选定的线程调度配置的分析程序不是基于对源程序28的分析而是通过执行迭代测试过程来执行的,该迭代测试过程中若干线程调度配置被测试。因此,在此配置中,分析功能400选择第一线程调度选择值(定义)(在适当的情况下还有控制参数),使得该线程调度配置被测试,并接收关于根据该线程调度配置的线程执行的性能数据。然后,其继续通过改变线程调度选择值(定义)(在适当的情况下还有控制参数)的迭代过程以接收针对若干不同线程调度配置的性能数据。分析功能400的线程调度选择和控制参数选择组件402(如图10所示的组件306)可访问线程调度配置存储设备404,线程调度配置存储设备404(如图10中的组件308)与GPU 12中的线程调度配置存储设备18相匹配。图13示出了编译器26可测试具体线程调度配置的方式的两种可能性。一方面,编译器26能够在测试程序的每次迭代中生成新的可执行程序,并将该迭代的线程调度选择值(定义)注释到该可执行程序,并将该可执行程序传递给数据处理装置12以供执行。在此配置中,GPU 12的性能控制电路30随后将性能数据返回给分析功能400。另一方面,图13所示的编译器26设有GPU的仿真408,编译器26可将注释有线程调度选择值(定义)的可执行程序传递给该仿真以供测试。然后,该GPU仿真408中的性能控制功能412能够将性能数据返回给分析功能400,以使得分析功能400能够确定优选的线程调度配置。应该注意的是,GPU仿真408在图13中被示作形成编译器26的一部分,但是这不是严格必需的,并且可能出现编译器26只能访问独立提供的GPU仿真的情况。此外,注意,如图13所示,实际上,其可以是由组件406生成以传递给GPU仿真408的部分可执行程序。这尤其是因为GPU仿真408可能不是GPU 12的完全仿真,而只是GPU的、编译器26试图提高其性能的一个或多个部分的仿真。例如,如图13的示例中,GPU仿真408可包括GPU缓存模型410,因此,基于源程序28生成的、用于在该部分GPU仿真上测试的可执行程序可能只需要表示与GPU缓存使用相关的源程序的那些部分。然后,GPU缓存模型410将其自己的性能数据提供给性能控制功能412,然后,该性能数据进而被返回给分析功能400。
图14示意性地示出了可由例如图13的示例中所示的编译器26在使用源程序28作为输入来实行分析程序以或是从GPU 12自身收集性能数据或是从GPU 12的仿真中收集性能数据时采取的步骤序列。该流程开始于步骤450,其中编译器26接收源程序28,并且在步骤452,编译器26的分析功能400通过线程调度选择及控制参数选择组件402选择用于此次测试的迭代的线程调度配置(如果适当的话还有控制参数)来开始迭代过程。接下来,在步骤454,用适当的线程调度选择值(定义)(如果适当的话还有控制参数)注释的可执行程序被生成,并且在步骤456,该流程根据该可执行程序要在硬件(即,GPU 12)上还是在仿真上进行测试而分支。对于硬件测试,该流程进行到步骤458,其中可执行程序被传递给GPU 12以供执行,并且,在步骤460,分析功能400从GPU 12的性能控制电路30接收性能数据。可替代地,如果可执行程序要在GPU仿真408上进行测试,则该流程从步骤456进行到步骤462,在步骤462中,可执行程序被传递给GPU仿真408以供执行。注意,如上所述,当通过仿真路径进行时,可能出现实际上只有部分可执行程序被生成和测试的情况。然后,在步骤464,分析功能400从GPU仿真408的性能控制功能412接收性能数据。然后,无论是硬件还是仿真路径,接着均是在步骤466,由分析功能400判定是否存在另一线程调度或控制参数设置要测试。如果存在,则该流程返回到步骤452,以执行对要被测试的下一线程调度配置或控制参数的选择。一旦所有线程调度配置和控制参数均被测试了,则在步骤468,编译器生成用于GPU 12的、用给出优选的性能数据的线程调度选择值(定义)(如果适当的话还有控制参数选择值)注释的最终可执行程序。
图15示意性地示出了可被用于实现上述技术中的一些的类型的通用计算设备500。通用计算设备500包括通过总线522连接在一起的中央处理单元(CPU)502、随机存取存储器(RAM)504和只读存储器(ROM)506。其还进一步包括网络接口卡508(NIC)、硬盘驱动器(HDD)510、显示驱动器512、显示器514、具有键盘518和鼠标520的用户输入/输出(I/O)电路516,所有这些均通过公用总线522进行连接。在操作中,例如当提供上述编译器中的至少一个的功能时,中央处理单元502将执行计算机程序指令,该计算机程序指令例如可以被存储在随机存取存储器504和/或只读存储器506中。此外,程序指令能够从硬盘驱动器510中取回或通过网络接口卡508动态下载。所执行的处理的结果可通过连接的显示驱动器512和显示器514显示给用户。用于控制通用计算设备500的用户输入可从键盘518或鼠标520,通过连接的用户输入输出电路516来接收。应该理解的是,计算机程序可以各种不同的计算机语言来编写。计算机程序可被本地存储在记录介质上或被动态地下载到通用计算设备500。当在适当的计算机程序的控制下进行操作时,通用计算设备500能够执行上述编译器相关的技术,并且能够被认为形成了用于执行相应的上述技术的编译器。注意,编译器为其生成可执行程序的GPU通常也被连接到总线522,但是这里未示出这一点,因为仅示出了提供编译器自身的设备的示例特征。通用计算设备500的架构可相当多样,而图15只是一个示例。
虽然本文描述了具体实施例,应该理解的是,本发明不限于此,并且在本发明的范围内可对其做出很多修改和附加。例如,在不脱离本发明的范围的情况下,可做出以下独立权利要求的特征和从属权利要求的特征的各种组合。
本发明的工作得到了欧盟第七框架计划[FP7/2007-2013]在拨款协议号287767.14下的经费。
本技术的各种进一步的示例在以下被编号的条款中列出:
1.一种用于以单程序多数据的方式对目标数据集执行数据处理的装置,所述装置包括:
执行电路,所述执行电路被配置为执行多个线程以执行所述数据处理;
线程调度配置存储设备,所述线程调度配置存储设备被配置为存储定义多个线程调度配置的信息,每个线程调度配置定义所述多个线程要由所述执行电路执行的顺序;以及
线程调度电路,所述线程调度电路被配置为响应于线程调度选择信号使得所述执行电路以选定顺序执行所述多个线程,所述选定顺序由多个线程调度配置中的选定线程调度配置来定义。
2.如条款1所述的装置,其中所述执行电路包括多个处理器核,所述线程调度电路包括作业管理器电路,而所述选定的线程调度配置进一步定义由所述作业管理器电路执行的线程到核的分配。
3.如任意前述条款所述的装置,其中所述线程调度电路进一步包括随机访问线程池存储设备,所述随机访问线程池存储设备被配置为存储能够即刻用于由所述执行电路执行的线程的指示。
4.一种编译源程序的方法,所述源程序定义在装置上以单程序多数据的方式对目标数据集执行的数据处理,其中所述装置包括:
执行电路,所述执行电路被配置为执行多个线程以执行所述数据处理;
线程调度配置存储设备,所述线程调度配置存储设备被配置为存储定义多个线程调度配置的信息,每个线程调度配置定义多个线程要由所述执行电路执行的顺序;以及
线程调度电路,所述线程调度电路被配置为响应于线程调度选择值使得所述执行电路以选定顺序执行所述多个线程,所述选定顺序由多个线程调度配置中的选定线程调度配置来定义,所述方法包括以下步骤:
根据从分析程序获得的分析信息来选择所述选定线程调度配置,所述分析程序使用源程序作为输入来实行;以及
基于所述源程序生成用于所述装置的可执行程序,其中所述可执行程序是使用与在选择步骤中选择的所述选定线程调度配置相对应的线程调度选择值的定义来注释的。
5.如条款4所述的方法,其中所述分析程序包括以下步骤:
分析所述源程序以确定将由所述多个线程的线程集执行的存储器访问集;
计算将针对所述线程集中的每对线程的存储器访问之间的相关性进行量化的相似性度量;以及
选择所述选定线程调度配置,以使得所述选定顺序使得所述相似性度量指示为高相关性的线程对以所述选定顺序、以彼此靠近的排序距离被执行。
6.如条款5所述的方法,其中所述线程集是所述多个线程的少数子集。
7.如条款6所述的方法,其中所述线程的少数子集被选择以在偏离所有多个线程的起始处的预定偏移处开始。
8.如条款4-7中的任一项所述的方法,其中所述相似性度量对针对每个线程对的多个存储器访问对之间的相关性进行量化。
9.如条款4-8中的任一项所述的方法,其中所述相似性度量根据距离度量进行配置,所述距离度量确定了两个存储器访问之间的最大存储器空间距离,对于所述最大存储空间,所述两个存储器访问可由所述相似性度量确定为具有非零相关性。
10.如条款9所述的方法,其中所述最大存储器空间距离由数据处理装置中的缓存行大小给出。
11.如条款9所述的方法,其中所述最大存储器空间距离由所述两个存储器访问所属的两个线程之间的排序距离给出。
12.如条款5-11中的任一项所述的方法,其中所述多个线程调度配置中的至少一些线程调度配置被进一步根据控制参数进行配置。
13.如条款12所述的方法,其中所述多个控制参数的值与所述控制参数的几何级数相对应。
14.如条款13所述的方法,其中所述几何级数是所述控制参数的以二为底的幂。
15.如条款12-14中的任一项所述的方法,其中所述控制参数是跨步值,所述跨步值确定被跳过以找到所述选定顺序中的下一线程的线程的数目,所述选定顺序中的下一线程被确定为遵从所述多个线程的总数的模。
16.如条款12-14中的任一项所述的方法,其中所述控制参数是至少一个分片尺寸值,所述分片尺寸值确定片在所述目标数据集的二维坐标空间中的尺寸,并且其中所述选定顺序使得所述执行电路基于逐片的方式来执行所述多个线程。
17.如条款4所述的方法,其中所述分析程序包括:
基于所述源程序测试生成用于数据处理装置的测试可执行程序,其中所述测试可执行程序是使用与测试线程调度配置相对应的测试线程调度选择值定义来注释的;
使得所述测试可执行程序在所述装置上执行,其中所述装置进一步包括性能控制电路,所述性能控制电路被配置为收集关于由所述执行电路执行的所述数据处理的性能数据;
从所述装置接收所述性能数据;
重复所述测试生成、使得和接收步骤,其中对于每次重复,所述测试可执行程序是使用与新的测试线程调度配置相对应的新的测试线程调度选择值定义来注释的,
并且在所述生成步骤中,所述线程调度选择信号是根据所述性能数据生成的。
18.如条款4所述的方法,其中所述分析程序包括:
基于所述源程序测试生成至少部分测试可执行程序,其中所述至少部分测试可执行程序是使用与测试线程调度配置相对应的测试线程调度选择值定义来注释的;
使得所述至少部分测试可执行程序在所述装置的至少部分仿真上执行,其中所述装置的至少部分仿真进一步包括性能控制功能,所述性能控制功能被配置为收集关于由所述装置的至少部分仿真执行的数据处理的性能数据;
从所述装置的至少部分仿真接收所述性能数据;
重复所述测试生成、使得和接收步骤,其中对于每次重复,所述测试可执行程序是使用与新的测试线程调度配置相对应的新的测试线程调度选择值定义来注释的,
并且在所述生成步骤中,所述线程调度选择信号是根据所述性能数据生成的。
19.如条款18所述的方法,其中所述装置的至少部分仿真包括所述装置内的缓存的模型。
20.一种以非暂态方式存储计算机程序的计算机可读存储介质,所述计算机程序被配置为使得计算机执行如条款4-19中的任一项所述的方法。
21.本文参照附图大体上描述了一种用于以单程序多数据的方式对目标数据集执行数据处理的装置。
22.本文参照附图大体上描述了一种以单程序多数据的方式对目标数据集执行数据处理的方法。
23.本文参照附图大体上描述了一种编译定义在装置上以单程序多数据的方式对目标数据集执行的数据处理的源程序的方法。
Claims (20)
1.一种用于以单程序多数据的方式对目标数据集执行数据处理的装置,所述装置包括:
执行电路,所述执行电路被配置为执行多个线程以执行所述数据处理;
线程调度配置存储设备,所述线程调度配置存储设备被配置为存储定义多个线程调度配置的信息,每个线程调度配置定义所述多个线程将由所述执行电路执行的顺序;以及
线程调度电路,所述线程调度电路被配置为响应于线程调度选择信号使得所述执行电路以选定顺序执行所述多个线程,所述选定顺序由多个线程调度配置中的选定线程调度配置来定义。
2.如权利要求1所述的装置,进一步包括性能控制电路,所述性能控制电路被配置为收集与由所述执行电路执行的数据处理相关的性能数据,并根据所述性能数据生成所述线程调度选择信号。
3.如权利要求2所述的装置,其中,所述性能控制电路被配置为控制性能分析过程,所述性能分析过程包括以下步骤:
选择要被执行的多个线程的少数子集;
控制所述执行电路以由第一线程调度配置定义的第一选定顺序来执行所述多个线程的少数子集中的第一子集;
改变所述线程调度选择信号以使得所述执行电路以由下一线程调度配置定义的下一选定顺序来执行所述多个线程的少数子集中的下一子集;以及
重复所述改变步骤,直到所述线程的少数子集中的所有线程均已被所述执行电路执行,
其中,所述性能控制电路被配置为设置所述线程选择信号以使得所述执行电路执行所述多个线程的多数剩余子集,所述多个线程的多数剩余子集将被运行以按照由在所述性能分析过程中进行测试的选定线程调度定义的顺序对所述目标数据集执行所述数据处理。
4.如权利要求3所述的装置,其中,所述第一子集和下一子集的每一个均与线程的工作组相对应,其中线程的工作组是所述多个线程中由所述装置的程序员定义或默认设置的选定子集。
5.如权利要求3所述的装置,其中所述多个线程调度配置中的至少一些线程调度配置被进一步根据控制参数进行配置,并且所述性能分析过程进一步包括针对所述控制参数的多个值收集与由所述执行电路执行的数据处理相关的性能数据。
6.如权利要求5所述的装置,其中,所述控制参数的多个值与所述控制参数的几何级数相对应。
7.如权利要求6所述的装置,其中,所述几何级数是所述控制参数的以二为底的幂。
8.如权利要求5所述的装置,其中,所述控制参数是跨步值,所述跨步值确定被跳过以找到所述选定顺序中的下一线程的线程的数目,所述选定顺序中的下一线程被确定为遵从所述多个线程的总数的模。
9.如权利要求5所述的装置,其中,所述控制参数是至少一个分片尺寸值,所述分片尺寸值确定片在所述线程的至少二维坐标空间中的尺寸,并且其中所述选定顺序使得所述执行电路基于逐片的方式来执行所述多个线程。
10.如权利要求3所述的装置,其中,所述性能控制电路被配置为以预定间隔重复所述性能分析过程。
11.如权利要求3所述的装置,其中,所述性能控制电路被配置为选择所述线程的少数子集,以在偏离所有多个线程的起始处的预定偏移处开始。
12.如权利要求2所述的装置,其中,所述性能控制电路被配置为测量所述数据处理的性能对所用时间的度量作为所述性能数据。
13.如权利要求2所述的装置,其中,所述性能控制电路被配置为测量所述数据处理的能量使用度量作为所述性能数据。
14.如权利要求2所述的装置,其中,所述性能控制电路包括至少一个事件计数器,所述事件计数器被配置为对预定事件在所述数据处理的过程中发生的次数进行计数作为所述性能数据。
15.如权利要求14所述的装置,其中,所述预定事件是形成所述装置的一部分的缓存中的缓存未命中。
16.如权利要求15所述的装置,其中,所述执行电路包括多个处理器核,并且所述缓存被所述多个处理器核共享。
17.如权利要求1所述的装置,被进一步配置为从外部源接收所述线程调度选择信号。
18.如权利要求17所述的装置,其中,所述装置被配置为接收定义将以单程序多数据的方式对目标数据集执行的数据处理的指令集,其中所述线程调度选择信号由所述装置根据与所述指令集相关联的线程调度选择值定义来生成。
19.一种以单程序多数据的方式对目标数据集执行数据处理的方法,所述方法包括以下步骤:
执行多个线程以执行所述数据处理;
存储定义多个线程调度配置的信息,每个线程调度配置定义多个线程将在所述执行步骤中执行的顺序;以及
响应于线程调度选择信号控制所述多个线程以由所述多个线程调度配置中的选定线程调度配置定义的选定顺序来执行。
20.一种用于以单程序多数据的方式对目标数据集执行数据处理的装置,所述装置包括:
用于执行多个线程以执行所述数据处理的装置;
用于存储定义多个线程调度配置的信息的装置,每个线程调度配置定义所述多个线程将由用于执行多个线程的装置执行的顺序;以及
用于响应于线程调度选择信号控制所述多个线程以由所述多个线程调度配置中的选定线程调度配置定义的选定顺序来执行的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1321841.7A GB2521155B (en) | 2013-12-10 | 2013-12-10 | Configuring thread scheduling on a multi-threaded data processing apparatus |
GB1321841.7 | 2013-12-10 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104699461A true CN104699461A (zh) | 2015-06-10 |
CN104699461B CN104699461B (zh) | 2019-04-05 |
Family
ID=50000498
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410725587.2A Active CN104699461B (zh) | 2013-12-10 | 2014-12-03 | 在多线程数据处理装置上对线程调度进行配置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10733012B2 (zh) |
KR (1) | KR102299581B1 (zh) |
CN (1) | CN104699461B (zh) |
GB (1) | GB2521155B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109814989A (zh) * | 2018-12-12 | 2019-05-28 | 中国航空工业集团公司西安航空计算技术研究所 | 一种分级优先的统一染色图形处理器warp调度装置 |
CN109901840A (zh) * | 2019-02-14 | 2019-06-18 | 中国科学院计算技术研究所 | 一种线程间冗余删除的异构编译优化方法 |
CN110519329A (zh) * | 2019-07-23 | 2019-11-29 | 苏州浪潮智能科技有限公司 | 一种并发处理samba协议请求的方法、设备及可读介质 |
CN114860341A (zh) * | 2022-05-19 | 2022-08-05 | 北京百度网讯科技有限公司 | 线程配置方法、设备、装置、存储介质及程序产品 |
CN117389712A (zh) * | 2023-12-12 | 2024-01-12 | 沐曦集成电路(南京)有限公司 | 一种gpu多线程调度管理*** |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9632823B1 (en) * | 2014-09-08 | 2017-04-25 | Amazon Technologies, Inc. | Multithreaded application thread schedule selection |
US9824414B2 (en) * | 2014-12-09 | 2017-11-21 | Intel Corporation | Thread dispatching for graphics processors |
GB2539428B (en) * | 2015-06-16 | 2020-09-09 | Advanced Risc Mach Ltd | Data processing apparatus and method with ownership table |
US10649810B2 (en) * | 2015-12-28 | 2020-05-12 | Advanced Micro Devices, Inc. | Data driven scheduler on multiple computing cores |
US10102036B2 (en) | 2016-02-05 | 2018-10-16 | International Business Machines Corporation | Providing additional thread context to assist memory locality |
EP3258388A1 (en) * | 2016-06-17 | 2017-12-20 | Tata Consultancy Services Limited | Parallelization techniques for variable selection and predictive models generation and its applications |
WO2018014324A1 (zh) * | 2016-07-22 | 2018-01-25 | 北京大学深圳研究生院 | 一种实时虚拟视点合成的方法及装置 |
US10929944B2 (en) * | 2016-11-23 | 2021-02-23 | Advanced Micro Devices, Inc. | Low power and low latency GPU coprocessor for persistent computing |
US10529049B2 (en) * | 2017-03-27 | 2020-01-07 | Oracle International Corporation | Efficient parallel algorithm for integral image computation for many-core CPUs |
CN108089958B (zh) * | 2017-12-29 | 2021-06-08 | 珠海市君天电子科技有限公司 | Gpu测试方法、终端设备和计算机可读存储介质 |
US10402224B2 (en) | 2018-01-03 | 2019-09-03 | Intel Corporation | Microcontroller-based flexible thread scheduling launching in computing environments |
KR102491606B1 (ko) * | 2018-01-09 | 2023-01-26 | 삼성전자주식회사 | 커맨드 세트 기반 리플레이를 통해 수행 정보를 수집하는 프로세서 장치 |
US11010161B2 (en) * | 2018-03-31 | 2021-05-18 | Micron Technology, Inc. | Multiple types of thread identifiers for a multi-threaded, self-scheduling reconfigurable computing fabric |
US11281496B2 (en) | 2019-03-15 | 2022-03-22 | Intel Corporation | Thread group scheduling for graphics processing |
KR102251869B1 (ko) * | 2019-05-24 | 2021-05-12 | 서강대학교 산학협력단 | 파일 시스템 및 이를 이용한 단일 파일 쓰기 병렬화 방법 |
CN112214310B (zh) * | 2020-09-09 | 2022-08-02 | 苏州浪潮智能科技有限公司 | 一种数据集缓存排队的方法和装置 |
US20230195626A1 (en) * | 2021-12-21 | 2023-06-22 | Advanced Micro Devices, Inc. | Variable dispatch walk for successive cache accesses |
WO2024051911A1 (en) * | 2022-09-05 | 2024-03-14 | Telefonaktiebolaget Lm Ericsson (Publ) | A computer software module scheduler, a circuitry scheduler, a scheduler and a method for improved scheduling |
CN116521351B (zh) * | 2023-07-03 | 2023-09-05 | 建信金融科技有限责任公司 | 多线程任务调度方法、装置、存储介质及处理器 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090307698A1 (en) * | 2008-06-10 | 2009-12-10 | Dell Products, Lp | Information handling system power management device and methods thereof |
CN101833438A (zh) * | 2010-04-19 | 2010-09-15 | 浙江大学 | 一种基于多重并行的数据通用处理方法 |
US20110072244A1 (en) * | 2009-09-24 | 2011-03-24 | John Erik Lindholm | Credit-Based Streaming Multiprocessor Warp Scheduling |
Family Cites Families (72)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4318173A (en) | 1980-02-05 | 1982-03-02 | The Bendix Corporation | Scheduler for a multiple computer system |
US4333144A (en) | 1980-02-05 | 1982-06-01 | The Bendix Corporation | Task communicator for multiple computer system |
US5724586A (en) | 1996-09-30 | 1998-03-03 | Nec Research Institute, Inc. | Method for improving cache locality of a computer program |
US6631454B1 (en) * | 1996-11-13 | 2003-10-07 | Intel Corporation | Processor and data cache with data storage unit and tag hit/miss logic operated at a first and second clock frequencies |
US6473780B1 (en) * | 1998-04-01 | 2002-10-29 | Intel Corporation | Scheduling of direct memory access |
DE19822543A1 (de) | 1998-05-20 | 1999-11-25 | Alcatel Sa | Verfahren zum Zuteilen von Aufträgen, Datenverarbeitssystem, Client-Datenbearbeitungsknoten und computerlesbares Speichermedium |
US6226787B1 (en) * | 1999-01-25 | 2001-05-01 | Hewlett-Packard Company | Visualization method and system for dynamically displaying operations of a program |
US6341338B1 (en) | 1999-02-04 | 2002-01-22 | Sun Microsystems, Inc. | Protocol for coordinating the distribution of shared memory |
US6542921B1 (en) * | 1999-07-08 | 2003-04-01 | Intel Corporation | Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor |
US6578065B1 (en) * | 1999-09-23 | 2003-06-10 | Hewlett-Packard Development Company L.P. | Multi-threaded processing system and method for scheduling the execution of threads based on data received from a cache memory |
US6832367B1 (en) * | 2000-03-06 | 2004-12-14 | International Business Machines Corporation | Method and system for recording and replaying the execution of distributed java programs |
US6854108B1 (en) * | 2000-05-11 | 2005-02-08 | International Business Machines Corporation | Method and apparatus for deterministic replay of java multithreaded programs on multiprocessors |
DE10061001B4 (de) | 2000-12-08 | 2005-05-04 | Robert Bosch Gmbh | Verfahren und Steuergerät zur Steuerung von technischen Vorgängen in einem Kraftfahrzeug, sowie Speicherelement und Steuerprogramm hierfür |
US20040015684A1 (en) | 2002-05-30 | 2004-01-22 | International Business Machines Corporation | Method, apparatus and computer program product for scheduling multiple threads for a processor |
US7401335B2 (en) | 2003-02-28 | 2008-07-15 | Wind River Systems, Inc. | Single stack kernel |
US7257633B2 (en) | 2003-03-03 | 2007-08-14 | Sun Microsystems, Inc. | Dynamic allocation of a pool of threads |
US7337443B2 (en) | 2003-06-30 | 2008-02-26 | Microsoft Corporation | Method and apparatus for processing program threads |
US7441101B1 (en) | 2003-12-10 | 2008-10-21 | Cisco Technology, Inc. | Thread-aware instruction fetching in a multithreaded embedded processor |
US7310722B2 (en) * | 2003-12-18 | 2007-12-18 | Nvidia Corporation | Across-thread out of order instruction dispatch in a multithreaded graphics processor |
US7802255B2 (en) | 2003-12-19 | 2010-09-21 | Stmicroelectronics, Inc. | Thread execution scheduler for multi-processing system and method |
JP2007519103A (ja) | 2004-01-08 | 2007-07-12 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | マルチプロセッサシステムにおけるリソース管理 |
US7458077B2 (en) * | 2004-03-31 | 2008-11-25 | Intel Corporation | System and method for dynamically adjusting a thread scheduling quantum value |
US8533716B2 (en) | 2004-03-31 | 2013-09-10 | Synopsys, Inc. | Resource management in a multicore architecture |
US20050237329A1 (en) | 2004-04-27 | 2005-10-27 | Nvidia Corporation | GPU rendering to system memory |
US7941645B1 (en) | 2004-07-28 | 2011-05-10 | Nvidia Corporation | Isochronous pipelined processor with deterministic control |
US7634774B2 (en) | 2004-09-13 | 2009-12-15 | Integrated Device Technology, Inc. | System and method of scheduling computing threads |
US9038070B2 (en) * | 2004-09-14 | 2015-05-19 | Synopsys, Inc. | Debug in a multicore architecture |
US7418576B1 (en) * | 2004-11-17 | 2008-08-26 | Nvidia Corporation | Prioritized issuing of operation dedicated execution unit tagged instructions from multiple different type threads performing different set of operations |
JP4606142B2 (ja) | 2004-12-01 | 2011-01-05 | 株式会社ソニー・コンピュータエンタテインメント | スケジューリング方法、スケジューリング装置およびマルチプロセッサシステム |
DE102004061339A1 (de) | 2004-12-20 | 2006-06-29 | Infineon Technologies Ag | Scheduling-Verfahren, insbesondere Kontex-Scheduling-Verfahren, und Einrichtung zur Verwendung bei einem Scheduling-Verfahren |
US7681014B2 (en) * | 2005-02-04 | 2010-03-16 | Mips Technologies, Inc. | Multithreading instruction scheduler employing thread group priorities |
US8387052B2 (en) | 2005-03-14 | 2013-02-26 | Qnx Software Systems Limited | Adaptive partitioning for operating system |
US7659899B2 (en) | 2005-08-08 | 2010-02-09 | Via Technologies, Inc. | System and method to manage data processing stages of a logical graphics pipeline |
US7659898B2 (en) | 2005-08-08 | 2010-02-09 | Via Technologies, Inc. | Multi-execution resource graphics processor |
US20070030280A1 (en) | 2005-08-08 | 2007-02-08 | Via Technologies, Inc. | Global spreader and method for a parallel graphics processor |
GB0519981D0 (en) | 2005-09-30 | 2005-11-09 | Ignios Ltd | Scheduling in a multicore architecture |
US7728841B1 (en) | 2005-12-19 | 2010-06-01 | Nvidia Corporation | Coherent shader output for multiple targets |
US8959515B2 (en) | 2006-01-18 | 2015-02-17 | International Business Machines Corporation | Task scheduling policy for limited memory systems |
US8001549B2 (en) * | 2006-04-27 | 2011-08-16 | Panasonic Corporation | Multithreaded computer system and multithread execution control method |
US8468532B2 (en) * | 2006-06-21 | 2013-06-18 | International Business Machines Corporation | Adjusting CPU time allocated to next thread based on gathered data in heterogeneous processor system having plurality of different instruction set architectures |
US8087029B1 (en) * | 2006-10-23 | 2011-12-27 | Nvidia Corporation | Thread-type-based load balancing in a multithreaded processor |
US8373716B2 (en) | 2007-02-14 | 2013-02-12 | Intel Benelux B.V. | Parallel approximation of distance maps |
US7853950B2 (en) * | 2007-04-05 | 2010-12-14 | International Business Machines Corporarion | Executing multiple threads in a processor |
WO2008155834A1 (ja) | 2007-06-20 | 2008-12-24 | Fujitsu Limited | 処理装置 |
US20090138683A1 (en) | 2007-11-28 | 2009-05-28 | Capps Jr Louis B | Dynamic instruction execution using distributed transaction priority registers |
US20090144745A1 (en) * | 2007-11-29 | 2009-06-04 | Gunnels John A | Performance Evaluation of Algorithmic Tasks and Dynamic Parameterization on Multi-Core Processing Systems |
JP5173712B2 (ja) * | 2008-09-30 | 2013-04-03 | ルネサスエレクトロニクス株式会社 | マルチスレッドプロセッサ |
JP5173711B2 (ja) | 2008-09-30 | 2013-04-03 | ルネサスエレクトロニクス株式会社 | マルチスレッドプロセッサ及びそのハードウェアスレッドのスケジュール方法 |
US9244732B2 (en) | 2009-08-28 | 2016-01-26 | Vmware, Inc. | Compensating threads for microarchitectural resource contentions by prioritizing scheduling and execution |
GB2471067B (en) | 2009-06-12 | 2011-11-30 | Graeme Roy Smith | Shared resource multi-thread array processor |
US8683472B2 (en) * | 2009-09-01 | 2014-03-25 | International Business Machines Corporation | Adjusting thread priority to optimize computer system performance and the utilization of computer system resources |
US8310492B2 (en) * | 2009-09-03 | 2012-11-13 | Ati Technologies Ulc | Hardware-based scheduling of GPU work |
US9798543B2 (en) | 2009-09-24 | 2017-10-24 | Nvidia Corporation | Fast mapping table register file allocation algorithm for SIMT processors |
US8364739B2 (en) | 2009-09-30 | 2013-01-29 | International Business Machines Corporation | Sparse matrix-vector multiplication on graphics processor units |
US8166237B1 (en) | 2009-10-23 | 2012-04-24 | Altera Corporation | Configurable allocation of thread queue resources in an FPGA |
US8533719B2 (en) * | 2010-04-05 | 2013-09-10 | Oracle International Corporation | Cache-aware thread scheduling in multi-threaded systems |
KR101686082B1 (ko) | 2010-07-22 | 2016-12-28 | 삼성전자주식회사 | 결정적 프로그레스 인덱스 기반 락 제어 및 스레드 스케줄링 방법 및 장치 |
WO2012020478A1 (ja) | 2010-08-10 | 2012-02-16 | 富士通株式会社 | スケジューラ、マルチコアプロセッサシステムおよびスケジューリング方法 |
US8566647B2 (en) | 2010-12-20 | 2013-10-22 | Microsoft Corporation | Debugger presentation of parallel application threads |
US20120179935A1 (en) * | 2011-01-11 | 2012-07-12 | Nec Laboratories America, Inc. | Dynamic test generation for concurrent programs |
US9170843B2 (en) | 2011-09-24 | 2015-10-27 | Elwha Llc | Data handling apparatus adapted for scheduling operations according to resource allocation based on entitlement |
US9465657B2 (en) | 2011-07-19 | 2016-10-11 | Elwha Llc | Entitlement vector for library usage in managing resource allocation and scheduling based on usage and priority |
CN104040500B (zh) * | 2011-11-15 | 2018-03-30 | 英特尔公司 | 基于线程相似性的调度线程执行 |
JP5850774B2 (ja) | 2012-03-22 | 2016-02-03 | ルネサスエレクトロニクス株式会社 | 半導体集積回路装置及びそれを用いたシステム |
US20130283101A1 (en) * | 2012-04-18 | 2013-10-24 | The Regents Of The University Of Michigan | Trace-Driven Verification of Multithreaded Programs Using SMT-Based Analysis |
US9317297B2 (en) * | 2012-09-27 | 2016-04-19 | Intel Corporation | Replay execution of instructions in thread chunks in the chunk order recorded during previous execution |
JP6017260B2 (ja) | 2012-10-17 | 2016-10-26 | ルネサスエレクトロニクス株式会社 | マルチスレッドプロセッサ |
US8949841B2 (en) * | 2012-12-27 | 2015-02-03 | Nvidia Corporation | Approach for a configurable phase-based priority scheduler |
US9274832B2 (en) * | 2013-02-07 | 2016-03-01 | Htc Corporation | Method and electronic device for thread scheduling |
US20140237474A1 (en) | 2013-02-19 | 2014-08-21 | Appsense Limited | Systems and methods for organizing dependent and sequential software threads |
US9507637B1 (en) | 2013-08-08 | 2016-11-29 | Google Inc. | Computer platform where tasks can optionally share per task resources |
US10386900B2 (en) * | 2013-09-24 | 2019-08-20 | Intel Corporation | Thread aware power management |
-
2013
- 2013-12-10 GB GB1321841.7A patent/GB2521155B/en active Active
-
2014
- 2014-12-02 US US14/557,881 patent/US10733012B2/en active Active
- 2014-12-02 KR KR1020140170263A patent/KR102299581B1/ko active IP Right Grant
- 2014-12-03 CN CN201410725587.2A patent/CN104699461B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090307698A1 (en) * | 2008-06-10 | 2009-12-10 | Dell Products, Lp | Information handling system power management device and methods thereof |
US20110072244A1 (en) * | 2009-09-24 | 2011-03-24 | John Erik Lindholm | Credit-Based Streaming Multiprocessor Warp Scheduling |
CN101833438A (zh) * | 2010-04-19 | 2010-09-15 | 浙江大学 | 一种基于多重并行的数据通用处理方法 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109814989A (zh) * | 2018-12-12 | 2019-05-28 | 中国航空工业集团公司西安航空计算技术研究所 | 一种分级优先的统一染色图形处理器warp调度装置 |
CN109814989B (zh) * | 2018-12-12 | 2023-02-10 | 中国航空工业集团公司西安航空计算技术研究所 | 一种分级优先的统一染色图形处理器warp调度装置 |
CN109901840A (zh) * | 2019-02-14 | 2019-06-18 | 中国科学院计算技术研究所 | 一种线程间冗余删除的异构编译优化方法 |
CN109901840B (zh) * | 2019-02-14 | 2020-10-27 | 中国科学院计算技术研究所 | 一种线程间冗余删除的异构编译优化方法 |
CN110519329A (zh) * | 2019-07-23 | 2019-11-29 | 苏州浪潮智能科技有限公司 | 一种并发处理samba协议请求的方法、设备及可读介质 |
CN110519329B (zh) * | 2019-07-23 | 2022-06-07 | 苏州浪潮智能科技有限公司 | 一种并发处理samba协议请求的方法、设备及可读介质 |
CN114860341A (zh) * | 2022-05-19 | 2022-08-05 | 北京百度网讯科技有限公司 | 线程配置方法、设备、装置、存储介质及程序产品 |
CN114860341B (zh) * | 2022-05-19 | 2023-09-22 | 北京百度网讯科技有限公司 | 线程配置方法、设备、装置、存储介质 |
CN117389712A (zh) * | 2023-12-12 | 2024-01-12 | 沐曦集成电路(南京)有限公司 | 一种gpu多线程调度管理*** |
CN117389712B (zh) * | 2023-12-12 | 2024-03-12 | 沐曦集成电路(南京)有限公司 | 一种gpu多线程调度管理*** |
Also Published As
Publication number | Publication date |
---|---|
US10733012B2 (en) | 2020-08-04 |
KR102299581B1 (ko) | 2021-09-08 |
GB2521155A (en) | 2015-06-17 |
US20150160970A1 (en) | 2015-06-11 |
GB201321841D0 (en) | 2014-01-22 |
KR20150067722A (ko) | 2015-06-18 |
CN104699461B (zh) | 2019-04-05 |
GB2521155B (en) | 2021-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104699461A (zh) | 在多线程数据处理装置上对线程调度进行配置 | |
US10963787B2 (en) | Systems and methods for generation of sparse code for convolutional neural networks | |
Hamta et al. | A hybrid PSO algorithm for a multi-objective assembly line balancing problem with flexible operation times, sequence-dependent setup times and learning effect | |
Enmyren et al. | SkePU: a multi-backend skeleton programming library for multi-GPU systems | |
Jia et al. | GPURoofline: a model for guiding performance optimizations on GPUs | |
Kamthe et al. | A stochastic approach to estimating earliest start times of nodes for scheduling DAGs on heterogeneous distributed computing systems | |
Tohid et al. | Asynchronous execution of python code on task-based runtime systems | |
Treibig et al. | Performance patterns and hardware metrics on modern multicore processors: Best practices for performance engineering | |
Dong et al. | Characterizing the microarchitectural implications of a convolutional neural network (cnn) execution on gpus | |
KR20180034626A (ko) | 데이터 처리 그래프 컴파일 | |
Zhou et al. | A performance analysis framework for exploiting GPU microarchitectural capability | |
Marin et al. | MIAMI: A framework for application performance diagnosis | |
Grebhahn et al. | Experiments on optimizing the performance of stencil codes with spl conqueror | |
Kothapalli et al. | CPU and/or GPU: Revisiting the GPU vs. CPU myth | |
Van Delm et al. | HTVM: Efficient neural network deployment on heterogeneous TinyML platforms | |
WO2021054990A1 (en) | Systems and methods for generation of sparse code for convolutional neural networks | |
Goossens | Dataflow management, dynamic load balancing, and concurrent processing for real‐time embedded vision applications using Quasar | |
Jin et al. | Evaluating LULESH kernels on opencl FPGA | |
Medhat et al. | Managing the performance/error tradeoff of floating-point intensive applications | |
Paone et al. | An exploration methodology for a customizable opencl stereo-matching application targeted to an industrial multi-cluster architecture | |
Madougou et al. | Using colored petri nets for GPGPU performance modeling | |
Basthikodi et al. | HPC Based Algorithmic Species Extraction Tool for Automatic Parallelization of Program Code | |
Krömer et al. | An implementation of differential evolution for independent tasks scheduling on GPU | |
Cao et al. | SPMD performance analysis with parallel computing of MATLAB | |
Sharples et al. | A run control framework to streamline profiling, porting, and tuning simulation runs and provenance tracking of geoscientific applications |
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 |