CN111090464B - 一种数据流处理方法及相关设备 - Google Patents
一种数据流处理方法及相关设备 Download PDFInfo
- Publication number
- CN111090464B CN111090464B CN201811236134.8A CN201811236134A CN111090464B CN 111090464 B CN111090464 B CN 111090464B CN 201811236134 A CN201811236134 A CN 201811236134A CN 111090464 B CN111090464 B CN 111090464B
- Authority
- CN
- China
- Prior art keywords
- instruction
- execution
- dependency
- dependency relationship
- synchronization
- 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.)
- Active
Links
- 238000003672 processing method Methods 0.000 title abstract description 10
- 238000012545 processing Methods 0.000 claims abstract description 90
- 230000001360 synchronised effect Effects 0.000 claims abstract description 35
- 230000000903 blocking effect Effects 0.000 claims description 23
- 238000012546 transfer Methods 0.000 claims description 23
- 238000000034 method Methods 0.000 claims description 19
- 238000003066 decision tree Methods 0.000 claims description 15
- 238000004891 communication Methods 0.000 claims description 11
- 238000003860 storage Methods 0.000 claims description 11
- 230000001419 dependent effect Effects 0.000 claims description 7
- 238000012163 sequencing technique Methods 0.000 claims description 4
- 230000002123 temporal effect Effects 0.000 claims 2
- 239000000872 buffer Substances 0.000 description 48
- 238000010586 diagram Methods 0.000 description 23
- 238000013461 design Methods 0.000 description 15
- 239000011159 matrix material Substances 0.000 description 8
- 238000005457 optimization Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 230000000694 effects Effects 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 230000004913 activation Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000003780 insertion Methods 0.000 description 3
- 230000037431 insertion Effects 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 230000001537 neural effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 239000012190 activator Substances 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013136 deep learning model Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000009027 insemination Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000011229 interlayer Substances 0.000 description 1
- 239000010410 layer Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/314—Parallel programming languages
-
- 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/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- 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/458—Synchronisation, e.g. post-wait, barriers, locks
-
- 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/30087—Synchronisation or serialisation 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/522—Barrier synchronisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
Abstract
本申请实施例公开了一种数据流处理方法及相关设备,包括:获取多个处理单元对数据流进行操作的依赖关系和执行先后顺序,根据所述依赖关系和所述执行先后顺序,生成同步逻辑;将所述同步逻辑插入到所述多个处理单元中各个处理单元的操作流水线上,生成可执行代码。采用本申请实施例,提高了编译性能,提高数据处理效率。
Description
技术领域
本申请涉及数据处理领域,尤其涉及一种数据流处理方法及相关设备。
背景技术
随着机器学习和深度学习技术的快速发展,传统体系架构的计算机的计算能力无法满足现在的业务需求,因此先后推出针对业务深度定制的人工智能(artificialinsemination,AI)领域专用硬件加速器,例如,谷歌公司研发的张量处理器(tensorprocessing unit,TPU),寒武纪推出的全球首款商用深度学习处理器等等。面向机器学习和深度学习模型的加速效果比传统的中央处理器(central processing unit,CPU)和图形处理器(graphics processing unit,GPU)快一个数量级以上。
为了提高并行吞吐能力,AI硬件加速器通常采用数据访问和计算解耦的设计原则。内部提供多条并行操作流水线,通过异步并行方式对数据进行处理。例如,某些操作流水线专门执行直接存储器访问(direct memory access,DMA)操作访问数据,某些操作流水线专门执行矩阵乘法运算,某些操作流水线专门执行向量运算等等。数据访问指令发出后立刻异步返回,不需要等待访问的数据就绪就可以执行后续操作(如矩阵乘法运算或向量运算)。对于同一块地址发生的A读B写、A写B写、或A写B读等多个操作,如果多个操作之间不存在时序依赖,通过异步并行方式可以提高执行并发度。如果多个操作之间存在时序依赖,异步并行方式会导致在没有等待数据访问就绪的情况下就进行运算,产生错误的计算结果。
为了解决上述问题,TPU提供流水线同步指令来管理异步并行操作流水线,张量虚拟机(tensor virtual machine,TVM)提供了更加便利的方式自动插入同步指令来实现时序一致性,但是,仍然存在编译性能不高、数据处理效率低的问题。
发明内容
本申请实施例提供一种数据流处理方法及相关设备,可以提高编译性能、以及提高数据处理效率。
第一方面,本申请实施例提供了一种数据流处理方法,包括:首先获取多个处理单元之间操作数据流的依赖关系和执行先后顺序,然后根据依赖关系和执行先后顺序,生成同步逻辑;最后将同步逻辑插入到多个处理单元中各个处理单元的操作流水线上,生成可执行代码。通过序列化分析确定各个操作之间的依赖关系和执行先后顺序,由编译器自动插入同步逻辑,简化了编程代码,从而提高了编译性能,提高数据处理效率。
在一种可能的设计中,获取用于描述数据流的描述代码;根据描述代码,确定依赖关系和执行先后顺序。通过用户定义缓存和操作流水线,指定操作流水线读缓存和写缓存来描述数据流,基于数据流描述的同步方式屏蔽了硬件同步细节,简化编程代码,同时解耦硬件架构和软件开发,有利于软硬件各自升级。
在另一种可能的设计中,描述代码包括用于定义缓存变量的关键字、用于描述缓存数据流的读操作和写操作的关键字、用于指定写缓存变量的操作符以及用于指定读缓存变量的关键字中的至少一个,该描述代码为基于数据流描述多流水线同步的语言。
在另一种可能的设计中,依赖关系表示多条操作流水线上的操作指令因访问读写同一块存储地址而导致其中一条操作流水线上的操作指令执行完成后才可以开始执行另一条操作流水线上的操作指令。执行先后顺序表示多个处理单元的操作指令被发射到相应类型的操作流水线上等待执行的时间先后顺序。
在另一种可能的设计中,可以根据依赖关系和执行先后顺序,构建多个处理单元之间操作数据流的依赖决策树;根据依赖决策树,生成同步逻辑。通过构建依赖决策树,简化各个操作之间依赖关系的表达。
在另一种可能的设计中,同步逻辑包括阻塞指令和事件同步指令,根据所述依赖关系,生成所述事件同步指令;以及根据所述执行先后顺序,生成所述阻塞指令。通过生成阻塞指令和事件同步指令,以便插入到操作流水线上,保障数据处理的正确性。
在另一种可能的设计中,阻塞指令用于保证阻塞指令之前的所有的操作指令都执行完成后才会开始执行后续操作指令,当阻塞单个操作流水线时,该操作流水线上的阻塞指令之前的所有操作指令都执行完成后才可以开始执行后续操作指令;当阻塞所有操作流水线时,阻塞指令之前的所有操作流水线的操作指令都执行完成后,才会开始执行后续操作指令。事件同步指令用于保证不同操作流水线之间的操作指令同步。在另一种可能的设计中,可以确定所述依赖关系是否为传递依赖,当依赖关系不为传递依赖时,生成同步逻辑,从而消除操作之间的传递依赖,保证最优的同步指令插入,最大化利用同步资源,减少同步开销。
在另一种可能的设计中,缓冲区域包括第一区域和第二区域,可以向第一区域写入数据流,在等待数据流全部写入第一区域后,更换第一区域和第二区域,向第二区域写入新的数据流,并从第一区域中读取原来写入的数据流,通过双缓冲技术提高数据处理性能。
在另一种可能的设计中,在缓冲区可能会发生失效之前发出预取请求,以便在读取数据流时已经提前将数据流写入缓冲区,从而避免缓冲回去失效造成的处理器停顿。通过预取优化,生成高效的可执行代码。
第二方面,本申请实施例提供了一种数据流处理装置,该数据流处理装置被配置为实现上述第一方面中编译器所执行的方法和功能,由硬件/软件实现,其硬件/软件包括与上述功能相应的单元。
第三方面,本申请实施例提供了一种数据流处理设备,包括:处理器、存储器和通信总线,其中,通信总线用于实现处理器和存储器之间连接通信,处理器执行存储器中存储的程序用于实现上述第一方面提供的一种数据流处理方法中的步骤。
在一个可能的设计中,本申请实施例提供的数据流处理设备可以包含用于执行上述方法设计中数据流处理装置的行为相对应的模块。模块可以是软件和/或是硬件。
第四方面,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面的方法。
第五方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面的方法。
附图说明
为了更清楚地说明本申请实施例或背景技术中的技术方案,下面将对本申请实施例或背景技术中所需要使用的附图进行说明。
图1是本申请实施例提供的一种TPU的结构示意图;
图2是本申请实施例提供的一种处理器的架构图;
图3是本申请实施例提供的一种虚拟线程并行程序转换到显式同步编程模型的示意图;
图4是本申请实施例提供的一种编译器交错执行调度优化的效果示意图;
图5是本申请实施例提供的一种应用系统的架构示意图;
图6是本申请实施例提供的一种多条操作流水线的同步示意图;
图7是本申请实施例提供的一种数据流处理方法的流程示意图;
图8是本申请实施例提供的一种基于数据流描述的描述代码;
图9是本申请实施例提供的一种依赖关系的示意图;
图10是本申请实施例提供的一种执行先后顺序的示意图;
图11(A)是本申请实施例提供的一种传递依赖的示意图;
图11(B)是本申请实施例提供的另一种传递依赖的示意图;
图11(C)是本申请实施例提供的又一种传递依赖的示意图;
图12是本申请实施例提供的一种芯片的结构示意图;
图13是本申请实施例提供的一种显式调用同步指令的编程代码;
图14是本申请实施例提供的一种基于数据流描述的编程代码;
图15是本申请实施例提供的一种数据流处理装置的结构示意图;
图16是本申请提出的一种数据流处理设备的结构示意图。
具体实施方式
下面结合本申请实施例中的附图对本申请实施例进行描述。
如图1所示,图1是本申请实施例提供的一种TPU的结构示意图。TPU硬件提供了操作流水线之间的同步指令,该同步指令可以由软件显式调用,从而保证指令时序执行。TPU内部有4个不同类型的处理单元,每个处理单元对应一条操作流水线,TPU不仅包括矩阵乘法单元(matrix multiply unit)等核心加速单元,还包括多个数据缓冲区(data buffer)。其中,统一缓冲区(unified buffer,UB)和权重队列(weight FIFO)中的数据流输入矩阵乘法单元,然后经过矩阵乘法单元输出到激活器(activation)执行激活函数。显式控制同步发生在矩阵乘法与数据访问之间,提供相应的同步指令,可以通过编程控制来调用同步指令。
如图2所示,图2是本申请实施例提供的一种处理器的架构图。该处理器内部有6个不同类型的处理单元,每个处理单元对应一条操作流水线,包括3个DMA流水线和3个神经元功能单元(neural functional unit,NFU)。其中,3个NFU分别用于负责乘法、累加和激活等运算操作。该处理器提供了操作流水线之间的同步指令,可以通过编程控制来调用同步指令。
综上所述,上述两种方式简化了硬件设计,但是编程难度很大,此外同步指令直接暴露给上层开发者导致程序与硬件耦合严重,不利于硬件升级或代码迁移。为了解决上述问题,可以采用TVM同步分析和并行优化。TVM引入虚拟线程绑定(virtual threadbinding)机制来描述业务操作和底层执行单元之间的关系,确保高并发的同步控制。用户需要显式指定任务对应的虚拟线程ID,任务中的每个张量操作通过一定规则映射到各个操作流水线ID。从语义上讲,虚拟线程内部为串行执行,虚拟线程之间为并行执行。TVM分析各个操作之间的时序关系,在虚拟线程内部插入同步指令保证串行执行,虚拟线程之间进行交错执行调度优化(interleave)。
如图3所示,图3是本申请实施例提供的一种虚拟线程并行程序转换到显式同步编程模型的示意图。包括:步骤1,抽象度较高的程序通过注解描述虚拟线程。步骤2,加入同步指令,其中,push_dep_to为同步消息的产生接口,pop_dep_from为同步消息的消费接口。步骤3,将多个虚拟线程映射到一个(物理实体)线程,进行交错执行调度优化。如图4所示,图4是本申请实施例提供的一种编译器交错执行调度优化的效果示意图。经过编译器交错执行调度优化后的两个虚拟线程(虚拟线程0和虚拟线程1)的操作可以并行起来。但是,虚拟线程内部的串行执行抑制了硬件加速器的多条操作流水线的并行执行,影响编译器的编译性能以及数据处理效率。
如图5所示,图5是本申请实施例提供的一种应用系统的架构示意图。该应用系统包括多个内存单元(MEM)和多条操作流水线(P0、P1、P2、P3、P4)。硬件加速器通常采用数据访问和计算解耦的设计原则,内部提供多条并行的操作流水线执行特定类型的操作,操作指令发出后立刻返回,不需要等待操作实际完成,从而提高多条操作流水线执行的并发度,但是需要保证多条操作流水线之间的时序一致性。在各个操作流水线之间并行执行指令时,如果操作流水线之间存在数据依赖性,则需要调用同步指令来同步操作流水线之间的执行顺序。如图6所示,图6是本申请实施例提供的一种多条操作流水线的同步示意图。以一条操作流水线为例,同步操作过程包括:第一,等待前序执行单元写操作完成。第二,等待后序执行单元读操作完成。第三,执行该指令。第四,通知后续执行单元读取数据。第五,通知前序执行单元写数据。总之,各条操作流水线的操作执行的前后需要插入同步指令,保证与前序执行单元和后序执行单元的数据依赖顺序。基于上述设计原则,本申请实施例提供了如下技术方案。
如图7所示,图7是本申请实施例提供的一种数据流处理方法的流程示意图。本申请实施例中的步骤包括:
S701,获取多个处理单元对数据流进行操作的依赖关系和执行先后顺序。
具体实现中,编译器可以获取用于描述所述数据流的描述代码;根据所述描述代码,确定所述依赖关系和所述执行先后顺序。其中,所述描述代码包括用于定义缓存变量的关键字、用于描述缓存所述数据流的读操作和写操作的关键字、用于指定写缓存变量的操作符以及用于指定读缓存变量的关键字中的至少一个。通过用户定义缓存和操作流水线,指定操作流水线读缓存和写缓存来描述数据流,基于数据流描述的同步方式屏蔽了硬件同步细节,简化编程,同时解耦硬件架构和软件开发,有利于软硬件各自升级。
当然,本申请实施例也可以通过其他方式获取多个处理单元之间操作数据流的依赖关系和执行先后顺序。
例如,设计基于数据流描述多流水线同步的语言,扩展了make_buffer、Buffer、rawPtr、Pipeline、Stage、depend_on、clear等7个关键字,“<-”和“<-+”个操作符,其中,make_buffer和Buffer用于定义缓存变量、rawPtr用于获取缓存变量的地址、Stage用于描述缓存数据流的读操作和写操作、depend_on()用于指示括号中的缓存变量是本次操作的读缓存变量、Pipeline用于描述待同步的数据流,clear用于清除缓存,“<-”和“<-+”用于指定在该操作符之前的缓存变量是本次操作的写缓存变量,其中,“<-”执行完成后自动清除缓存,而“<-+”在执行完成后需要执行clear清除缓存。
如图8所示,图8是本申请实施例提供的一种基于数据流描述的描述代码,其中,第一行代码用于定义缓存变量r1的地址,第二行代码用于定义缓存变量r2的地址,第三行代码用于描述数据流的作用范围,第五行代码用于描述操作流水线stage two向r1指示的地址写入数据,第六行代码用于获取r1指示的具体地址,第八行代码用于描述操作流水线stage three向r2指示的地址写入数据,第九行代码用于获取r2指示的具体地址,第十一行代码用于描述stage four从r1和r2指示的地址读取数据,第十二代码用于获取r1和r2指示的具体地址。其中,“<-”之前的缓存变量r1和r2、与depend_on的缓存变量r1和r2构成了操作流水线之间的生产和消费关系,stage four的操作依赖于stage two的操作和stagethree的操作。
其中,依赖关系表示多条操作流水线上的操作指令因访问读写同一块存储地址而导致其中一条操作流水线上的操作指令执行完成后才可以开始执行另一条操作流水线上的操作指令。执行先后顺序(也可以称为指令发射先后顺序)表示多个处理单元的操作指令被发射到相应类型的操作流水线上等待执行的时间先后顺序。算法主要考虑操作指令被发射到相应的操作流水线上的时间先后顺序,即软件执行顺序,而在真实硬件执行时的时间先后顺序可能与执行先后顺序不同。
例如,如图8所示,三条操作流水线上的操作分别是produce1,produce2和consumer,produce1对存储空间r1进行写访问,produce2对存储空间r2进行写访问,而consumer对存储空间r1和r2进行读访问,因此存在相应的先写后读的依赖关系,故consumer操作必须在produce1和produce2操作执行完成后才可以开始执行,即consumer操作与produce1和produce2之间存在依赖关系。而图8中执行先后顺序是操作指令被发射至对应的操作流水线上等待执行的时间先后顺序,考虑代码中存在循环,因此执行先后顺序应该为:Produce1(第一次迭代)---->Produce2(第一次迭代)---->consumer(第一次迭代)---->Produce1(第二次迭代)---->Produce2(第二次迭代)---->consumer(第二次迭代)。
又如图9所示,针对Buffer a0的访问操作,提供了4条操作流水线Stage 1、Stage2、Stage3、Stage4,如果依次执行Stage 1、Stage2、Stage3、Stage4,其中,a0是双缓冲地址,Stage 1和Stage3是写操作,Stage 2和Stage4读操作。Stage 1和Stage2分别写a0、读a0的乒地址,而Stage 3和4分别写a0、读a0的乓地址,因此Stage 1和Stage 2存在依赖关系,Stage 3和Stage4存在依赖关系。
又如图10所示,A操作和B操作语句在一个for循环中,循环迭代10次。可以根据各个操作在for循环中的位置以及所处的循环迭代次数,编译器可以确定任意两次操作的执行先后顺序。其中,代码行数表示单个操作在for循环中的位置,循环变量表示执行迭代次数。当两个操作处在不同的循环迭代下时,循环迭代变量小的实例更早发生,例如,(3,{i=0})表示第一次循环迭代下的操作B,(2,{i=1})表示第二次循环迭代下的操作A,操作B要比操作A的循环迭代变量小,因此操作B在操作A之前发生。当两个操作实例在相同的循环迭代下时,代码位置靠前的更早发生,例如,(2,i=1})表示第二次循环迭代下的操作A,(3,{i=1})表示第二次循环迭代下的操作B,由于操作A的代码位置位于操作B的代码位置之前,因此操作A在操作B之前发生;当不确定两个操作实例的循环迭代次数时,则可以根据循环迭代变量x和y的大小确定较早的操作。
S702,根据所述依赖关系和所述执行先后顺序,生成同步逻辑。其中,同步逻辑也可以称为同步指令。
具体实现中,依赖关系表示所述多个处理单元中的第一处理单元的操作流水线上的第一操作指令执行完成后开始执行所述多个处理单元中的第二处理单元的操作流水线上的第二操作指令,所述执行先后顺序表示多个处理单元的操作指令被发射到相应类型的操作流水线上等待执行的时间先后顺序。其中,同步逻辑包括阻塞指令和事件同步指令,可以根据执行先后顺序,生成所述阻塞指令。阻塞指令用于保证阻塞指令之前的所有操作指令都执行完成后才会开始执行后续操作指令,当阻塞单个操作流水线时,该操作流水线上的阻塞指令之前的所有操作指令都执行完成后才可以开始执行后续操作指令;当阻塞所有操作流水线时,阻塞指令之前的所有操作流水线的操作指令都执行完成后,才会开始执行后续操作指令。可以根据依赖关系生成所述事件同步指令。事件同步指令用于保证不同操作流水线之间的操作指令同步。例如,当M操作流水线上的某个操作指令之前的所有操作指令执行完成后,V操作流水线的某个操作指令之后的操作指令才会开始执行。
可选的,对于各个操作之间的依赖关系,不是全部需要生成同步指令。可以确定所述依赖关系是否为传递依赖,其中,传递依赖表示多个操作之间通过关系传递而产生的相互依赖关系。当所述依赖关系为所述传递依赖时,不生成所述同步逻辑,当所述依赖关系不为所述传递依赖时,生成所述同步逻辑,从而消除操作之间的传递依赖,保证最优的同步指令插入,最大化利用同步资源,减少同步开销。
例如,如图11(A)所示,H、I、J三个操作,J与H和I都有依赖关系,且I与H间有依赖关系,则H和J为传递依赖。由于J和I进行了同步、且I和H进行了同步,J与I同步的同时已经与H进行了同步,因此J与H之间不需要生成同步指令。又如图11(B)所示,H、I、J三个操作,H和I存在依赖关系,且I和J属于同一流水线操作,则H和J为传递依赖。由于同一流水线操作按顺序开始执行,H与I同步的同时隐式地与J进行了同步,因此J与H之间不需要生成同步指令。又如图11(C)所示,H、I、J三个操作,I和J存在依赖关系,且H和I属于同一流水线操作,则H和J为传递依赖。由于同一流水线操作按顺序开始执行,J与I同步的同时隐式地与H进行了同步,因此J与H之间不需要生成同步指令。
进一步的,可以根据所述依赖关系和所述执行先后顺序,构建所述多个处理单元之间操作所述数据流的依赖决策树;根据所述依赖决策树,生成所述同步逻辑,通过构建依赖决策树,简化各个操作之间依赖关系的表达。其中,依赖决策树是一种树形结构,其中,形结构中的每个节点表示一个操作,树形结构的层间关系表示执行先后顺序,树形结构的连接关系可以表示两个操作之间存在依赖关系。
S703,将所述同步逻辑插入到所述多个处理单元中各个处理单元的操作流水线上,生成可执行代码。
可选的,缓冲区域可以包括第一区域和第二区域,可以向第一区域写入数据流,在等待数据流全部写入第一区域后,更换第一区域和第二区域,向第二区域写入新的数据流,并从第一区域中读取原来写入的数据流,从而通过双缓冲技术提高数据处理性能。
可选的,在缓冲区可能会发生失效之前发出预取请求,以便在读取数据流时已经提前将数据流写入缓冲区,从而避免缓冲回去失效造成的处理器停顿,通过预取优化,生成高效的可执行代码。
例如,如图12所示,图12是本申请实施例提供的一种芯片的结构示意图。该芯片包括6条并行的操作流水线:标量流水线(PIPE_S)、矢量流水线(PIPE_V)、矩阵流水线(PIPE_M)和三种DMA流水线(PIPE_MTE1、PIPE_MTE 2、PIPE_MTE 3)。所有指令首先统一进入标量流水线,然后由标量流水线分发到其它操作流水线。从图12中可以看出,芯片内部包括L1缓冲区,缓冲区A、缓冲区B、缓冲区C,统一缓冲区等多层级的内存空间,当各操作流水线的操作在这些内存空间存在数据依赖性时,则需要使用同步逻辑来保证指令的执行顺序。
应理解,在该芯片内部提供了操作流水线之间的同步逻辑,该同步逻辑包括阻塞指令pipe_barrier(pipe)、以及事件同步指令set_flag(pipe,tripperp,eventId)和wait_flag(pipe,tripperp,eventId),其中,阻塞指令用于保证阻塞指令之前的所有指令都执行完成后才会开始执行后续指令,参数pipe用于指定操作流水线。当阻塞单个操作流水线时,该操作流水线上的阻塞指令之前的所有指令都执行完成后才可以开始执行后续指令;当阻塞所有操作流水线时,阻塞指令之前的所有操作流水线的指令都执行完成后,才会开始执行后续指令。set_flag和wait_flag分别表示同步事件的设置和等待,其中,pipe表示设置事件的操作流水线,tripperp表示等待事件的操作流水线,evenId为事件ID。set_flag和wait_flag必须配对使用。
如图13所示,图13是本申请实施例提供的一种显式调用同步指令的编程代码。该编程代码用于处理激活函数(rectified linear units,ReLu)算子,该ReLu算子在芯片内部的实现由3个操作组成:第1个操作,从整体内存(global memory)加载数据到第一块UB内存中;第2个操作,读取UB中的数据进行矢量运算,并将矢量运算后的结果写到第二块UB内存;第3个操作,将第一块UB中的数据返回到整体内存中。由于该3个操作在UB内存上存在依赖关系,必须显式插入set_flag和wait_flag来保证指令执行顺序,图13中已标注同步逻辑。以第2个操作为例,需要读取UB中的数据进行矢量运算,并将矢量运算后的结果写入另一块UB内存中,因此在执行第二个操作前需要等待。
对应于图13给出的显式调用方式,图14是本申请实施例提供的一种基于数据流描述的编程代码,用户只需要定义缓存和操作流水线,通过指定操作流水线的读缓存和写缓存来描述数据流的依赖关系和执行先后顺序,例如,通过make_buffer((half*)flowTable->ubInputAddr[0])定义缓存,通过stage outToUb定义第一条操作流水线,Stagevector_rule定义第二条操作流水线,Stage ubToOut定义第三条操作流水线。在完成上述编码之后,可以由编译器根据用户指定的数据流描述进行分析,确定依赖关系和执行先后顺序生成同步逻辑,并将同步逻辑插入到目标代码中生成可执行代码,实现与图13所示的编程代码相同的效果。但是,相较于显式调用同步指令的方式,基于数据流描述的同步方式,不需要在编程代码中插入同步逻辑,而是由编译器进行依赖分析后自动插入同步逻辑。
在本申请实施例中,通过用户定义缓存和操作流水线,指定操作流水线读缓存和写缓存来描述数据流,基于数据流描述的同步方式屏蔽了硬件同步细节,简化编程,同时解耦硬件架构和软件开发,有利于软硬件各自升级。另外,编译器可以通过序列化分析确定各个操作之间的依赖关系和执行先后顺序,自动插入同步逻辑,并且消除传递依赖,保证最优的同步指令插入,从而提高了编译器的性能,提高了数据处理效率。
上述详细阐述了本申请实施例的方法,下面提供了本申请实施例的装置。
请参见图15,图15是本申请实施例提供的一种数据流处理装置的结构示意图,该数据流处理装置可以包括获取模块1501和处理模块1502,其中,各个模块的详细描述如下。
获取模块1501,用于获取多个处理单元对数据流进行操作的依赖关系和执行先后顺序;
处理模块1502,用于根据所述依赖关系和所述执行先后顺序,生成同步逻辑;
处理模块1502,还用于将所述同步逻辑插入到所述多个处理单元中各个处理单元的操作流水线上,生成可执行代码。
其中,处理模块1502,还用于获取用于描述所述数据流的描述代码;根据所述描述代码,确定所述依赖关系和所述执行先后顺序。
其中,所述描述代码包括用于定义缓存变量的关键字、用于描述缓存所述数据流的读操作和写操作的关键字、用于指定写缓存变量的操作符以及用于指定读缓存变量的关键字中的至少一个。
其中,所述依赖关系表示所述多个处理单元中的第一处理单元的操作流水线上的第一操作指令执行完成后开始执行所述多个处理单元中的第二处理单元的操作流水线上的第二操作指令,所述执行先后顺序表示所述多个处理单元的操作指令被发射到相应类型的操作流水线上等待执行的时间先后顺序。;
其中,处理模块1502,还用于根据所述依赖关系和所述执行先后顺序,构建所述多个处理单元之间操作所述数据流的依赖决策树;根据所述依赖决策树,生成所述同步逻辑。
其中,处理模块1502,还用于根据所述依赖关系,生成所述事件同步指令;以及根据所述执行先后顺序,生成所述阻塞指令。
其中,处理模块1502,还用于确定所述依赖关系是否为传递依赖;当所述依赖关系不为所述传递依赖时,生成所述同步逻辑。
需要说明的是,各个模块的实现还可以对应参照图7所示的方法实施例的相应描述,执行上述实施例中编译器所执行的方法和功能。
请继续参考图16,图16是本申请提出的一种数据流处理设备的结构示意图。如图16所示,该数据流处理设备可以包括:至少一个处理器1601,至少一个通信接口1602,至少一个存储器1603和至少一个通信总线1604。
其中,处理器1601可以是中央处理器单元,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。通信总线1604可以是外设部件互连标准PCI总线或扩展工业标准结构EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图16中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信总线1604用于实现这些组件之间的连接通信。其中,本申请实施例中设备的通信接口1602用于与其他节点设备进行信令或数据的通信。存储器1603可以包括易失性存储器,例如非挥发性动态随机存取内存(nonvolatile random access memory,NVRAM)、相变化随机存取内存(phase change RAM,PRAM)、磁阻式随机存取内存(magetoresistive RAM,MRAM)等,还可以包括非易失性存储器,例如至少一个磁盘存储器件、电子可擦除可编程只读存储器(electrically erasable programmable read-only memory,EEPROM)、闪存器件,例如反或闪存(NOR flash memory)或是反及闪存(NAND flash memory)、半导体器件,例如固态硬盘(solid state disk,SSD)等。存储器1603可选的还可以是至少一个位于远离前述处理器1601的存储装置。存储器1603中可选的还可以存储一组程序代码,且处理器1601可选的还可以执行存储器1603中所执行的程序。
获取多个处理单元对数据流进行操作的依赖关系和执行先后顺序;
根据所述依赖关系和所述执行先后顺序,生成同步逻辑;
将所述同步逻辑插入到所述多个处理单元中各个处理单元的操作流水线上,生成可执行代码。
可选的,处理器1601还用于执行如下操作:
获取用于描述所述数据流的描述代码;
根据所述描述代码,确定所述依赖关系和所述执行先后顺序。
其中,所述描述代码包括用于定义缓存变量的关键字、用于描述缓存所述数据流的读操作和写操作的关键字、用于指定写缓存变量的操作符以及用于指定读缓存变量的关键字中的至少一个。
其中,所述依赖关系表示所述多个处理单元中的第一处理单元的操作流水线上的第一操作指令执行完成后开始执行所述多个处理单元中的第二处理单元的操作流水线上的第二操作指令,所述执行先后顺序表示所述多个处理单元的操作指令被发射到相应类型的操作流水线上等待执行的时间先后顺序。
可选的,处理器1601还用于执行如下操作:
根据所述依赖关系和所述执行先后顺序,构建所述多个处理单元之间操作所述数据流的依赖决策树;
根据所述依赖决策树,生成所述同步逻辑。
可选的,处理器1601还用于执行如下操作:
根据所述依赖关系,生成所述事件同步指令;以及
根据所述执行先后顺序,生成所述阻塞指令
可选的,处理器1601还用于执行如下操作:
确定所述依赖关系是否为传递依赖;
当所述依赖关系不为所述传递依赖时,生成所述同步逻辑。
进一步的,处理器还可以与存储器和通信接口相配合,执行上述申请实施例中数据流处理装置的操作。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (14)
1.一种数据流处理方法,其特征在于,所述方法包括:
获取多个处理单元对数据流进行操作的依赖关系和执行先后顺序;
根据所述依赖关系和所述执行先后顺序,生成同步逻辑,包括:根据所述依赖关系,生成事件同步指令,以及根据所述执行先后顺序,生成阻塞指令;其中,所述同步逻辑包括所述阻塞指令和所述事件同步指令,所述阻塞指令用于控制所述阻塞指令之前的所有操作指令都执行完成后才会开始执行后续操作指令,所述事件同步指令用于控制不同操作流水线之间的操作指令同步;
将所述同步逻辑插入到所述多个处理单元中各个处理单元的操作流水线上,生成可执行代码。
2.如权利要求1所述的方法,其特征在于,所述获取多个处理单元对数据流进行操作的依赖关系和执行先后顺序包括:
获取用于描述所述数据流的描述代码;
根据所述描述代码,确定所述依赖关系和所述执行先后顺序。
3.如权利要求2所述的方法,其特征在于,所述描述代码包括用于定义缓存变量的关键字、用于描述缓存所述数据流的读操作和写操作的关键字、用于指定写缓存变量的操作符以及用于指定读缓存变量的关键字中的至少一个。
4.如权利要求1-3任一项所述的方法,其特征在于,所述依赖关系表示所述多个处理单元中的第一处理单元的操作流水线上的第一操作指令执行完成后开始执行所述多个处理单元中的第二处理单元的操作流水线上的第二操作指令,所述执行先后顺序表示所述多个处理单元的操作指令被发射到相应类型的操作流水线上等待执行的时间先后顺序。
5.如权利要求1-3任一项所述的方法,其特征在于,所述根据所述依赖关系和所述执行先后顺序,生成同步逻辑包括:
根据所述依赖关系和所述执行先后顺序,构建所述多个处理单元之间操作所述数据流的依赖决策树;
根据所述依赖决策树,生成所述同步逻辑。
6.如权利要求1-3任一项所述的方法,其特征在于,所述根据所述依赖关系和所述执行先后顺序,生成同步逻辑包括:
确定所述依赖关系是否为传递依赖;
当所述依赖关系不为所述传递依赖时,生成所述同步逻辑。
7.一种数据流处理装置,其特征在于,所述装置包括:
获取模块,用于获取多个处理单元对数据流进行操作的依赖关系和执行先后顺序;
处理模块,用于根据所述依赖关系和所述执行先后顺序,生成同步逻辑,包括:根据所述依赖关系,生成事件同步指令,以及根据所述执行先后顺序,生成阻塞指令;其中,所述同步逻辑包括所述阻塞指令和所述事件同步指令,所述阻塞指令用于控制所述阻塞指令之前的所有操作指令都执行完成后才会开始执行后续操作指令,所述事件同步指令用于控制不同操作流水线之间的操作指令同步;
所述处理模块,还用于将所述同步逻辑插入到所述多个处理单元中各个处理单元的操作流水线上,生成可执行代码。
8.如权利要求7所述的装置,其特征在于,
所述处理模块,还用于获取用于描述所述数据流的描述代码;根据所述描述代码,确定所述依赖关系和所述执行先后顺序。
9.如权利要求8所述的装置,其特征在于,所述描述代码包括用于定义缓存变量的关键字、用于描述缓存所述数据流的读操作和写操作的关键字、用于指定写缓存变量的操作符以及用于指定读缓存变量的关键字中的至少一个。
10.如权利要求7-9任一项所述的装置,其特征在于,所述依赖关系表示所述多个处理单元中的第一处理单元的操作流水线上的第一操作指令执行完成后开始执行所述多个处理单元中的第二处理单元的操作流水线上的第二操作指令,所述执行先后顺序表示所述多个处理单元的操作指令被发射到相应类型的操作流水线上等待执行的时间先后顺序。
11.如权利要求7-9任一项所述的装置,其特征在于,
所述处理模块,还用于根据所述依赖关系和所述执行先后顺序,构建所述多个处理单元之间操作所述数据流的依赖决策树;根据所述依赖决策树,生成所述同步逻辑。
12.如权利要求7-9任一项所述的装置,其特征在于,
所述处理模块,还用于确定所述依赖关系是否为传递依赖;当所述依赖关系不为所述传递依赖时,生成所述同步逻辑。
13.一种数据流处理设备,其特征在于,包括:存储器、通信总线以及处理器,其中,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,用于执行如权利要求1-6任一项所述的方法。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行权利要求1-6任一项所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811236134.8A CN111090464B (zh) | 2018-10-23 | 2018-10-23 | 一种数据流处理方法及相关设备 |
PCT/CN2019/110741 WO2020083050A1 (zh) | 2018-10-23 | 2019-10-12 | 一种数据流处理方法及相关设备 |
US17/227,590 US11900113B2 (en) | 2018-10-23 | 2021-04-12 | Data flow processing method and related device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811236134.8A CN111090464B (zh) | 2018-10-23 | 2018-10-23 | 一种数据流处理方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111090464A CN111090464A (zh) | 2020-05-01 |
CN111090464B true CN111090464B (zh) | 2023-09-22 |
Family
ID=70331850
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811236134.8A Active CN111090464B (zh) | 2018-10-23 | 2018-10-23 | 一种数据流处理方法及相关设备 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11900113B2 (zh) |
CN (1) | CN111090464B (zh) |
WO (1) | WO2020083050A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112130898B (zh) * | 2019-06-24 | 2024-09-24 | 华为技术有限公司 | 一种插入同步指令的方法及装置 |
US20230140934A1 (en) * | 2021-11-05 | 2023-05-11 | Nvidia Corporation | Thread specialization for collaborative data transfer and computation |
CN114443139B (zh) * | 2022-01-27 | 2023-06-30 | 上海壁仞智能科技有限公司 | 将顺序代码转换为并行代码的方法、系统、设备和介质 |
CN114429211A (zh) * | 2022-02-07 | 2022-05-03 | 北京百度网讯科技有限公司 | 用于生成信息的方法、装置、设备、介质和产品 |
CN114610394B (zh) * | 2022-03-14 | 2023-12-22 | 海飞科(南京)信息技术有限公司 | 指令调度的方法、处理电路和电子设备 |
CN115185502B (zh) * | 2022-09-14 | 2022-11-15 | 中国人民解放军国防科技大学 | 基于规则的数据处理工作流定义方法、装置、终端及介质 |
US20240169023A1 (en) * | 2022-11-21 | 2024-05-23 | Nvidia Corporation | Application programming interface to indicate matrix multiply-accumulate |
CN116804915B (zh) * | 2023-08-28 | 2023-12-15 | 腾讯科技(深圳)有限公司 | 基于存储器的数据交互方法、处理器、设备以及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103970580A (zh) * | 2014-05-05 | 2014-08-06 | 华中科技大学 | 一种面向多核集群的数据流编译优化方法 |
CN105408860A (zh) * | 2013-09-06 | 2016-03-16 | 华为技术有限公司 | 多线程异步处理器系统和方法 |
CN107077717A (zh) * | 2014-12-18 | 2017-08-18 | 英特尔公司 | 促进计算设备上的图形处理单元上的工作负荷执行的动态流水线化 |
CN108319458A (zh) * | 2018-01-17 | 2018-07-24 | 南京航空航天大学 | 一种基于图形化卫式命令演算的多任务编译方法 |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8181003B2 (en) * | 2008-05-29 | 2012-05-15 | Axis Semiconductor, Inc. | Instruction set design, control and communication in programmable microprocessor cores and the like |
EP2297647A4 (en) * | 2008-07-10 | 2012-12-12 | Rocketick Technologies Ltd | EFFICIENT PARALLEL CALCULATION OF DEPENDENCE PROBLEMS |
EP2996035A1 (en) * | 2008-10-15 | 2016-03-16 | Hyperion Core, Inc. | Data processing device |
US20190377580A1 (en) * | 2008-10-15 | 2019-12-12 | Hyperion Core Inc. | Execution of instructions based on processor and data availability |
US8601458B2 (en) * | 2009-05-14 | 2013-12-03 | International Business Machines Corporation | Profile-driven data stream processing |
EP2438545A2 (en) * | 2009-06-02 | 2012-04-11 | Vector Fabrics B.V. | Improvements in embedded system development |
CN102799414B (zh) * | 2011-05-24 | 2015-11-25 | 中国科学技术大学 | 改进推测多线程的方法及装置 |
US8898642B2 (en) * | 2012-02-16 | 2014-11-25 | Unisys Corporation | Profiling and sequencing operators executable in an emulated computing system |
CN103377035A (zh) * | 2012-04-12 | 2013-10-30 | 浙江大学 | 针对粗颗粒度流应用的流水并行化方法 |
US9489200B2 (en) * | 2013-09-06 | 2016-11-08 | Huawei Technologies Co., Ltd. | Method and apparatus for asynchronous processor with fast and slow mode |
CN103699365B (zh) * | 2014-01-07 | 2016-10-05 | 西南科技大学 | 一种众核处理器结构上避免无关依赖的线程划分方法 |
KR20160108754A (ko) * | 2015-03-06 | 2016-09-20 | 주식회사 에이디칩스 | 파이프라인 구조의 프로세서에서의 무조건 분기 명령어 처리 방법 |
US10796397B2 (en) * | 2015-06-12 | 2020-10-06 | Intel Corporation | Facilitating dynamic runtime transformation of graphics processing commands for improved graphics performance at computing devices |
US10768936B2 (en) * | 2015-09-19 | 2020-09-08 | Microsoft Technology Licensing, Llc | Block-based processor including topology and control registers to indicate resource sharing and size of logical processor |
US11977891B2 (en) * | 2015-09-19 | 2024-05-07 | Microsoft Technology Licensing, Llc | Implicit program order |
US20190138373A1 (en) * | 2017-10-27 | 2019-05-09 | Wave Computing, Inc. | Multithreaded data flow processing within a reconfigurable fabric |
US10936230B2 (en) * | 2018-01-26 | 2021-03-02 | National Technology & Engineering Solutions Of Sandia, Llc | Computational processor-in-memory with enhanced strided memory access |
US11093225B2 (en) * | 2018-06-28 | 2021-08-17 | Xilinx, Inc. | High parallelism computing system and instruction scheduling method thereof |
US20200117449A1 (en) * | 2018-10-12 | 2020-04-16 | Micron Technology, Inc. | Accelerated Access to Computations Results Generated from Data Stored in Memory Devices |
US11157213B2 (en) * | 2018-10-12 | 2021-10-26 | Micron Technology, Inc. | Parallel memory access and computation in memory devices |
US20190391796A1 (en) * | 2019-06-28 | 2019-12-26 | Intel Corporation | Control of scheduling dependencies by a neural network compiler |
US20210048991A1 (en) * | 2019-08-13 | 2021-02-18 | Nvidia Corporation | Performing matrix operations in neural networks |
CN111008042B (zh) * | 2019-11-22 | 2022-07-05 | 中国科学院计算技术研究所 | 基于异构流水线的高效通用处理器执行方法及系统 |
US11182159B2 (en) * | 2020-02-26 | 2021-11-23 | Google Llc | Vector reductions using shared scratchpad memory |
US11709664B2 (en) * | 2020-06-02 | 2023-07-25 | SambaNova Systems, Inc. | Anti-congestion flow control for reconfigurable processors |
US11782729B2 (en) * | 2020-08-18 | 2023-10-10 | SambaNova Systems, Inc. | Runtime patching of configuration files |
US11237880B1 (en) * | 2020-12-18 | 2022-02-01 | SambaNova Systems, Inc. | Dataflow all-reduce for reconfigurable processor systems |
US11126574B1 (en) * | 2021-02-12 | 2021-09-21 | SambaNova Systems, Inc. | Instrumentation profiling for reconfigurable processors |
-
2018
- 2018-10-23 CN CN201811236134.8A patent/CN111090464B/zh active Active
-
2019
- 2019-10-12 WO PCT/CN2019/110741 patent/WO2020083050A1/zh active Application Filing
-
2021
- 2021-04-12 US US17/227,590 patent/US11900113B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105408860A (zh) * | 2013-09-06 | 2016-03-16 | 华为技术有限公司 | 多线程异步处理器系统和方法 |
CN103970580A (zh) * | 2014-05-05 | 2014-08-06 | 华中科技大学 | 一种面向多核集群的数据流编译优化方法 |
CN107077717A (zh) * | 2014-12-18 | 2017-08-18 | 英特尔公司 | 促进计算设备上的图形处理单元上的工作负荷执行的动态流水线化 |
CN108319458A (zh) * | 2018-01-17 | 2018-07-24 | 南京航空航天大学 | 一种基于图形化卫式命令演算的多任务编译方法 |
Non-Patent Citations (1)
Title |
---|
唐九飞 ; 李鹤 ; 于俊清 ; .面向X86多核处理器的数据流程序任务调度与缓存优化.中国科学技术大学学报.2016,(第03期),第200-207页. * |
Also Published As
Publication number | Publication date |
---|---|
WO2020083050A1 (zh) | 2020-04-30 |
CN111090464A (zh) | 2020-05-01 |
US20210232394A1 (en) | 2021-07-29 |
US11900113B2 (en) | 2024-02-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111090464B (zh) | 一种数据流处理方法及相关设备 | |
JP6319880B2 (ja) | 並列性の抽出方法及びプログラムの作成方法 | |
US9996394B2 (en) | Scheduling accelerator tasks on accelerators using graphs | |
Boniol et al. | Deterministic execution model on cots hardware | |
EP1785875A2 (en) | Method for mapping applications on a multiprocessor platform/system | |
US10599404B1 (en) | M/A for compiling parallel program having barrier synchronization for programmable hardware | |
US10318261B2 (en) | Execution of complex recursive algorithms | |
CN105074657B (zh) | 并行管道中的发散分支的硬件和软件解决方案 | |
US12093752B2 (en) | Processor based logic simulation acceleration and emulation system | |
Choi et al. | FPGA acceleration of probabilistic sentential decision diagrams with high-level synthesis | |
Owaida et al. | Massively parallel programming models used as hardware description languages: The OpenCL case | |
EP4291980A1 (en) | System for auto-parallelization of processing codes for multi-processor systems with optimized latency, and method thereof | |
US8041551B1 (en) | Algorithm and architecture for multi-argument associative operations that minimizes the number of components using a latency of the components | |
WO2018076979A1 (zh) | 一种指令间数据依赖的检测方法和装置 | |
Uddin | High-level simulation of concurrency operations in microthreaded many-core architectures | |
Ding et al. | TURNIP: A" Nondeterministic" GPU Runtime with CPU RAM Offload | |
Lantreibecq et al. | Model checking and co-simulation of a dynamic task dispatcher circuit using CADP | |
US20140223419A1 (en) | Compiler, object code generation method, information processing apparatus, and information processing method | |
Anand et al. | Synthesizing and verifying multicore parallelism in categories of nested code graphs | |
Du et al. | Breaking the interaction wall: A DLPU-centric deep learning computing system | |
US20230401480A1 (en) | Hardware acceleration of machine learning designs | |
US20050251795A1 (en) | Method, system, and program for optimizing code | |
Ye | Optimization of Simplified Shallow Water Opencl Application on FPGA | |
Jammer | Characterization and translation of OpenMP use cases to MPI using LLVM | |
Nanjundappa | Accelerating Hardware Simulation on Multi-cores |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |