一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

将顺序代码转换为并行代码的方法、系统、设备和介质与流程

2022-05-08 05:57:26 来源:中国专利 TAG:


1.本技术涉及处理器领域,且更具体地涉及将顺序执行代码转换为并行执行代码的方法、系统、电子设备和非暂时存储介质。


背景技术:

2.现代处理器架构利用各种执行模型,例如单指令多数据(single instruction multiple data,simd)和单指令多线程(single instruction multiple threads,simt)。在图形处理单元(graphic processing unit,gpu)中,为了有效地管理和执行多个单线程,多处理器通常采用单指令多线程simt架构。
3.与单指令多数据simd不同,单指令多线程simt允许程序员为独立、标量线程编写线程级的并行代码,还允许为协同线程编写数据并行代码。
4.但是仍然缺少高效地将顺序执行代码转换为并行执行代码的技术方案。


技术实现要素:

5.根据本技术的一个方面,提供一种将顺序执行代码转换为并行执行代码的方法,包括:将用户输入的顺序执行代码转换为调度树,其中所述调度树反映了所述顺序执行代码的多个生产者、多个消费者以及它们之间的至少控制依赖关系和数据依赖关系;根据所述调度树以及所需资源,生成控制数据资源流图,其中所述控制数据资源流图反映了所述生产者、所述消费者之间的控制依赖关系、数据依赖关系、资源依赖关系;将所述控制数据资源流图划分为可并行执行的多个协作线程束、并由此生成并行执行代码。
6.在一个实施例中,所述根据所述调度树以及所需资源,生成控制数据资源流图包括:根据所述调度树生成控制数据流图,其中,所述控制数据流图反映了所述生产者、所述消费者之间的控制依赖关系和数据依赖关系;根据所述控制数据流图以及所需资源来生成控制数据资源流图。
7.在一个实施例中,所述根据所述控制数据流图以及所需资源来生成控制数据资源流图包括:根据所需资源的数量和各个所需资源的资源范围,根据所述生产者、所述消费者之间的控制依赖关系和数据依赖关系,分配所述消费者占用资源和向所述生产者释放所述资源的顺序;根据所述消费者占用资源和向所述生产者释放所述资源的顺序来生成控制数据资源流图。
8.在一个实施例中,所述将所述控制数据资源流图划分为可并行执行的多个协作线程束、并由此生成并行执行代码包括:根据所述控制数据资源流图反映的所述生产者、所述消费者之间的依赖关系,删除多余依赖关系,其中所述多余依赖关系是预计执行到一个或多个第一生产者或第一消费者时所述一个或多个第一生产者或第一消费者已经得到的依赖关系;根据所述生产者、所述消费者之间的依赖关系,分配所述生产者和所述消费者的数据依赖同步通道和资源依赖同步通道;根据所述数据依赖同步通道和所述资源依赖同步通道,根据用户输入的顺序执行代码中包括的协作线程束编号将所述控制数据资源流图划分
为多个协作线程束,其中所述多个协作线程束可并行执行;对所述多个协作线程束分别生成并行执行代码。
9.在一个实施例中,所述用户输入的顺序执行代码至少包括为固有函数注释的协作线程束编号,其中,所述将用户输入的顺序执行代码转换为调度树还包括:根据所述顺序执行代码中的固有函数之间的数据依赖关系来来获得关于固有函数的生产者-消费者关系;其中,所述将所述控制数据资源流图划分为可并行执行的多个协作线程束、并由此生成并行执行代码包括:根据所述协作线程束编号来将所述控制数据资源流图划分为可并行执行的多个协作线程束、并由此生成并行执行代码,其中所述协作线程束包括具有相同协作线程束编号的多个线程。
10.在一个实施例中,其中所述用户输入的顺序执行代码还包括指示了用张量定义来执行的同步、固有函数处理带有坐标的子张量。
11.根据本技术的一个方面,提供一种将顺序执行代码转换为并行执行代码的系统,包括:转换单元,被配置为将用户输入的顺序执行代码转换为调度树,其中所述调度树反映了所述顺序执行代码的多个生产者、多个消费者以及它们之间的至少控制依赖关系和数据依赖关系;生成单元,被配置为根据所述调度树以及所需资源,生成控制数据资源流图,其中所述控制数据资源流图反映了所述生产者、所述消费者之间的控制依赖关系、数据依赖关系、资源依赖关系;划分单元,被配置为将所述控制数据资源流图划分为可并行执行的多个协作线程束、并由此生成并行执行代码。
12.在一个实施例中,所述生成单元被配置为:根据所述调度树生成控制数据流图,其中,所述控制数据流图反映了所述生产者、所述消费者之间的控制依赖关系和数据依赖关系;根据所述控制数据流图以及所需资源来生成控制数据资源流图。
13.在一个实施例中,所述生成单元被配置为通过如下步骤来根据所述控制数据流图以及所需资源来生成控制数据资源流图:根据所需资源的数量和各个所需资源的资源范围,根据所述生产者、所述消费者之间的控制依赖关系和数据依赖关系,分配所述消费者占用资源和向所述生产者释放所述资源的顺序;根据所述消费者占用资源和向所述生产者释放所述资源的顺序来生成控制数据资源流图。
14.在一个实施例中,所述划分单元被配置为:根据所述控制数据资源流图反映的所述生产者、所述消费者之间的依赖关系,删除多余依赖关系,其中所述多余依赖关系是预计执行到一个或多个第一生产者或第一消费者时所述一个或多个第一生产者或第一消费者已经得到的依赖关系;根据所述生产者、所述消费者之间的依赖关系,分配所述生产者和所述消费者的数据依赖同步通道和资源依赖同步通道;根据所述数据依赖同步通道和所述资源依赖同步通道,根据用户输入的顺序执行代码中包括的协作线程束编号将所述控制数据资源流图划分为多个协作线程束,其中所述多个协作线程束可并行执行;对所述多个协作线程束分别生成并行执行代码。
15.在一个实施例中,所述用户输入的顺序执行代码至少包括为固有函数注释的协作线程束编号,其中,所述转换单元被配置为:根据所述顺序执行代码中的固有函数之间的数据依赖关系来来获得关于固有函数的生产者-消费者关系;其中,所述划分单元被配置为:根据所述协作线程束编号来将所述控制数据资源流图划分为可并行执行的多个协作线程束、并由此生成并行执行代码,其中所述协作线程束包括具有相同协作线程束编号的多个
线程。
16.在一个实施例中,所述用户输入的顺序执行代码还包括指示了用张量定义来执行的同步、固有函数处理带有坐标的子张量。
17.根据本技术的一个方面,提供一种电子设备,包括:存储器,用于存储指令;处理器,用于读取所述存储器中的指令,并执行根据本技术的各个实施例的方法。
18.根据本技术的一个方面,提供一种非暂时存储介质,其上存储有指令,其中,所述指令在被处理器读取时,使得所述处理器执行根据本技术的各个实施例的方法。
19.如此,根据本技术的各个实施例,可以将用户输入的顺序执行代码高效地转换为可并行执行的并行执行代码。
附图说明
20.为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
21.图1示出了根据本技术的实施例的一种将顺序执行代码转换为并行执行代码的方法的流程图。
22.图2示出了根据本技术的实施例的一种将顺序执行代码转换为并行执行代码的方法的细节步骤的另一流程图。
23.图3示出了根据本技术的实施例的用户输入的顺序执行代码。
24.图4示出了根据本技术的实施例的将用户输入的顺序执行代码转换为调度树的示意结果图。
25.图5示出了根据本技术的实施例的根据所述调度树生成控制数据流图cdfg的示意结果图。
26.图6a示出了根据本技术的实施例的根据所述控制数据流图cdfg以及所需资源来生成控制数据资源流图cdrfg的示意结果图。
27.图6b示出了生产者-消费者模型中的生产者和消费者的缓冲器队列的利用和释放的示意图。
28.图7-图9示出了根据本技术的实施例的根据控制数据资源流图生成并行执行代码的过程和结果示意图。
29.图10示出了一种将顺序执行代码转换为并行执行代码的系统的方框图。
30.图11示出了适于用来实现本技术实施方式的示例性电子设备的框图。
31.图12示出了根据本公开的实施例的非暂时性计算机可读存储介质的示意图。
具体实施方式
32.现在将详细参照本技术的具体实施例,在附图中例示了本技术的例子。尽管将结合具体实施例描述本技术,但将理解,不是想要将本技术限于描述的实施例。相反,想要覆盖由所附权利要求限定的在本技术的精神和范围内包括的变更、修改和等价物。应注意,这里描述的方法步骤都可以由任何功能块或功能布置来实现,且任何功能块或功能布置可被
实现为物理实体或逻辑实体、或者两者的组合。
33.图1示出了根据本技术的实施例的一种将顺序执行代码转换为并行执行代码的方法100的流程图。
34.该方法100包括:步骤120,将用户输入的顺序执行代码转换为调度树,其中调度树反映了顺序执行代码的多个生产者、多个消费者以及它们之间的至少控制依赖关系和数据依赖关系;步骤140,根据调度树以及所需资源,生成控制数据资源流图cdrfg,其中控制数据资源流图cdrfg反映了生产者、消费者之间的控制依赖关系、数据依赖关系、资源依赖关系;步骤160,将控制数据资源流图cdrfg划分为多个协作线程束、并由此生成并行执行代码。
35.如此,根据本技术的实施例,可以将用户输入的顺序执行代码高效地转换为可并行执行的并行执行代码。
36.图2示出了根据本技术的实施例的一种将顺序执行代码转换为并行执行代码的方法100的细节步骤的另一流程图。同时结合图3-图9来详细阐述各个步骤的示意和结果图。
37.图3示出了根据本技术的实施例的用户输入的顺序执行代码。在此,用c 代码来例示。
38.如图3所示,可以看出,用户输入的顺序执行代码包括阶段1、阶段2、阶段3等等。图3并未示出所有代码,只是示出了示意性的几个代码以展示应有的内容。在这里,用户输入的顺序执行代码需要包括一些内容,以便后续进行向并行执行代码的转换。
39.首先,图3所示的用户输入的顺序代码中包括阶段1、2的循环(loop)和阶段3的函数,各个阶段中分别包括固有函数:阶段1中的intrinsic_producer(buffer1[i])、intrinsic_consumer(buffer1[i])、阶段2中的intrinsic_producer(buffer2[i])、intrinsic_consumer(buffer2[i])、阶段3中的intrinsic_producer(buffer3)、intrinsic_consumer(buffer3)(未示出)。固有函数是消去了函数调用过程的函数。这里的固有函数处理带有坐标的子张量。
[0040]
另外,用户输入的顺序执行代码至少包括为这些固有函数注释的协作线程束(cooperative warp)编号,例如warp0、warp1等,以此来区分不同的线程束。用户输入的顺序执行代码还包括指示了用张量定义来执行的同步。
[0041]
在此,在图形处理单元gpu硬件的线程调度中,线程调度的最小单位通常是一个线程束(warp),即在图形处理单元gpu中每次执行一个线程束。一般一个线程束可以包含32个线程或者其他数量个线程。
[0042]
在步骤120,将用户输入的顺序执行代码转换为调度树(schedule tree),其中调度树反映了顺序执行代码的多个生产者、多个消费者以及它们之间的至少控制依赖关系和数据依赖关系。在此,“调度树”只是一个名词术语,实际上也可采用其他名词,例如方案树、计划表等,只要能反映顺序执行代码的多个生产者、多个消费者以及它们之间的至少控制依赖关系和数据依赖关系。
[0043]
如图2所示,将用户输入的顺序执行代码转换为调度树的步骤120还包括:步骤121,根据顺序执行代码中的固有函数之间的数据依赖关系来来获得关于固有函数的生产者-消费者关系。如图3所示,在固有函数intrinsic_producer(buffer1[i])、intrinsic_consumer(buffer1[i])、intrinsic_producer(buffer2[i])、intrinsic_consumer
(buffer2[i])、intrinsic_producer(buffer3)中,intrinsic_producer(buffer1[i])、intrinsic_producer(buffer2[i])、intrinsic_producer(buffer3)是生产者函数,而intrinsic_consumer(buffer1[i])、intrinsic_consumer(buffer2[i])、intrinsic_consumer(buffer3)是消费者函数。
[0044]
在此,生产者-消费者模型指的是,在一个系统中,存在生产者和消费者两种角色,它们通过内存缓冲区进行通信,生产者生产消费者需要的数据(例如生产一个数据并存入内存缓冲区),消费者消费该内存缓冲区中缓冲的数据。在内存缓冲区为空的时候消费者必须等待,而在内存缓冲区满的时候,生产者必须等待。当消费者消费完该内存缓冲区中缓冲的数据,则释放该内存缓冲区。
[0045]
图4示出了根据本技术的实施例的将用户输入的顺序执行代码转换为调度树的示意结果图。
[0046]
如图4所示,在将用户输入的顺序执行代码转换为调度树的步骤中,根据用户输入的顺序执行代码中的阶段1、阶段2的两个循环中的生产者函数和消费者函数以及阶段3中的生产者函数和消费者函数,生成调度树。在图4所示的调度树中,包括从左往右数的:第一个分支,包括阶段1的循环i和生产者函数、消费者函数;第二个分支,包括阶段2的循环i和生产者函数、消费者函数;第三个分支包括阶段3的生产者、消费者等。注意,用户输入的顺序执行代码中可以包括多个固有函数,且某个固有函数可能既是生产者又是消费者。
[0047]
如图2所示,根据调度树以及所需资源,生成控制数据资源流图cdrfg的步骤140包括:步骤141,根据调度树生成控制数据流图cdfg,其中,控制数据流图cdfg反映了生产者、消费者之间的控制依赖关系和数据依赖关系;步骤142,根据控制数据流图cdfg以及所需资源来生成控制数据资源流图cdrfg。
[0048]
图5示出了根据本技术的实施例的根据调度树生成控制数据流图cdfg的示意结果图。
[0049]
如图5所示,在步骤141,根据调度树生成控制数据流图cdfg。
[0050]
左侧是如图4所示的调度树的从左往右数的第一个分支,包括阶段1的循环i(如图3所示,阶段1的循环从i=0开始,每个循环递增1,直到i《3,即循环3次)的生产者函数、消费者函数。由于循环3次,因此如图5所示,根据调度树的左侧的第一个分支可以生成三个生产者p1、p2、p3和三个消费者c1、c2、c3。
[0051]
中间是如图4所示的调度树的从左往右数的第二个分支,包括阶段2的循环i(如图3所示,阶段2的循环从i=0开始,每个循环递增1,直到i《3,即循环3次)的生产者函数、消费者函数。由于循环3次,因此如图5所示,根据调度树的中间的第二个分支可以生成三个生产者p4、p5、p6和三个消费者c4、c5、c6。
[0052]
右侧是如图4所示的调度树的从左往右数的第三个分支,包括阶段3的生产者函数、消费者函数。因此如图5所示,根据调度树的右侧的第三个分支可以生成一个生产者p7和一个消费者c7。
[0053]
图5还反映了这些生产者和这些消费者之间的数据依赖关系和控制依赖关系。
[0054]
如图5所示,生产者p1、p2、p3、p4、p5、p6、p7之间存在从左往右的控制依赖关系,控制从生产者p1转移到生产者p2,从生产者p2转移到生产者p3,从生产者p3转移到生产者p4,从生产者p4转移到生产者p5,从生产者p5转移到生产者p6,从生产者p6转移到生产者p7。消
费者c1、c2、c3、c4、c5、c6、c7之间存在从左往右的控制依赖关系,控制从消费者c1转移到消费者c2,从消费者c2转移到消费者c3,从消费者c3转移到消费者c4,从消费者c4转移到消费者c5,从消费者c5转移到消费者c6,从消费者c6转移到消费者c7。
[0055]
而数据依赖关系是从生产者p1到消费者c1,从生产者p2到消费者c2,从生产者p3到消费者c3,从生产者p4到消费者c4,从生产者p5到消费者c5,从生产者p6到消费者c6,从生产者p7到消费者c7。即,生产者生产数据以供消费者消费。
[0056]
在一个实施例中,如图2所示,根据控制数据流图cdfg以及所需资源来生成控制数据资源流图cdrfg的步骤142包括:步骤1421,根据所需资源的数量和各个所需资源的资源范围,根据生产者、消费者之间的控制依赖关系和数据依赖关系,分配消费者占用资源和向生产者释放资源的顺序;步骤在1422,根据消费者占用资源和向生产者释放资源的顺序来生成控制数据资源流图cdrfg。
[0057]
图6a示出了根据本技术的实施例的根据控制数据流图cdfg以及所需资源来生成控制数据资源流图cdrfg的示意结果图。
[0058]
在此,存在一个缓冲区队列。缓冲区队列是生产者-消费者模型中的数据结构。图6b示出了生产者-消费者模型中的生产者和消费者的缓冲器队列的利用和释放的示意图。消费者创建缓冲区队列。如图6b所示,当生产者需要缓冲区时,它可以通过调用例如dequeuebuffer()并指定缓冲区的宽度、高度、像素格式和使用标志,从缓冲区队列请求释放一个缓冲区。然后生产者将用数据填充缓冲区,并可以通过调用例如queuebuffer()将缓冲区返回到队列。消费者可以使用例如acquirebuffer()获取该缓冲区并消费该缓冲器中的数据。消费完成后,消费者可以通过调用例如releasebuffer()将该缓冲区释放返回到缓冲区队列。更进一步,以上四种缓冲区控制函数可以由硬件加速模块支持。
[0059]
假如资源采用跨层的3重缓冲区技术。即,一个缓冲区队列中有3个缓冲区(1个前置缓冲区、2个后置缓冲区)可以轮转。具体地,假设生产者p1需要缓冲区0-10,生产者p2需要缓冲区10-20,生产者p3需要缓冲区20-30,生产者p4需要缓冲区15-30,生产者p5需要缓冲区30-45,生产者p6需要缓冲区45-60,生产者p7需要缓冲区0-50。当然,资源还可以采用其他技术,在此不做限制。
[0060]
因此,在步骤1421,根据上述各个生产者的所需资源的数量和资源范围以及如图5的控制数据流图cdfg所示出的生产者、消费者之间的控制依赖关系和数据依赖关系,分配消费者占用资源和向生产者释放资源的顺序。
[0061]
如图6a所示,首先消费者c1消费生产者p1填充的缓冲区1-10中的数据,消费者c2消费生产者p2填充的缓冲区10-20中的数据,消费者c3消费生产者p3填充的缓冲区20-30中的数据。接下来,由于生产者p4需要缓冲区15-30,因此消费者c2释放缓冲区10-20,其中缓冲区15-20要被生产者p4使用,消费者c3释放缓冲区20-30,这缓冲区20-30要被生产者p4使用,因此步骤在1422,根据消费者占用资源和向生产者释放资源的顺序来生成控制数据资源流图cdrfg。如图6a中示出,消费者c2和c3分别向生产者p4返回资源。
[0062]
同理,由于生产者p7需要缓冲区0-50,因此消费者c1释放缓冲区0-10,要被生产者p7使用,消费者c4释放缓冲区15-30,消费者c5释放缓冲区30-45,消费者c6释放缓冲区45-60,其中缓冲区45-50要被生产者p7使用。
[0063]
如此,就从图5的控制数据流图cdfg转换为图6a的控制数据资源流图cdrfg。
[0064]
然后,在步骤160,将控制数据资源流图划分为多个协作线程束、并由此生成并行执行代码。
[0065]
图7-图9示出了根据本技术的实施例的根据控制数据资源流图生成并行执行代码的过程和结果示意图。
[0066]
具体地,在一个实施例中,如图2所示,将控制数据资源流图划分为多个协作线程束、并由此生成并行执行代码的步骤160包括:步骤161,根据控制数据资源流图反映的生产者、消费者之间的依赖关系,删除多余依赖关系,其中多余依赖关系是预计执行到一个或多个第一生产者或第一消费者时所述一个或多个第一生产者或第一消费者已经得到的依赖关系;步骤162,根据生产者、消费者之间的依赖关系,分配生产者和消费者的数据依赖同步通道和资源依赖同步通道;步骤163,根据数据依赖同步通道和资源依赖同步通道,将控制数据资源流图划分为多个协作线程束,其中所述多个协作线程束可并行执行;步骤164,对所述多个协作线程束分别生成并行执行代码。
[0067]
接下来结合图7-9来描述上述步骤。
[0068]
具体地,可以在步骤161,根据控制数据资源流图反映的生产者、消费者之间的依赖关系,删除多余依赖关系。多余依赖关系是预计执行到一个或多个第一生产者或第一消费者时所述一个或多个第一生产者或第一消费者已经得到的依赖关系。多余依赖关系包括多余数据依赖关系和多余资源依赖关系中的一种或多种。
[0069]
例如,多余资源依赖关系是预计执行到一个或多个第一生产者时一个或多个第一消费者已经释放了资源给一个或多个第一生产者的一个或多个资源依赖关系,即此时一个或多个第一生产者已经得到其他消费者对其释放的资源了。具体地,在资源使用和释放过程中,在有些生产者需要使用该资源的时候,这些资源肯定或基本上已经被消费者释放了,因此不需要保留消费者向生产者释放资源的资源流(资源依赖关系)。基于这种观察和考虑,可以在控制数据资源流图中进一步删除这样的多余的资源依赖关系,来达到减少资源依赖关系的目的。
[0070]
例如,多余数据依赖关系是预计执行到一个或多个第一消费者时一个或多个第一消费者已经得到其他生产者给其的数据了。
[0071]
如图7所示,原本存在于图6a中的从消费者c1到生产者p7的资源依赖关系被删除,这是因为考虑到进行到生产者p7时,消费者c1基本上已经执行完毕,已经释放了缓冲区0-10了,那么就没有必要保留从消费者c1到生产者p7的资源依赖关系,进而可以进一步简化控制数据资源流图,以便简化后续生成的并行执行代码。当然,其他多余依赖关系、例如多余数据依赖关系也可以被删除。该简化步骤也可以被省略,而后续步骤仍是相同的。
[0072]
在步骤162,根据生产者、消费者之间的依赖关系,分配生产者和消费者的数据依赖同步通道和资源依赖同步通道。
[0073]
如图7所示,根据生产者、消费者之间的资源依赖关系,分配生产者p1到消费者c1的数据依赖同步通道1,分配生产者p2到消费者c2的数据依赖同步通道2,分配生产者p3到消费者c3的数据依赖同步通道3,分配消费者c2到生产者p4的资源依赖同步通道4,分配消费者c3到生产者p4的资源依赖同步通道5,分配生产者p4到消费者c4的数据依赖同步通道1,分配生产者p5到消费者c5的数据依赖同步通道2,分配生产者p6到消费者c6的数据依赖同步通道3,分配消费者c4到生产者p7的资源依赖同步通道4,分配消费者c5到生产者p7的
资源依赖同步通道5,分配消费者c6到生产者p7的资源依赖同步通道6,分配生产者p7到消费者c7的数据依赖同步通道1。
[0074]
在步骤163,根据数据依赖同步通道和资源依赖同步通道,将控制数据资源流图划分为多个协作线程束,其中多个可并行执行。
[0075]
如图8所示,根据数据依赖同步通道和资源依赖同步通道,将控制数据资源流图划分为协作线程束warp0和协作线程束warp1。其中协作线程束warp0指示了生产者p1-p7的数据依赖同步通道和资源依赖同步通道,协作线程束warp1指示了消费者c1-c7的数据依赖同步通道和资源依赖同步通道。
[0076]
在步骤164,对协作线程束warp0和协作线程束warp1分别生成并行执行代码。在生成代码的过程中,按照张量携带的依赖关系(tensor-carried dependency)来产生小颗粒度的同步原语。这样的好处是可以更精细地利用资源,减少协作线程束之间的时钟空闲(bubbles)。
[0077]
在此,可以根据图3的用户输入的代码中的协作线程束编号(例如warp0和warp1)来将控制数据资源流图划分为多个协作线程束、并由此生成并行执行代码,其中协作线程束包括具有相同协作线程束编号的多个线程。
[0078]
如图9所示,生成协作线程束warp0的并行执行代码,例如阶段1的intrinsic_producer(buffer1[0])、intrinsic_producer(buffer1[1])、intrinsic_producer(buffer1[2])、阶段2的intrinsic_producer(buffer2[0]、intrinsic_producer(buffer2[1])、intrinsic_producer(buffer2[2]、阶段3的intrinsic_producer(buffer3)。生成协作线程束warp1的并行执行代码,例如阶段1的intrinsic_consumer(buffer1[0])、intrinsic_consumer(buffer1[1])、intrinsic_consumer(buffer1[2])、阶段2的intrinsic_consumer(buffer2[0])、intrinsic_consumer(buffer2[1])、intrinsic_consumer(buffer2[2])、阶段3的intrinsic_consumer(buffer3)。
[0079]
协作线程束warp0和协作线程束warp1之间可并行执行。
[0080]
如此,根据本技术的各个实施例,将用户输入的顺序执行代码转换为并行执行代码,提高了代码执行效率。
[0081]
图10示出了一种将顺序执行代码转换为并行执行代码的系统1000的方框图。
[0082]
该系统1000包括:转换单元1010,被配置为将用户输入的顺序执行代码转换为调度树,其中调度树反映了顺序执行代码的多个生产者、多个消费者以及它们之间的至少控制依赖关系和数据依赖关系;生成单元1020,被配置为根据调度树以及所需资源,生成控制数据资源流图,其中控制数据资源流图反映了生产者、消费者之间的控制依赖关系、数据依赖关系、资源依赖关系;划分单元1030,被配置为将控制数据资源流图划分为多个协作线程束、并由此生成并行执行代码。
[0083]
如此,根据本技术的实施例,可以将用户输入的顺序执行代码高效地转换为可并行执行的并行执行代码。
[0084]
在一个实施例中,生成单元1020被配置为:根据调度树生成控制数据流图,其中,控制数据流图反映了生产者、消费者之间的控制依赖关系和数据依赖关系;根据控制数据流图以及所需资源来生成控制数据资源流图。
[0085]
在一个实施例中,生成单元1020被配置为通过如下步骤来根据控制数据流图以及
所需资源来生成控制数据资源流图:根据所需资源的数量和各个所需资源的资源范围,根据生产者、消费者之间的控制依赖关系和数据依赖关系,分配消费者占用资源和向生产者释放资源的顺序;根据消费者占用资源和向生产者释放资源的顺序来生成控制数据资源流图。
[0086]
在一个实施例中,划分单元1030被配置为:根据控制数据资源流图反映的生产者、消费者之间的依赖关系,删除多余依赖关系,其中所述多余依赖关系是预计执行到一个或多个第一生产者或第一消费者时所述一个或多个第一生产者或第一消费者已经得到的依赖关系;根据生产者、消费者之间的依赖关系,分配生产者和消费者的数据依赖同步通道和资源依赖同步通道;根据数据依赖同步通道和资源依赖同步通道,将控制数据资源流图划分为多个协作线程束,其中所述协作线程束可并行执行;对所述多个协作线程束分别生成并行执行代码。
[0087]
如此,可以进一步简化控制数据资源流图,以便简化后续生成的并行执行代码。
[0088]
在一个实施例中,用户输入的顺序执行代码至少包括为固有函数注释的协作线程束编号,其中,转换单元1010被配置为:根据顺序执行代码中的固有函数之间的数据依赖关系来来获得关于固有函数的生产者-消费者关系;其中,划分单元1030被配置为:根据协作线程束编号来将控制数据资源流图划分为多个协作线程束、并由此生成并行执行代码,其中协作线程束包括具有相同协作线程束编号的多个线程。
[0089]
在一个实施例中,其中用户输入的顺序执行代码还包括指示了用张量定义来执行的同步、固有函数处理带有坐标的子张量。
[0090]
一个协作线程束和另一协作线程束之间可并行执行。
[0091]
如此,根据本技术的各个实施例,将用户输入的顺序执行代码转换为并行执行代码,提高了代码执行效率。
[0092]
图11示出了适于用来实现本技术实施方式的示例性电子设备的框图。
[0093]
电子设备可以包括处理器(h1);存储器(h2),耦合于处理器(h1),且在其中存储计算机可执行指令,用于在由处理器执行时进行本技术的实施例的各个方法的步骤。
[0094]
处理器(h1)可以包括但不限于例如一个或者多个处理器或者或微处理器等。
[0095]
存储器(h2)可以包括但不限于例如,随机存取存储器(ram)、只读存储器(rom)、快闪存储器、eprom存储器、eeprom存储器、寄存器、计算机存储介质(例如硬碟、软碟、固态硬盘、可移动碟、cd-rom、dvd-rom、蓝光盘等)。
[0096]
除此之外,该电子设备还可以包括数据总线(h3)、输入/输出(i/o)总线(h4),显示器(h5)以及输入/输出设备(h6)(例如,键盘、鼠标、扬声器等)等。
[0097]
处理器(h1)可以通过i/o总线(h4)经由有线或无线网络(未示出)与外部设备(h5、h6等)通信。
[0098]
存储器(h2)还可以存储至少一个计算机可执行指令,用于在由处理器(h1)运行时执行本技术所描述的实施例中的各个功能和/或方法的步骤。
[0099]
在一个实施例中,该至少一个计算机可执行指令也可以被编译为或组成一种软件产品,其中一个或多个计算机可执行指令被处理器运行时执行本技术所描述的实施例中的各个功能和/或方法的步骤。
[0100]
图12示出了根据本公开的实施例的非暂时性计算机可读存储介质的示意图。
[0101]
如图12所示,计算机可读存储介质1220上存储有指令,指令例如是计算机可读指令1210。当计算机可读指令1210由处理器运行时,可以执行参照以上描述的各个方法。计算机可读存储介质包括但不限于例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(rom)、硬盘、闪存等。例如,计算机可读存储介质1220可以连接于诸如计算机等的计算设备,接着,在计算设备运行计算机可读存储介质1220上存储的计算机可读指令1210的情况下,可以进行如上描述的各个方法。
[0102]
当然,上述的具体实施例仅是例子而非限制,且本领域技术人员可以根据本技术的构思从上述分开描述的各个实施例中合并和组合一些步骤和装置来实现本技术的效果,这种合并和组合而成的实施例也被包括在本技术中,在此不一一描述这种合并和组合。
[0103]
注意,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本技术的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本技术为必须采用上述具体的细节来实现。
[0104]
本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
[0105]
本公开中的步骤流程图以及以上方法描述仅作为例示性的例子并且不意图要求或暗示必须按照给出的顺序进行各个实施例的步骤。如本领域技术人员将认识到的,可以按任意顺序进行以上实施例中的步骤的顺序。诸如“其后”、“然后”、“接下来”等等的词语不意图限制步骤的顺序;这些词语仅用于引导读者通读这些方法的描述。此外,例如使用冠词“一个”、“一”或者“该”对于单数的要素的任何引用不被解释为将该要素限制为单数。
[0106]
另外,本文中的各个实施例中的步骤和装置并非仅限定于某个实施例中实行,事实上,可以根据本技术的概念来结合本文中的各个实施例中相关的部分步骤和部分装置以构思新的实施例,而这些新的实施例也包括在本技术的范围内。
[0107]
以上描述的方法的各个操作可以通过能够进行相应的功能的任何适当的手段而进行。该手段可以包括各种硬件和/或软件组件和/或模块,包括但不限于硬件的电路、专用集成电路(asic)或处理器。
[0108]
可以利用被设计用于进行在此描述的功能的通用处理器、数字信号处理器(dsp)、asic、场可编程门阵列信号(fpga)或其他可编程逻辑器件(pld)、离散门或晶体管逻辑、离散的硬件组件或者其任意组合而实现或进行描述的各个例示的逻辑块、模块和电路。通用处理器可以是微处理器,但是作为替换,该处理器可以是任何商业上可获得的处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如dsp和微处理器的组合,多个微处理器、与dsp核协作的微处理器或任何其他这样的配置。
[0109]
结合本公开描述的方法或算法的步骤可以直接嵌入在硬件中、处理器执行的软件模块中或者这两种的组合中。软件模块可以存在于任何形式的有形存储介质中。可以使用
的存储介质的一些例子包括随机存取存储器(ram)、只读存储器(rom)、快闪存储器、eprom存储器、eeprom存储器、寄存器、硬碟、可移动碟、cd-rom等。存储介质可以耦接到处理器以便该处理器可以从该存储介质读取信息以及向该存储介质写信息。在替换方式中,存储介质可以与处理器是整体的。软件模块可以是单个指令或者许多指令,并且可以分布在几个不同的代码段上、不同的程序之间以及跨过多个存储介质。
[0110]
在此公开的方法包括用于实现描述的方法的动作。方法和/或动作可以彼此互换而不脱离权利要求的范围。换句话说,除非指定了动作的具体顺序,否则可以修改具体动作的顺序和/或使用而不脱离权利要求的范围。
[0111]
上述功能可以按硬件、软件、固件或其任意组合而实现。如果以软件实现,功能可以作为指令存储在切实的计算机可读介质上。存储介质可以是可以由计算机访问的任何可用的切实介质。通过例子而不是限制,这样的计算机可读介质可以包括ram、rom、eeprom、cd-rom或其他光碟存储、磁碟存储或其他磁存储器件或者可以用于携带或存储指令或数据结构形式的期望的程序代码并且可以由计算机访问的任何其他切实介质。如在此使用的,碟(disk)和盘(disc)包括紧凑盘(cd)、激光盘、光盘、数字通用盘(dvd)、软碟和蓝光盘,其中碟通常磁地再现数据,而盘利用激光光学地再现数据。
[0112]
因此,计算机程序产品可以进行在此给出的操作。例如,这样的计算机程序产品可以是具有有形存储(和/或编码)在其上的指令的计算机可读的有形介质,该指令可由处理器执行以进行在此描述的操作。计算机程序产品可以包括包装的材料。
[0113]
软件或指令也可以通过传输介质而传输。例如,可以使用诸如同轴电缆、光纤光缆、双绞线、数字订户线(dsl)或诸如红外、无线电或微波的无线技术的传输介质从网站、服务器或者其他远程源传输软件。
[0114]
此外,用于进行在此描述的方法和技术的模块和/或其他适当的手段可以在适当时由用户终端和/或基站下载和/或其他方式获得。例如,这样的设备可以耦接到服务器以促进用于进行在此描述的方法的手段的传送。或者,在此描述的各种方法可以经由存储部件(例如ram、rom、诸如cd或软碟等的物理存储介质)提供,以便用户终端和/或基站可以在耦接到该设备或者向该设备提供存储部件时获得各种方法。此外,可以利用用于将在此描述的方法和技术提供给设备的任何其他适当的技术。
[0115]
其他例子和实现方式在本公开和所附权利要求的范围和精神内。例如,由于软件的本质,以上描述的功能可以使用由处理器、硬件、固件、硬连线或这些的任意的组合执行的软件实现。实现功能的特征也可以物理地位于各个位置,包括被分发以便功能的部分在不同的物理位置处实现。而且,如在此使用的,包括在权利要求中使用的,在以“至少一个”开始的项的列举中使用的“或”指示分离的列举,以便例如“a、b或c的至少一个”的列举意味着a或b或c,或ab或ac或bc,或abc(即a和b和c)。此外,措辞“示例的”不意味着描述的例子是优选的或者比其他例子更好。
[0116]
可以不脱离由所附权利要求定义的教导的技术而进行对在此描述的技术的各种改变、替换和更改。此外,本公开的权利要求的范围不限于以上描述的处理、机器、制造、事件的组成、手段、方法和动作的具体方面。可以利用与在此描述的相应方面进行基本相同的功能或者实现基本相同的结果的当前存在的或者稍后要开发的处理、机器、制造、事件的组成、手段、方法或动作。因而,所附权利要求包括在其范围内的这样的处理、机器、制造、事件
的组成、手段、方法或动作。
[0117]
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本技术。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本技术的范围。因此,本技术不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
[0118]
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本技术的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献