CN112148295A - 信息处理设备和记录介质 - Google Patents
信息处理设备和记录介质 Download PDFInfo
- Publication number
- CN112148295A CN112148295A CN202010573576.2A CN202010573576A CN112148295A CN 112148295 A CN112148295 A CN 112148295A CN 202010573576 A CN202010573576 A CN 202010573576A CN 112148295 A CN112148295 A CN 112148295A
- Authority
- CN
- China
- Prior art keywords
- task
- executed
- cores
- data
- execution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000010365 information processing Effects 0.000 title claims abstract description 26
- 230000015654 memory Effects 0.000 claims abstract description 63
- 238000000034 method Methods 0.000 claims description 45
- 238000010586 diagram Methods 0.000 description 36
- 230000006870 function Effects 0.000 description 19
- 238000004364 calculation method Methods 0.000 description 6
- KZSNJWFQEVHDMF-UHFFFAOYSA-M valinate Chemical compound CC(C)C(N)C([O-])=O KZSNJWFQEVHDMF-UHFFFAOYSA-M 0.000 description 3
- 230000000717 retained effect Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000012447 hatching Effects 0.000 description 1
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
-
- 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/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- 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/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
-
- 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
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)
Abstract
提供了信息处理设备和记录介质。信息处理设备包括:多个核,其并行执行多个相应任务;以及多个缓存存储器,其与多个核中的每个核对应地设置并且存储对应的任务在执行时要引用的数据,并且其中,多个核中的至少一个核被配置成:针对核中的每个核,指定已执行的任务在执行时所引用的数据与尚未执行的任务在执行时要引用的数据之间的交叠,并且在多个核之中的具有最大交叠的核中执行尚未执行的任务。
Description
技术领域
本文讨论的实施方式涉及信息处理设备和计算机可读记录介质。
背景技术
非统一内存访问(NUMA)是并行计算机的架构之一。NUMA是以下架构,在该架构中通过互连来耦接包括核和主存储器的多个节点,并且核可以在同一节点中以高速来访问主存储器。
NUMA中的每个节点也称为NUMA节点。除了上述的核和主存储器之外,NUMA节点还被提供有缓存存储器。通过预先将在核中执行的任务所频繁引用的数据从主存储器传送至缓存存储器,可以提高任务引用数据的速度。
然而,由于前一任务引用的数据不一定被下一任务引用,因此在切换任务时可能不能重复使用缓存存储器,从而导致任务的执行速度的降低。
相关技术在日本公开特许公报第2009-104422号、日本公开特许公报第2006-260096号和日本公开特许公报第2019-49843号中描述。
相关技术也在Lee J.,Tsugane K.,Murai H.,Sato M.,“OpenMP Extension forExplicit Task Allocation on NUMA Architecture”,OpenMP:Memory,Device,andTasks,2016年,Springer国际出版,第89-101页中描述。
发明内容
根据一个方面,本实施方式的目的是提高任务的执行速度。
根据实施方式的方面,一种信息处理设备包括:多个核,其并行执行多个相应任务;以及多个缓存存储器,其与多个核中的每个核对应地设置并且存储对应的任务在执行时要引用的数据,并且其中,多个核中的至少一个核被配置成:针对核中的每个核,指定已执行的任务在执行时所引用的数据与尚未执行的任务在执行时要引用的数据之间的交叠,并且在多个核之中的具有最大交叠的核中执行尚未执行的任务。
[本发明的有益效果]
根据实施方式,可以提高任务的执行速度。
附图说明
图1是在研究中使用的并行计算机的硬件配置图;
图2是示意性地示出生成由在研究中使用的并行计算机执行的执行程序的方法的图;
图3是示意性地示出由在研究中使用的并行计算机执行的执行程序中的任务注册I/F和任务执行I/F的操作的图;
图4是根据第一实施方式的信息处理设备的硬件配置图;
图5是示意性地示出根据第一实施方式的生成通过信息处理设备执行的执行程序的方法的图;
图6是示出第一实施方式中的numa_val子句的格式的图;
图7是示出第一实施方式中的变量引用信息的图;
图8是根据第一实施方式的信息处理设备的功能配置图;
图9是示意性地示出根据第一实施方式的任务注册单元的操作的图;
图10是示意性地示出根据第一实施方式的任务执行处理单元的操作的图;
图11是示出根据第一实施方式的计算方法的总体流程的流程图;
图12是示出图11的步骤S2中的任务注册I/F的执行处理的流程图;
图13是示出图11的步骤S3中的任务执行I/F的执行处理的流程图;
图14是示出图13的步骤S22中执行的识别处理的流程图;
图15是用于描述第一实施方式中使用的各个参数S、E和W的含义的示意图;
图16是示出第一实施方式中使用的源程序的示例的图;
图17是示出第一实施方式中由编译源程序的编译器获得的执行程序的图;
图18是示出第一实施方式中的任务注册I/F(TASK-A,vx[0:50])的变量引用信息的实际格式的图;
图19是示意性地示出在第一实施方式中当执行程序被中途执行时任务池和缓存状态表的内容的图;
图20是示出第一实施方式中的计算变量引用信息之间的交叠的方法的示意图;
图21是示意性地示出在第一实施方式中的执行任务TASK-E之后的任务池和缓存状态表的内容的图;
图22是示意性地示出了在第一实施方式中的执行任务TASK-F之后的任务池和缓存状态表的内容的图;以及
图23是示出第二实施方式中的任务执行I/F的执行处理的流程图。
具体实施方式
在描述本实施方式之前,将描述本申请的发明人所研究的问题。
图1是在该研究中使用的并行计算机的硬件配置图。
并行计算机1是采用NUMA作为架构的计算机,并且具有被识别为NUMA#0至NUMA#3的多个NUMA节点通过互连2耦接的架构。NUMA#0被提供有核C#0至C#3、缓存存储器Cache#0至Cache#3、以及主存储器MEM#0。NUMA#1被提供有核C#4至C#7、缓存存储器Cache#4至Cache#7、以及主存储器MEM#1。NUMA#2被提供有核C#8至C#11、缓存存储器Cache#8至Cache#11、以及主存储器MEM#2。NUMA#3被提供有核C#12至C#15、缓存存储器Cache#12至Cache#15、以及主存储器MEM#3。
核C#0至C#15中的每一个是用于计算的硬件,包括算术和逻辑单元(ALU)、寄存器堆等。在本示例中,假定针对NUMA#0至NUMA#3中的每一个所提供的核的数量是4个。在由并行计算机1执行的执行程序中可以彼此并行执行的部分被称为任务。在并行计算机1中,在核C#0至C#15中并行执行多个任务,从而提高由多个任务组成的执行程序的吞吐量。
缓存存储器Cache#0至Cache#15是对应于相应核C#0至C#15而提供的数据缓存存储器。在本示例中,一个核可以只访问与该核在同一NUMA节点中的一个数据缓存存储器。例如,核C#0可以仅访问缓存存储器Cache#0。
主存储器MEM#0至MEM#3是动态随机存取存储器(DRAM),其中的每一个被设置在NUMA#0至NUMA#3中的对应NUMA中。主存储器MEM#0至MEM#3的地址空间不交叠,并且引用主存储器MEM#0至MEM#3中的任一主存储器中的数据来执行每个任务。
针对特定的核,在相同NUMA节点中存在的主存储器被称为本地存储器,而在不同节点中存在的主存储器被称为远程存储器。对本地存储器的访问被称为本地访问,而对远程存储器的访问被称为远程访问。远程访问比本地访问花费更多的时间,因为在远程访问中必须经由互连2对另一个NUMA节点进行访问。
因此,在该示例中,任务被分配给各个核的线程,以便以如下所描述的方式尽可能地避免远程访问的发生。
图2是示意性地示出生成由并行计算机1执行的执行程序的方法的图。
在图2的示例中,并行计算机1可执行的执行程序bar.out由编译源程序bar.c的编译器生成。
源程序bar.c是用C语言编写的源文件。在源文件中,可以并行执行的部分由程序员明确地指定为任务。OpenMP的任务构造用于规范。任务构造是将在命令#pragma omptask numa_val()之后的{}的内容的处理指定为任务的构造。该命令中的“numa_val()”是用于指示任务要引用的变量的子句,并且在下文中被称为numa_val子句。
在图2中,由任务TASK-X引用的变量va通过#pragma omp task numa_val(va){//TASK-X(引用va的任务)}指定。
编译器从源程序bar.c中切割出各个任务,并将与各个任务对应的任务注册I/F插入到执行程序bar.out中。任务注册I/F是用于将每个任务注册在任务池(稍后描述)中的程序,并且是针对多个任务中的每一个生成的。作为自变量的TASK-X和TASK-Y是函数指针,每个函数指针均指示相应任务的处理的头地址。&va和&vb分别是变量va和变量vb的地址。
编译器将一个任务执行I/F插入到执行程序bar.out中。任务执行I/F是通过调用稍后将描述的运行时例程来执行多个任务的程序。
图3是示意性地示出任务注册I/F和任务执行I/F的操作的图。
如图3所示,当执行任务注册I/F(TASK-X,&va)时,在任务池(1)中注册函数指针TASK-X和优先执行的线程ID#1、ID#2、……。ID#1和ID#2是用于识别优先执行由函数指针TASK-X指定的任务的相应线程的标识符,并且值越小,优先级越高。
在该示例中,任务注册I/F将&va作为自变量传递至系统调用get_mempolicy以识别主存储器MEM#0至MEM#3之中的地址&va所位于的主存储器。任务注册I/F将所识别的主存储器所属的NUMA节点的核的线程与TASK-X相关联地注册为优先执行的线程。
类似地,通过执行任务注册I/F(TASK-Y,&vb),地址&vb所位于的节点的核的线程被注册为优先执行TASK-Y的线程。
接下来,任务执行I/F执行注册在任务池(2)中的任务。此时,线程ID#1、ID#2、……按照从具有最小值的线程开始的顺序被顺次地分配给核。
根据上述并行计算机1,通过使用numa_val子句中指定的变量va的地址&va,在NUMA#0至NUMA#3之中识别地址&va所位于的节点。在该节点中的核的线程内执行引用变量va的任务。因此,被认为可以降低在执行任务时发生远程访问的可能性,并且可以提高程序的执行速度。
然而,在该方法中,当在特定核中发生任务的切换时,存在切换后任务要引用的数据不存在于缓存存储器中的可能性,并且可能发生缓存未命中。因此,缓存存储器可能不能充分地提高任务执行的速度,并且难以提高任务的执行速度。
在下面描述能够通过抑制缓存未命中的发生来提高任务的执行速度的本实施方式。
(第一实施方式)
图4是根据第一实施方式的信息处理设备的硬件配置图。
信息处理设备10是采用NUMA作为架构的并行计算机,并且包括由NUMA#0至NUMA#3表示的四个NUMA节点11。#后面的数字表示用于识别每个NUMA节点11的节点ID。例如,NUMA#0的节点ID是“0”。
NUMA节点11通过诸如路由器或交换机的互连15耦接至彼此。
每个NUMA节点11包括核12、缓存存储器13和主存储器14。核12是提供有用于计算的ALU和寄存器堆的硬件。在单个NUMA节点11中提供多个核12。在该示例中,各个核12由C#0至C#15表示。#之后的数字是用于识别每个核12的核ID。例如,C#2的核ID是“2”。
任务被分配给多个核12中的每一个,使得多个任务被多个核12并行执行。
缓存存储器13是与每个核12对应设置的数据缓存并且存储在核12中执行的任务要引用的数据。缓存存储器13由cache#0至cache#15表示。#后面的数字是用于识别每个缓存存储器13的缓存ID。例如,cache#3的缓存ID是“3”。
存储器14是在NUMA节点11的每一个中提供的单个DRAM。在该示例中,各个主存储器14由MEM#0至MEM#3表示。#后面的数字是用于识别每个缓存存储器14的存储器ID。例如,MEM#1的存储器ID是“1”。
图5是示意性地示出生成通过信息处理设备10执行的执行程序的方法的图。
为了生成执行程序,程序员首先编写源程序21。源程序21用C语言编写,程序名为baz.c。源程序21也可以用Fortran或C++编写。
在源程序21中,程序员根据OpenMP的任务构造将可以并行执行的部分明确地指定为任务。在图5的示例中,两个任务由两个命令#pragmaomp task numa_val()来指定。
在该命令中使用上述numa_val子句。
图6是示出numa_val子句的格式的图。
如图6所示,“list”被指定为numa_val子句中的自变量。“list”是由多个标量变量(scalar)或多个数组段(array_section)组成的列表(val_1、val_2、……、val_N)。
每个数组段的索引由使用起始索引“lower”和数组长度“length”的[lower:length]来指定。例如,数组a[]的数组段a[lower:length]是具有a[lower]、a[lower+1]、……、a[lower+length-1]作为元素的数组。根据该示例,数组段a[10:5]是具有a[10]、a[11]、a[12]、a[13]和a[14]作为元素的数组。
多维数组段可以由numa_val子句指定。在这种情况下,数组段可以由使用数组的维数“dim”的array_section[lower_1:length_1][lower_2:length_2]……[lower_dim:length_dim]来指定。
再参照图5。
在源程序21中,变量va由第一命令#pragma omp task numa_val(va)在numa_val子句中指定。尽管变量va是标量变量,但是数组段可以根据图6中所示的格式由numa_val子句来指定。
接下来,编译器22编译源程序21以生成执行程序23。执行程序23是计算程序的示例,并且是可由信息处理设备10执行的二进制文件。在此示例中,执行程序23的名称为baz.out。
在编译期间,编译器22从源程序21中得到任务构造,并将与各个任务对应的任务注册I/F插入执行程序23中。同时,编译器22将任务执行I/F、用于注册的运行时例程23a和用于执行的运行时例程23b插入执行程序23中。
任务注册I/F的自变量是函数指针24和变量引用信息25。其中,函数指针24是指示每个任务的头地址的指针。当执行任务注册I/F时,这些自变量被传递至运行时例程23a。
图7是示出变量引用信息25的图。
变量引用信息25是用于指定尚未执行的任务在执行时要引用的数据的信息。在本示例中,变量引用信息25是编译器22基于源程序21的numa_val子句的自变量而生成的结构。结构的成员是由numa_val子句中指定的变量1至N组成的列表的数量N、变量1至N的头地址“adder”、变量1至N的类型大小“size”以及数组段的维数“dim”。
该结构中还包括声明长度、起始索引以及每个维数“dim”中的数组段的长度。例如,在维数“dim”为1的数组段中,声明长度“ext-1”、起始索引“lower-1”和长度“len-1”被包括在该结构中。
图8是根据本实施方式的信息处理设备10的功能配置图。
如图8所示,信息处理设备10包括任务注册单元41、任务执行处理单元42和存储单元43。这些单元中的每一个通过相互协作地执行上述的执行程序23的多个NUMA节点11中的多个核12和多个主存储器14来实现。每个单元的功能可以通过执行程序23的一个NUMA节点11中的一个核12和一个主存储器14来实现。
其中,任务注册单元41执行上述的任务注册I/F。
图9是示意性地示出任务注册单元41的操作的图。
当执行程序23被执行以到达任务注册I/F的起始地址时,任务注册I/F被执行。任务注册I/F调用用于注册的运行时例程23a,并将函数指针24和变量引用信息25传递至运行时例程23a(1)。
接下来,运行时例程23a将函数指针24和变量引用信息25彼此相关联地注册在任务池31中(2)。任务池31是任务信息的示例,是将未执行的任务的函数指针24与在执行该任务时要引用的变量引用信息25相关联的信息。在任务池31中与变量引用信息25相关联的信息不限于函数指针24,只要该信息使得能够识别任务即可。例如,可以采用任务名称来代替函数指针24。
如图7所示,任务池31中的变量引用信息25包括类型大小、维数和包括在任务中的变量的其他信息。变量是任务在执行时要引用的数据的名称。因此,通过使用该变量引用信息25,能够识别任务在执行时要引用的数据。
当任务池31中的任务已经被执行时,从任务池31中删除该任务的函数指针24和变量引用信息25。当不存在未执行的任务时,任务池31为空。
再参照图8。
任务执行处理单元42是执行任务执行I/F的功能块,并且包括选择单元44、识别单元45、执行单元46和存储处理单元47。
图10是示意性地示出任务执行处理单元42的操作的图。
当完成执行程序23中的所有任务注册I/F的执行时,执行任务执行I/F。任务执行I/F调用用于执行的运行时例程23b(1)。通过执行用于执行的运行时例程23b,实现了上述选择单元44、识别单元45、执行单元46和存储处理单元47中的每一个。
接下来,运行时例程23b读取任务池31(2)。
接下来,选择单元44从任务池31中选择一个未执行的任务(3)。
识别单元45针对多个核12的每一个,识别在核12中执行的任务在执行时所引用的数据与由选择单元44选择的任务在执行时要引用的数据之间的交叠(4)。
各个数据之间的交叠表示各个数据在存储空间中交叠的区域的大小。为了识别大小,识别单元45引用缓存状态表32。
缓存状态表32是将核12和变量引用信息25彼此相关联的表。当在核12中执行任务时,任务池31中的与该任务对应的变量引用信息25与在其中已执行该任务的核12相关联地被存储在缓存状态表32中。
识别单元45从任务池31中读取由选择单元44选择的任务的变量引用信息25,并且将该变量引用信息25与缓存状态表32中针对每个核12的多条变量引用信息25进行比较。作为结果,识别单元45可以识别在每个核12中执行的任务在执行时所引用的数据与由选择单元44选择的任务在执行时要引用的数据之间的交叠。
接下来,识别单元45识别具有最大数据交叠的核12,并且执行单元46在核12中执行未执行的任务(5)。
任务在执行时所引用的数据很可能保留在与已执行该任务的核12对应的缓存存储器13中。因此,如果在具有最大的任务要引用的数据的交叠的核12中执行未执行的任务,则缓存命中率增加,并且可以提高任务的执行速度。
当任务的执行完成时,存储处理单元47更新缓存状态表32(6)。更新的目标是与已执行该任务的核12对应的变量引用信息25。作为示例,存储处理单元47将已执行任务的核12和任务池31中的与该任务对应的变量引用信息25相关联地存储在缓存状态表32中。
再参照图8。
存储单元43是由多个主存储器14中的任一个实现的功能块,并且存储上述任务池31和缓存状态表32。任务池31可以存储在一个主存储器14中,并且缓存状态表32可以存储在与该主存储器14不同的一个主存储器14中。
接下来,将描述根据本实施方式的计算方法。
图11是示出根据本实施方式的计算方法的总体流程的流程图。通过执行程序23,该计算方法被执行如下。
首先,在步骤S1中,执行程序23的初始化例程清空缓存状态表32。
接下来,处理进行至步骤S2,在步骤S2中执行多个任务注册I/F的执行处理。在该处理中,每个任务注册I/F调用用于注册的运行时例程23a,并且将函数指针24和变量引用信息25传递至运行时例程23a。运行时例程23a在任务池31中注册函数指针24和变量引用信息25。
接下来,处理进行至步骤S3,在步骤S3中执行任务执行I/F的执行处理。因此,在具有最大的该任务要引用的数据的交叠的核12中执行特定任务。
接下来,处理进行至步骤S4,在步骤S4中执行程序23确定是否存在后续指令。如果被确定为是,则处理返回至步骤S2。另一方面,如果被确定为否,则处理终止。
接下来,将描述由任务注册I/F执行的处理。
图12是示出在图11的步骤S2中执行的任务注册I/F的执行处理的流程图。
首先,在步骤S10中,任务注册单元41从任务注册I/F接收函数指针24和变量引用信息25。
接下来,处理进行至步骤S11,在步骤S11中,任务注册单元41将函数指针24和变量引用信息25彼此相关联地注册在任务池31中。变量引用信息25是用于识别未执行的任务在执行时要引用的数据的信息。因此,识别单元45可以基于任务池31识别未执行的任务在执行时要引用的数据。
在此之后,处理返回至调用源。
接下来,将描述由任务执行I/F执行的处理。
图13是示出在图11的步骤S3中执行的任务执行I/F的执行处理的流程图。
首先,在步骤S20中,用于执行的运行时例程23b读取任务池31以确定任务池31是否为空。
如果被确定为是,则处理返回至调用源而不做任何事情,因为没有任务要执行。另一方面,如果被确定为否,则处理进行至步骤S21。
在步骤S21中,选择单元44从任务池31中选择一个未执行的任务。
接下来,处理进行至步骤S22,在步骤S22中识别单元45执行用于识别数据交叠的处理。在识别处理中,针对多个核12的每一个,识别在每个核12中执行的任务在执行时所引用的数据与在步骤S21中选择的任务在执行时要引用的数据之间的交叠。例如,识别单元45通过使用缓存状态表32的变量引用信息25和任务池31的变量引用信息25来识别数据的交叠。针对所有NUMA节点11中的所有核12来识别数据的交叠。
接下来,处理进行至步骤S23,在步骤23中识别单元45识别所有NUMA节点11中的所有核12之中的具有最大数据交叠的核12。
接下来,处理进行至步骤S24,在步骤S24中执行单元46在核12中执行未执行的任务。
处理进行至步骤S25,在步骤S25中存储处理单元47更新缓存状态表32。因此,将缓存状态表32中的已执行该任务的核12的变量引用信息25更新为任务池31中的与该任务对应的变量引用信息25。作为结果,当执行后续任务时,识别单元45可以通过使用任务池31中的变量引用信息25和缓存状态表32中的变量引用信息25来识别针对每个核12的数据交叠。
接下来,处理进行至步骤S26,在步骤S26中存储处理单元47从任务池31删除已经完成其执行的任务。从而,在任务池31中仅保留未执行的任务,因此识别单元45可以参考任务池31来识别未执行的任务。
在此之后,处理返回至步骤S20。
在完成上述处理之后,任务执行I/F的处理终止。
根据上述任务执行I/F的处理,在步骤S23中,针对每个核12识别在每个核12中执行的任务在执行时所引用的数据与未执行的任务在执行时要引用的数据之间的交叠。在步骤S24中,在具有最大数据交叠的核12中执行任务。
已执行的任务在执行时所引用的数据很可能被保留在已执行该任务的核12的缓存存储器13中。因此,如果在具有在已执行任务的数据与未执行任务的数据之间的最大交叠的核12中执行未执行的任务,则执行未执行的任务时的缓存命中率增加。作为结果,缓存存储器13可以被重复使用,并且任务的执行速度可以增加。
接下来,将详细描述图13中的步骤S22中的识别处理。
图14是示出图13的步骤S22中执行的识别处理的流程图。
该识别处理是识别包括在两条变量引用信息25中的各个数据在存储空间中交叠的区域的大小R(字节数)的处理。在以下描述中,要处理的两条变量引用信息25通过V1和V2来表示。例如,任务池31中的变量引用信息25是V1,并且缓存状态表32中的变量引用信息25是V2。
首先,在步骤S30中,识别单元45确定变量引用信息V1和变量引用信息V2是否包含相同的变量。如果被确定为否,则在变量引用信息V1和变量引用信息V2中不存在如在存储器空间中交叠的数据。因此,在这种情况下,处理进行至步骤S31,在步骤S31中识别单元45设置R=0。然后处理返回至调用源。
另一方面,如果在步骤S30被确定为是,则过程进行至步骤S32。
在步骤S32中,识别单元45获得变量引用信息V1和变量引用信息V2中的每一个中的交叠变量X的数量。
例如,考虑其中变量引用信息V1和变量引用信息V2两者都包括具有维数“dim”的多维数组段array_section[lower_1:length_1][lower_2:length_2]……[lower_dim:length_dim]的情况。在这种情况下,在数组段[lower_k:length_k]的多个元素之中,计算变量引用信息V1和变量引用信息V2中的交叠元素的数量W。根据下面的等式(1)至(3)计算针对所有维度k(k=1、2、……dim)的元素的数量W。
S=max(V1的lower_k,V2的lower_k)……(1)
E=min(V1的(lower_k+length_k-1),(V2的(lower_k+length_k-1))……(2)
W=E-S+1……(3)
图15是用于描述各个参数S、E和W的含义的示意图。
图15示出了array_section中其维数为k的数组段的示例。作为示例,给出对array_section的数组段[1:4]被包括在变量引用信息V1中以及array_section的数组段[3:4]被包括在变量引用信息V2中的情况的描述。在变量引用信息V1和变量引用信息V2中使用的变量元素用阴影线表示,而未使用的数组元素用轮廓线表示。
如图15所示,参数S是在变量引用信息V1和变量引用信息V2两者中使用的数组元素的索引之中的最小索引。参数E是在变量引用信息V1和变量引用信息V2两者中使用的数组元素的索引之中的最大索引。元素的数量W是在变量引用信息V1和变量引用信息V2两者中使用的数组元素的数量。
在步骤S32中,针对每个维k(k=1、2、……dim)计算元素的数量W,并且将所有元素数量W的乘积设置为变量引用信息V1和变量引用信息V2中的交叠变量X的数量。
接下来,处理进行至步骤S33,在步骤S33中通过将数量X乘以数组元素的类型大小,获得变量引用信息V1中的数据和变量引用信息V2中的数据交叠的区域的大小R。在此之后,处理返回至调用源。
如上所述完成该识别处理的基本步骤。
接下来,将参照具体示例更详细地描述本实施方式。
图16是示出在以下描述中使用的源程序21的示例的图。
源程序21是用C语言编写的程序,其中通过OpenMP的任务构造描述六个任务(TASK-A、TASK-B、TASK-C、TASK-D、TASK-E和TASK-F)。针对每个任务,任务中使用的变量由numa_val子句指定。源程序21的名称是“sample.c”。
图17是示出由编译源程序21的编译器22获得的执行程序23的图。
如图17所示,将与各个任务TASK-A、TASK-B、TASK-C、TASK-D、TASK-E和TASK-F对应的任务注册I/F插入执行程序23中。如上所述,每个任务的函数指针24和变量引用信息25被提供作为这些任务注册I/F中的相应任务注册I/F的自变量。
尽管变量引用信息25是如上所述的结构,但是在图17中,为了容易理解,使用numa_val子句的自变量(参见图16)作为变量引用信息25。
图18是示出任务注册I/F(TASK-A,vx[0:50])中的变量引用信息25的实际格式的图。
由于任务TASK-A要引用的“变量1”仅具有一维数组段vx[0:50],因此列表的数量是“1”。vx[0:50]的起始索引“0”和长度“50”也存储在变量引用信息25中。由于数组的头地址由数组的名称表示,因此,“vx”被存储在变量1的头地址中。在这种情况下,数组的每个元素的类型大小是“8(字节)”。由于数组段vx[0:50]是一维数组,因此维数是“1”。
图19是示意性地示出当执行程序23被中途执行时的任务池31和缓存状态表32的内容的图。
在图19中,假设下述情况,其中,在所有六个任务都被注册在任务池31中之后,任务池31中的前四个任务已经通过任务执行I/F在核12(C#0至C#3)中被执行。还假设核12(C#0至C#3)为空,并且随后的两个任务TASK-E和TASK-F正在等待执行。
在该时间点处,在任务池31中仅注册两个任务(TASK-E、TASK-F)。在缓存状态表32中,存储有在各个核12(C#0至C#3)中刚被执行的各个任务的变量引用信息25。
在这种状态下,考虑选择单元44在步骤S21(参见图13)选择任务池31顶部的任务TASK-E的情况。在这种情况下,当在步骤S33(图14)中识别出每个核12的变量引用信息25与任务TASK-E的变量引用信息25交叠的区域的大小R时,获得以下结果。
核C#0的变量引用信息25与任务TASK-E的变量引用信息25之间的交叠:vx[10:40](40个元素,R=320字节)
核C#1的变量引用信息25与任务TASK-E的变量引用信息25之间的交叠:vx[50:10](10个元素,R=80字节)
核C#2的变量引用信息25与任务TASK-E的变量引用信息25之间的交叠:无交叠(R=0字节)
核C#3的变量引用信息25与任务TASK-E的变量引用信息25之间的交叠:无交叠(R=0字节)
图20是示出计算上述交叠中的核C#0的变量引用信息25与任务TASK-E的变量引用信息25之间的交叠的方法的示意图。交叠可以通过根据上述等式(1)至(3)计算参数S、E、W、X和R来计算。
在该示例中,在四个核12(C#0至C#3)中,核C#0具有最大的交叠。因此,在步骤S23(参见图13)中,识别单元45将核C#0识别为具有最大数据交叠的核12。在步骤S24(参见图13)中,执行单元46在核C#0中执行任务TASK-E。
图21是示意性地示出在如上所述执行任务TASK-E之后的任务池31和缓存状态表32的内容的图。
当任务TASK-E的执行完成时,在步骤S26(参见图13)中,存储处理单元47从任务池31中删除任务TASK-E的函数指针24和变量引用信息25,因此,仅任务TASK-F的函数指针24和变量引用信息25保留在任务池31中。
在缓存状态表32中,将与核C#0对应的变量引用信息25更新为在核C#0中执行的任务的变量引用信息25。如上所述,在步骤S25中通过存储处理单元47执行该更新操作。
接下来,在步骤S21(参见图13)中,选择单元44选择保留在任务池31中的任务TASK-F。
在步骤S33(参见图14)中,识别单元45识别每个核12的变量引用信息25与任务TASK-F的变量引用信息25交叠的区域的大小R。识别结果如下。
核C#0的变量引用信息25与任务TASK-F的变量引用信息25之间的交叠:无交叠(R=0字节)
核C#1的变量引用信息25与任务TASK-F的变量引用信息25之间的交叠:无交叠(R=0字节)
核C#2的变量引用信息25与任务TASK-F的变量引用信息25之间的交叠:无交叠(R=0字节)
核C#3的变量引用信息25与任务TASK-F的变量引用信息25之间的交叠:vy[60:20](20个元素,R=160字节)
在该示例中,在四个核12(C#0至C#3)之中,核C#3具有最大的交叠。因此,在步骤S23(参见图13)中,识别单元45将核C#3识别为具有最大数据交叠的核12。在步骤S24中,执行单元46在核C#3中执行任务TASK-F。
图22是示意性地示出了在执行任务TASK-F之后任务池31和缓存状态表32的内容的图。
当任务TASK-F的执行完成时,在步骤S25(参见图13)中,存储处理单元47更新缓存状态表32。因此,在缓存状态表32中,与核C#3对应的变量引用信息25被更新为在核C#3中执行的任务的变量引用信息25。
在步骤S26(参见图13)中,存储处理单元47从任务池31中删除任务TASK-F,并且任务池31变为空。
在完成上述操作之后,终止执行程序23的执行。
根据上述本实施方式,识别单元45识别具有已执行任务的数据与未执行任务的数据之间的最大交叠的核12,并且执行单元46在核12中执行未执行的任务。因此,在执行未执行的任务时的缓存命中率增加,并且任务的执行速度可以增加。
另外,由于在源程序21的numa_val子句中指定了任务所使用的变量,因此任务的变量引用信息25被包括在执行程序23中,从而识别单元45能够容易地识别任务的变量引用信息25。
(第二实施方式)
在第一实施方式中,如参照图13所描述,选择单元44仅选择一个未执行的任务(步骤S21),并且在与该任务具有最大数据交叠的核12中执行该任务(步骤S24)。
相比之下,在本实施方式中,将针对数据交叠与每个核12进行比较的任务的数量设置为多个。
图23是示出本实施方式中在步骤S3(参见图11)中执行的任务执行I/F的执行处理的流程图。
首先,在步骤S40中,用于执行的运行时例程23b读取任务池31以确定任务池31是否为空。
如果被确定为是,则处理返回至调用源而不做任何事情。另一方面,如果被确定为否,则处理进行至步骤S41。
在步骤S41中,识别单元45识别未执行的任务在执行时要引用的数据与在核12中执行的任务在执行时所引用的数据之间的交叠。在本实施方式中,针对任务池31中的所有未执行任务和缓存状态表32中的所有核12的组合识别数据的交叠,并且通过识别单元45识别具有最大交叠的组合。
接下来,处理进行至步骤S42,在步骤42中执行单元46在所识别的组合中的核12中执行如此识别的组合中的任务。
处理进行至步骤S43,在步骤S43中存储处理单元47更新缓存状态表32。作为结果,如在第一实施方式中,缓存状态表32中的在其中任务被执行的核12的变量引用信息25被更新为任务池31中的与该任务对应的变量引用信息25。
接下来,处理进行至步骤S44,在步骤s44中存储处理单元47从任务池31中删除任务。在此之后,处理返回至步骤S40。
在完成上述之后,本实施方式中的任务执行I/F的处理终止。
根据上述本实施方式,在步骤S41中,在任务池31中的所有未执行任务和缓存状态表32中的所有核12的组合中,识别具有最大数据交叠的组合。在如此识别的组合的核12中,执行组合中的任务。从而,任务可以最大限度地利用保留在缓存存储器13中的数据,并且与第一实施方式中相比,可以进一步提高任务的执行速度。
关于上述每个实施方式,进一步公开了以下附录。
(附录1)一种信息处理设备,包括:
多个核,其并行执行多个相应任务;
多个缓存存储器,其与多个核中的每个核对应地设置,并且存储对应的任务在执行时要引用的数据;
识别单元,其针对核中的每个核,识别已执行的任务在执行时所引用的数据与尚未执行的任务在执行时要引用的数据之间的交叠;以及
执行单元,在多个核中的具有最大交叠的核中执行尚未执行的任务。
(附录2)根据附录1的信息处理设备,其中,识别单元基于任务信息来识别尚未执行的任务在执行时要引用的数据,在该任务信息中,任务与用于识别尚未执行的任务在执行时要引用的数据的引用信息相关联。
(附录3)根据附录2的信息处理设备,还包括
存储处理单元,其在表中彼此相关联地存储在其中已执行了任务的核与任务信息中的与该任务对应的引用信息。
(附录4)根据附录3的信息处理设备,其中,存储处理单元从任务信息中删除已执行的任务。
(附录5)根据附录3的信息处理设备,其中,识别单元通过使用表中的引用信息和任务信息中的引用信息来针对每个核识别交叠。
(附录6)根据附录2的信息处理设备,
其中,描述任务的源程序包括用于指定在任务中要使用的数据的子句,以及
其中,在子句中指定的数据作为引用信息被包括在通过编译源程序而获得的执行程序中。
(附录7)根据附录1的信息处理设备,
其中,识别单元识别尚未执行的多个任务与多个核的组合之中的交叠变得最大的组合,以及
其中,执行单元在所识别的组合中的核中执行所识别的组合中的任务。
(附录8)一种计算机可读记录介质,其中存储有用于使计算机执行处理的计算程序,该计算机包括并行执行多个相应任务的多个核,以及与多个核中的每个核对应地设置并且存储对应的任务在执行时要引用的数据的多个缓存存储器,该处理包括:
针对核中的每个核,识别已执行的任务在执行时所引用的数据与尚未执行的任务在执行时要引用的数据之间的交叠;以及
在多个核之中具有最大交叠的核中执行尚未执行的任务。
扬声器方向确定装置10A包括中央处理单元(CPU)51、主存储单元52、辅存储单元53、外部接口54、第一麦克风M01和第二麦克风M02。CPU 51是作为硬件的处理器的示例。CPU51、主存储单元52、辅存储单元53、外部接口54、第一麦克风M01和第二麦克风M02通过总线59相互连接。
Claims (5)
1.一种信息处理设备,包括:
多个核,其并行执行多个相应任务;以及
多个缓存存储器,其与所述多个核中的每个核对应地设置,并且存储对应的任务在执行时要引用的数据,并且
其中,所述多个核中的至少一个核被配置成:
针对所述核中的每个核,指定已执行的任务在执行时所引用的数据与尚未执行的任务在执行时要引用的数据之间的交叠,并且
在所述多个核之中的具有最大交叠的核中执行尚未执行的任务。
2.根据权利要求1所述的信息处理设备,其中:
所述多个核中的所述至少一个核被配置成基于任务信息来识别尚未执行的任务在执行时要引用的数据,在所述任务信息中,将所述任务与用于识别尚未执行的任务在执行时要引用的数据的引用信息相关联。
3.根据权利要求2所述的信息处理设备,
其中,描述所述任务的源程序包括用于指定在所述任务中要使用的数据的子句,并且
其中,在所述子句中指定的所述数据作为所述引用信息被包括在通过编译所述源程序而获得的执行程序中。
4.根据权利要求1所述的信息处理设备,其中:
所述多个核中的所述至少一个核被配置成:
识别尚未执行的多个任务与所述多个核的组合之中的所述交叠变得最大的组合,并且
在所识别的组合中的核中执行所识别的组合中的任务。
5.一种计算机可读记录介质,其中存储有用于使计算机执行处理的计算程序,所述处理包括:
针对并行执行多个相应任务的核中的每个核,识别已执行的任务在执行时所引用的数据与尚未执行的任务在执行时要引用的数据之间的交叠,对应的任务在执行时要引用的数据通过与所述多个核中的每个核对应地设置的多个缓存存储器来存储;以及
在所述多个核之中的具有最大交叠的核中执行尚未执行的任务。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019119681A JP2021005287A (ja) | 2019-06-27 | 2019-06-27 | 情報処理装置及び演算プログラム |
JP2019-119681 | 2019-06-27 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112148295A true CN112148295A (zh) | 2020-12-29 |
Family
ID=71105385
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010573576.2A Pending CN112148295A (zh) | 2019-06-27 | 2020-06-22 | 信息处理设备和记录介质 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20200409746A1 (zh) |
EP (1) | EP3757787A1 (zh) |
JP (1) | JP2021005287A (zh) |
CN (1) | CN112148295A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110004732A1 (en) * | 2007-06-06 | 2011-01-06 | 3Leaf Networks, Inc. | DMA in Distributed Shared Memory System |
CN103221923A (zh) * | 2010-12-15 | 2013-07-24 | 雪佛龙美国公司 | 用于地震数据处理的计算加速的方法和系统 |
CN104995603A (zh) * | 2013-11-14 | 2015-10-21 | 联发科技股份有限公司 | 至少部分基于共享相同数据及/或存取相同存储地址的任务分布的任务调度方法以及多核处理器系统中用于分配任务的相关非暂时性计算机可读介质 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0830562A (ja) * | 1994-07-19 | 1996-02-02 | Nec Corp | マルチプロセッサシステム |
JP2006260096A (ja) | 2005-03-16 | 2006-09-28 | Matsushita Electric Ind Co Ltd | プログラム変換方法およびプログラム変換装置 |
US8037465B2 (en) * | 2005-09-30 | 2011-10-11 | Intel Corporation | Thread-data affinity optimization using compiler |
JP5040136B2 (ja) * | 2006-03-27 | 2012-10-03 | 富士通セミコンダクター株式会社 | チューニング支援装置、チューニング支援プログラム、チューニング支援プログラムを記録したコンピュータ読み取り可能な記録媒体およびチューニング支援方法 |
JP2009020692A (ja) * | 2007-07-11 | 2009-01-29 | Toshiba Corp | タスク管理装置、タスク管理方法及びタスク管理プログラム |
JP4339907B2 (ja) | 2007-10-24 | 2009-10-07 | 株式会社日立製作所 | マルチプロセッサ向け最適コード生成方法及びコンパイル装置 |
JP2011141703A (ja) * | 2010-01-06 | 2011-07-21 | Renesas Electronics Corp | 資源配置システム、資源配置方法、及び資源配置用プログラム |
JP2013150094A (ja) * | 2012-01-18 | 2013-08-01 | Nec Corp | タスクスケジューリング装置、タスクスケジューリング方法およびタスクスケジューリングプログラム |
US9779044B2 (en) * | 2014-11-25 | 2017-10-03 | Nxp Usa, Inc. | Access extent monitoring for data transfer reduction |
US20160350146A1 (en) * | 2015-05-29 | 2016-12-01 | Cisco Technology, Inc. | Optimized hadoop task scheduler in an optimally placed virtualized hadoop cluster using network cost optimizations |
JP2019049843A (ja) | 2017-09-08 | 2019-03-28 | 富士通株式会社 | 実行ノード選定プログラム、実行ノード選定方法及び情報処理装置 |
-
2019
- 2019-06-27 JP JP2019119681A patent/JP2021005287A/ja not_active Ceased
-
2020
- 2020-06-15 US US16/901,042 patent/US20200409746A1/en not_active Abandoned
- 2020-06-17 EP EP20180525.6A patent/EP3757787A1/en not_active Withdrawn
- 2020-06-22 CN CN202010573576.2A patent/CN112148295A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110004732A1 (en) * | 2007-06-06 | 2011-01-06 | 3Leaf Networks, Inc. | DMA in Distributed Shared Memory System |
CN103221923A (zh) * | 2010-12-15 | 2013-07-24 | 雪佛龙美国公司 | 用于地震数据处理的计算加速的方法和系统 |
CN104995603A (zh) * | 2013-11-14 | 2015-10-21 | 联发科技股份有限公司 | 至少部分基于共享相同数据及/或存取相同存储地址的任务分布的任务调度方法以及多核处理器系统中用于分配任务的相关非暂时性计算机可读介质 |
Also Published As
Publication number | Publication date |
---|---|
US20200409746A1 (en) | 2020-12-31 |
EP3757787A1 (en) | 2020-12-30 |
JP2021005287A (ja) | 2021-01-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7996827B2 (en) | Method for the translation of programs for reconfigurable architectures | |
US20130166516A1 (en) | Apparatus and method for comparing a first vector of data elements and a second vector of data elements | |
WO2015067488A1 (en) | A data processing apparatus and method for scheduling sets of threads on parallel processing lanes | |
JP2005332387A (ja) | メモリ命令をグループ化及び管理する方法及びシステム | |
US20190079805A1 (en) | Execution node selection method and information processing apparatus | |
US11694075B2 (en) | Partitioning control dependency edge in computation graph | |
JP2018511119A (ja) | トランザクション実行に応じて追跡データを生成する装置及び方法 | |
JP2000242551A (ja) | メモリ管理のための方法および装置 | |
Cole et al. | Analysis of randomized work stealing with false sharing | |
KR20220016993A (ko) | 그래픽 처리 유닛(Graphics Processing Unit, GPU)의 명시적 독립 마스크 레지스터의 마스크 조작 방법 | |
US10496433B2 (en) | Modification of context saving functions | |
Su et al. | An efficient GPU implementation of inclusion-based pointer analysis | |
US10564948B2 (en) | Method and device for processing an irregular application | |
CN112148295A (zh) | 信息处理设备和记录介质 | |
CN113688982A (zh) | 处理单元、相关装置和方法 | |
US8484446B2 (en) | Microprocessor saving data stored in register and register saving method | |
JP2005508029A (ja) | リコンフィギュアラブルアーキテクチャのためのプログラム変換方法 | |
JP5293609B2 (ja) | マルチプロセッサ並びにそのキャッシュ同期制御方法及びプログラム | |
JP7040187B2 (ja) | コンパイラ | |
JP5186334B2 (ja) | 変換装置、プログラムおよび変換方法 | |
Wu et al. | Compiling SIMT Programs on Multi-and Many-Core Processors with Wide Vector Units: A Case Study with CUDA | |
JP2016162008A (ja) | データ配置決定装置、データ配置決定プログラム及びデータ配置決定方法 | |
KR20170085455A (ko) | 병렬 연산을 수행하는 장치 및 방법 | |
US20130290688A1 (en) | Method of Concurrent Instruction Execution and Parallel Work Balancing in Heterogeneous Computer Systems | |
JPH01123328A (ja) | 計算機方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |