CN101329638B - 程序代码的并行性的分析方法和系统 - Google Patents
程序代码的并行性的分析方法和系统 Download PDFInfo
- Publication number
- CN101329638B CN101329638B CN 200710109089 CN200710109089A CN101329638B CN 101329638 B CN101329638 B CN 101329638B CN 200710109089 CN200710109089 CN 200710109089 CN 200710109089 A CN200710109089 A CN 200710109089A CN 101329638 B CN101329638 B CN 101329638B
- Authority
- CN
- China
- Prior art keywords
- mentioned
- program code
- code
- function call
- implementation
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- 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/456—Parallelism detection
Abstract
本发明提供一种程序代码的并行性的分析方法和系统以及用于跟踪程序代码的执行信息的模拟器。该程序代码的并行性的分析方法包括:模拟程序代码的顺序执行,以跟踪该程序代码的执行过程;以及根据对上述程序代码的执行过程的跟踪结果,对上述程序代码进行并行性的分析。本发明通过模拟程序代码的顺序执行来收集其执行信息,并根据所收集的执行信息对该程序代码进行并行性的分析,以帮助程序设计者更有效地针对多核体系结构进行程序代码的并行任务的划分,从而提高并行软件开发的效率。
Description
技术领域
本发明涉及数据处理领域,具体地,涉及用于多核体系结构的基于模拟的程序代码的并行性的分析方法和系统以及用于跟踪程序代码的执行过程的模拟器。
背景技术
随着对于计算机的应用需求的不断提高,单个处理器的能力(主频、线宽等)也随之不断地增长。但是,可以预见,这样的单个处理器的能力提升终究会达到物理极限。从而,在单个处理器的能力增长到一定程度时,为了继续获得更高的微处理器性能,自然不得不向更宽的方向发展。推动微处理器性能不断提高的因素主要是半导体工艺技术的飞速进步和处理器体系结构的不断发展。目前的半导体工艺技术已可使微处理器集成的晶体管数目达到数亿个,能够确保微处理器的结构向更加复杂的方向发展。从而,在这样的技术发展和应用需求之下,多核(多处理器)体系结构便成为了必然产物。
多核体系结构通过在一个芯片上集成多个微处理器核心来提高程序执行的并行性。每个微处理器核心实质上都是一个相对简单的单线程微处理器或者比较简单的多线程微处理器。在多核体系结构中,多个微处理器核心可以并行地执行任务,因而具有较高的线程级并行性。并且,多核体系结构通过采用相对简单的微处理器作为处理器核心,能够得到高主频、设计和验证周期短、控制逻辑简单、扩展性好、易于实现、功耗低、通信延迟低等优点。从而,在今后的发展趋势上,无论是移动与嵌入式应用、桌面应用还是服务器应用,都将采用多核体系结构。
但是,在多核体系结构带来了如此多的好处的同时,它也对系统和程序设计等方面提出了挑战。也就是说,由于多核体系结构在单个处理器内封装了多个处理器“执行核”,所以只要软件设计合理,就能够支持软件的多个线程的完全并行执行。从而,这样的多核体系结构的设计概念迫使软件开发朝并行化方向发展,以便充分发挥多核体系结构的优势。
但是,在x86架构下,应用程序的开发者还停留在单线程的开发模式下,随着多核体系结构逐渐应用在PC、Server、嵌入式系统和游戏控制台等中,x86架构下的传统的顺序程序设计概念终将被并发和同步所打破。尤其对于异构存储器限制系统那样的CELL多核体系结构(每个处理器核具有有限的256K字节本地存储器)的程序设计者来说,更要适应从顺序到并行的程序设计概念的转变。也就是说,程序设计者必须学会如何为CELL这样的多核体系结构设计应用程序,即学会如何进行并行程序设计。但是,在并行程序设计中,程序代码中的各函数的并行性识别及并行任务的划分通常被认为是一种极其依赖于程序设计者的领域知识、经验和对于体系结构的了解的技术。没有足够的工具支持,并行性分析及任务划分会极大地降低整个并行软件开发的效率。
因此,需要设计出一种高效、准确的程序代码的并行性的分析技术,来帮助并行程序设计者更有效地针对多核体系结构进行程序代码的并行性的分析以及任务的划分,从而提高并行软件开发的效率。
发明内容
本发明正是鉴于上述现有技术中的问题而提出的,其目的在于提供一种基于模拟的程序代码的并行性的分析方法和系统以及用于跟踪程序代码的执行过程的模拟器,以便通过模拟程序代码的顺序执行来收集其执行信息,并根据所收集的执行信息对该程序代码进行并行性的分析,来帮助程序设计者更有效地针对多核体系结构进行该程序代码的并行任务的划分,从而提高并行软件开发的效率。
根据本发明的一个方面,提供一种程序代码的并行性的分析方法,包括:模拟程序代码的顺序执行,以跟踪该程序代码的执行过程;以及根据对上述程序代码的执行过程的跟踪结果,对上述程序代码进行并行性的分析。
根据本发明的另一个方面,提供一种用于跟踪程序代码的执行过程的模拟器,包括:模拟的执行环境,用于模拟程序代码能够在其中顺序执行的目标系统的执行环境;以及执行过程跟踪单元,用于跟踪上述程序代码在上述模拟执行环境中的顺序执行过程,以获得该程序代码的执行信息。
根据本发明的另一个方面,提供一种程序代码的并行性的分析系统,包括:上述的用于跟踪程序代码的执行过程的模拟器;以及并行性分析单元,用于根据上述模拟器所获得对程序代码的执行过程的跟踪结果,对该程序代码进行并行性的分析。
附图说明
相信通过以下结合附图对本发明具体实施方式的说明,能够使人们更好地了解本发明上述的特点、优点和目的。
图1是根据本发明实施例的程序代码的并行性的分析方法的流程图;
图2是图1的方法中的执行过程跟踪步骤的详细流程图;
图3是根据本发明一个实施例的执行信息的日志的示例;
图4是图1的方法中的并行性分析步骤的详细流程图;
图5(a)~(c)是根据本发明一个实施例的并行性分析过程的实例;
图6是根据本发明实施例的程序代码的并行性的分析系统的方框图;
图7是根据本发明实施例的用于跟踪程序代码的执行过程的模拟器的方框图;
图8-10示出了图7的模拟器的工作过程;以及
图11-13是程序代码的示例。
具体实施方式
在多核体系结构中,对于计算强度很大的应用程序来说,会存在有大量的数据处理以及复杂的数据相关性,如果不进行数据分割的话,只能由一个低频的单核来串行处理,则执行时间会很长。从而,在多核体系结构中,需要正确地对这样的应用程序进行并行化。
应用程序的并行化实际上就是将冗长的串行算法的时间复杂度通过增加空间复杂度的方式进行压缩,把以前一个周期一个操作去执行的算法结构改造成一个周期可以进行多个操作的并行算法,这就是并行化要做的主要工作。也就是说,并行化就是要找出一个应用程序内能够并行执行的任务,并将其分配给多个处理器核来并行执行,从而实现在一个时刻或者时间段内有一个以上的事件发生。但这种并行化却并非是一个简单的过程。因为,即使多核体系结构中的多个处理器核能够同时执行一个程序中的多个任务,但这些任务之间可能会存在运行资源冲突的问题。多个处理器核同时运行期间很多资源其实是共享的,比如高速缓存、存储器、BUS等。如果并行化不正确,例如不能够并行执行的任务被进行了并行化,则其结果可能会使该应用程序所得到的执行结果不正确;又例如,本来能够并行执行的任务未被并行化,则其结果便是处理器核的利用效率的降低。针对于此,本发明的目的便是要提供一种有效的程序代码的并行性的分析技术,以便将程序设计者从繁杂的并行性识别及任务划分中解脱出来。
下面就结合附图对本发明的各个优选实施例进行详细的说明。
图1是根据本发明实施例的程序代码的并行性的分析方法的流程图。如图1所示,首先,在步骤105,模拟程序代码的顺序执行,以跟踪该程序代码的执行过程。具体地,在该步骤中,首先,为要进行并行性分析的已设计完成的程序代码模拟其目标系统的执行环境,然后在该模拟的执行环境中顺序执行该程序代码,并且在顺序执行的同时跟踪其执行过程。在该步骤中,模拟程序代码在目标执行环境中的顺序执行的目的是为了收集其执行信息,以用于对该程序代码的并行性的分析。在本发明的一个实施例中,上述执行信息包括但不限于:函数调用信息、存储器分配信息以及存储器访问信息。对于该步骤,将在后面结合附图2和3进行详细说明。
在步骤110,对上述程序代码进行并行性的分析。具体地,在该步骤中,根据对于上述程序代码的顺序执行过程的跟踪结果,即在步骤105中所收集的执行信息,分析该程序代码中的各函数调用之间的依赖关系。在该步骤中,根据执行信息,将上述程序代码中没有存储器访问冲突的各函数调用确定为没有依赖关系。对于该步骤,将在后面结合附图4和5进行详细说明。
本发明实施例可选择地包括用于向用户呈现对上述程序代码的并行性的分析结果的步骤115。具体地,在该步骤中,向用户呈现的是在步骤110中获得的上述程序代码中各函数调用之间的依赖关系,以帮助该程序代码的设计者找出该程序代码中没有依赖关系、能够由多个处理器核并行执行的任务。在一个实施例中,上述程序代码中的各函数调用之间的依赖关系是以树状图的形式来表现的。关于该树状图,在后面结合附图4和5的说明中有详细记载。此外,在其他实施例中,上述程序代码中的各函数调用之间的依赖关系也可以以列表、文本等任何形式来呈现。
下面,结合图2详细描述上面图1的方法中的执行过程跟踪步骤105。图2是该执行过程跟踪步骤105的详细流程图。
如图2所示,首先,在步骤205,为要进行并行性分析的程序代码模拟其目标系统的执行环境。具体地,该步骤是利用模拟器来实现的。也就是说,在该步骤中,利用模拟器在主系统(当前系统)上模拟将要实际使用该程序代码的目标系统,以便为该程序代码提供目标系统的执行环境。在本发明的一个实施例中,上述目标系统是CELL多核系统,也就是说,上述要进行并行性分析的程序代码是为CELL系统设计的。此外,在本发明的一个实施例中,上述的所模拟的执行环境包括模拟存储器、存储器管理单元、流水线以及模拟寄存器等对于程序代码的执行来说最基本的系统组件。但是,本发明并不限于此,只要能够确保程序代码的顺序执行并且所模拟的是目标系统的环境,该执行环境可以包括任何其他的系统组件。此外,对于上述模拟器,将在后面结合图7-10进行详细说明。
接着,在步骤210,将上述程序代码加载到所模拟的目标系统的执行环境中。具体地,在该步骤中,将上述程序代码加载到该模拟执行环境中的模拟存储器中,并且分析该程序代码中的符号表,以获得该程序代码中的各函数的地址。由于该符号表中记录着该程序代码中的各函数的名称、大小和存储地址,所以可以根据各函数的名称来获得其相应的地址。
在步骤215,获取上述程序代码中当前将要执行的指令并执行。具体地,由于所模拟的执行环境中的模拟指令寄存器的值指示着当前将要执行的指令的虚拟地址,所以在该步骤中,首先获取模拟指令寄存器中的虚拟地址,并将其传送给存储器管理单元,以便将该虚拟地址转换为物理地址;然后,根据所得到的物理地址,从模拟存储器的相应位置处获取将要执行的指令,将其解码为二进制格式,并执行。同时,模拟指令寄存器自动指向下一将要执行的指令。
接着,下面的步骤220-255是跟踪程序代码的执行过程、记录执行信息的过程。
在步骤220,判断上述当前指令是否为诸如call(x86)或bl(PPC)的函数调用/返回指令。如果是,则该过程前进到步骤225;否则,转到步骤250。
在步骤225,对于在步骤220中被确定为函数调用/返回指令的当前指令,进一步判断其所调用的函数是否为系统API(Application ProgrammingInterface,应用程序编程接口),诸如C库函数。如果是,则该过程前进到步骤230;否则,转到步骤245。
在步骤230,对于在步骤220中被确定为函数调用/返回指令的当前指令,进一步判断其所调用的函数是否为存储器分配指令或释放指令,即是否为指令malloc或free。如果是,则该过程前进到步骤235;否则,转到步骤240。
接着,由于在步骤230中确定当前指令所调用的函数是系统API中的malloc或free,所以在步骤235,将该当前指令执行时的有关存储器分配/释放信息记录到存储器分配日志中。具体地,在该步骤中,将执行该当前指令时的系统周期(时间信息)、所分配的存储器大小、存储器地址记录到该存储器分配日志中。然后,该过程前进到步骤240,执行该指令所调用的系统API。
接着,由于在步骤225中确定当前指令是函数调用/返回指令且其所调用的函数不是系统API,所以在步骤245,将该当前指令执行时的有关函数调用信息记录到函数调用日志中。具体地,在该步骤中,将执行该当前指令时的系统周期、该指令所调用的函数的标识记录到该函数调用日志中。为了便于用户识别,优选地,该函数的标识采用该函数的名称。但是,由于在指令的执行过程中其所调用的函数是以地址来指示的,所以在记录日志之前,首先要根据上面提到的该程序代码中的符号表,将所调用的函数的地址转换为相应的函数名称,然后再将该函数名称记录到日志中。
接着,在步骤250,对于在步骤220中被确定为非函数调用/返回指令的当前指令,进一步判断其是否为加载/存储指令。如果是,则该过程前进到步骤255;否则,转到步骤260,判断是否存在下一指令。
接着,由于在步骤250中确定当前指令是加载/存储指令,所以在步骤255,将该当前指令执行时的有关存储器访问信息记录到存储器访问日志中。具体地,在该步骤中,将执行该当前指令时的系统周期、该指令所访问的数据地址、数据大小以及读/写类型记录到该存储器访问日志中。然后,该过程前进到步骤260,判断是否存在下一指令。
在步骤260,若存在下一指令,则返回到步骤215,继续获取并执行下一指令。若不存在下一指令,则前进到步骤265。
在步骤265,对上述步骤215-260所生成的日志进行预处理。具体地,在该步骤中,分析上述程序代码中的各函数的存储器访问操作或存储器分配操作的本地性或非本地性,并相应地设置上述日志中与该存储器访问操作或存储器分配操作对应的记录中的存储器类型项。举例来说,变量i是函数A中的局部变量,则对于函数A中针对变量i的存储器访问操作,在日志中将与该存储器访问操作对应的记录中的存储器类型项设置为本地,以表明该存储器访问操作不依赖于其他函数中的存储器操作,可以本地进行。
下面,对于图11-13中所示出的情况进行说明。
在图11中,从表面来看,函数a()和b()在栈(i和j)和堆(p和q)上可能会存在存储器操作的重叠部分,但实际上,根据这两个函数的主要代码部分可以分析出,其并没有冲突的存储器操作部分,是可以分配给不同的处理器核并在各处理器核的本地存储器的基础上执行的。所以,在这样的情况下,将日志中与这两个函数中的栈(i、j)和堆(p、q)操作相应的记录中的存储器类型设置为本地,以表明该堆、栈操作与其他函数中针对相同变量的堆、栈操作并不存在依赖关系,没有冲突,可以本地进行。
再者,在图12和13中,分别地,可以看出,函数a()和b()均使用相同的锁i来保护其关键部分,但从这两个函数的主要代码部分可以看出,其并没有对相同的存储器变量进行操作,从而不存在冲突的存储器操作。所以,在这样的情况下,将日志中与这两个函数的锁操作相应的记录中的存储器类型设置为本地,以表明该锁操作并不与其他函数中针对相同变量的锁操作相冲突,可以本地进行。
下面,举一个具体例子来说明利用图2的过程所得到的跟踪结果。图3(a)示出了两段简单的程序代码,其中的main()是主函数,Add()是被主函数所调用的子函数。图3(b)示出了记录有图3(a)中的这两段程序代码的执行信息的日志。可以看出,该日志按时戳(执行周期)的顺序依次记录了这两段程序代码在执行过程中的所有存储器访问信息、存储器分配信息、函数调用信息等。并且,该日志中的各个字段的具体含义已在图3(b)中示出。
以上,就是对图2的执行过程跟踪步骤的详细描述。需要说明的是,在图2所示的过程中,虽然将步骤220-250的记录执行信息的过程安排在步骤215的指令执行之后,但这只是为了便于说明而以这样的顺序来进行描述的,其并非是限定性的。在具体实现中,也可以在步骤215的指令执行的同时执行步骤220-250。
此外,还需要说明的是,在上面图2所示的过程中,虽然是根据指令的类型将程序代码的执行信息分类记录到不同的日志中的,但是,在实际实现中,也可以不分别设置函数调用日志、存储器分配日志以及存储器访问日志等这多种日志,而是仅利用一个日志来记录该程序代码的所有执行信息,并在进行并行性的分析时在该日志的基础上得到上述几类日志。并且,在具体实现中,无论是利用一个日志还是利用多个日志来记录执行信息,所记录的信息种类并不仅限于上述的函数名称、存储器地址、存储器类型等,而是,除了上述的信息类型之外,还可以记录其他更加详细的、与程序代码的执行有关的信息。
下面,结合图4详细描述上面图1的方法中的并行性分析步骤110。图4是该并行性分析步骤110的详细流程图。
如图4所示,首先,在步骤405,为当前进行并行性分析的程序代码生成调用树。具体地,在该步骤中,以该程序代码中的主函数作为根节点,以该程序代码在顺序执行过程中的各函数调用作为根节点之下的各节点,并以各函数调用之间的进一步调用关系作为相应的节点之间的父子关系,来生成该程序代码的调用树。如上面结合图2所说明的,与该程序代码的每一次非系统API的函数调用有关的信息都被记录在了函数调用日志中,所以在该步骤中,可以根据上面图2的过程所生成的日志来识别出该程序代码在执行过程中的各函数调用。该步骤所生成的调用树中的每一个节点都代表该程序代码在执行过程中的一次函数调用,并且每一个节点都包括下列各项:
函数标识func_id,其是该节点所对应的函数调用中被调用函数的标识。在本发明的一个是实施例中,该标识是被调用函数的名称。
调用函数列表callee_list,其是到达该节点所对应的函数调用时的各级调用函数的列表,也就是说,该列表表示的是到达该函数调用时的堆栈状态。在本发明的一个实施例中,该列表是由各级调用函数的名称组成的。举例来说,如果主函数main()调用函数tree(),而函数tree()在执行期间又调用了函数node(),则对于函数node()的调用来说,其所对应的节点的调用函数列表call_list为(main,tree)。
调用号call_number,其用于区别具有相同的函数标识和调用函数列表的不同的函数调用,也就是说,其用于区别同一函数的不同次调用。该调用号可以用数字来表示,也可以用其他标识来表示。
以上各项均需通过分析图2的过程所生成的函数调用日志来获得。
接着,在步骤410,根据上面图2的过程所记录的执行信息日志,为上述调用树中的各节点获得其所对应的函数调用的读访问记录集合和写访问记录集合。也就是说,上述调用树中的各节点还包括下列各项:
读访问记录集合read_set,其是在该节点所对应的函数调用期间对存储器进行的读访问的记录的集合。
写访问记录集合write_set,其是在该节点所对应的函数调用期间对存储器进行的写访问的记录的集合。
由于该程序代码的与每一次非系统API的函数调用及存储器访问有关的信息都被记录在了日志中,所以在该步骤中,根据该日志来识别出该程序代码在执行过程中的各非系统API的函数调用,并分别统计出该各函数调用期间的存储器读访问记录和写访问记录,以分别作为该函数调用所对应的节点的读访问记录集合和写访问记录集合。
在步骤415,对上述调用树进行优化。具体地,在该步骤中,假设节点A和B是该调用树中同一父节点下的两个叶子节点,如果:
1)A的读访问记录集合read_set中的记录RA与B的写访问记录集合write_set中的记录RB涉及相同的非本地存储器地址p;或
2)A的写访问记录集合write_set中的记录RA与B的读访问记录集合read_set中的记录RB涉及相同的非本地存储器地址p;或
3)A的写访问记录集合write_set中的记录RA与B的写访问记录集合write_set中的记录RB涉及相同的非本地存储器地址p;
则将节点A和B合并为一个新的节点,以表示A、B的相互依赖性。其中,对于相同的非本地存储器地址的判断,是根据各读、写访问记录中的存储器地址信息和存储器类型信息来进行的。
也就是说,在本步骤中,对于上述程序代码中同一函数下的各函数调用,根据其读、写访问记录集合中各记录的存储器地址和存储器类型,判断其中一个函数调用的写访问记录集合与另一个函数调用的读或写访问记录集合是否存在关于同一个非本地存储器地址的记录,若存在,则确定这些函数调用之间具有依赖关系、不可并行执行;否则,确定这些函数调用间不具有依赖关系、可并行执行。
并且,重复步骤415,直到该调用树中不再存在能够进一步合并的上述那样的兄弟节点为止。
下面,举一个具体例子来说明图4的过程。图5(a)示出了两段简单的程序代码,其中的main()是主函数,Add()是被主函数所调用的子函数。图5(b)示出了记录有图5(a)中的这两段程序代码的执行信息的日志。可以看出,该日志按时戳(执行周期)的顺序依次记录了这两段程序代码在执行过程中的所有存储器访问信息、函数调用信息等。并且,由于这两段程序代码中不存在存储器分配/释放指令malloc和free,所以没有记录与存储器分配/释放有关的信息。
以上述图5(a)中的程序代码及图5(b)中相应的执行信息日志为例,利用上述图4的过程,可得到图5(c)所示的该程序代码的最终调用树的一部分。其中,节点(add,main,0,read_set,write_set)与节点(add,main,1,read_set,write_set)不能够合并,从而表示函数add()被主函数main()的第1次调用和第2次调用没有依赖关系、能够并行执行。
从而,在上面图1的步骤115中便可向用户呈现利用该过程最终生成的调用树,以利用调用树中各节点之间的关系来表现程序代码中的各函数调用之间的依赖关系,使用户获得对于该程序代码的并行性的直观认识。
此外,需要说明的是,上面图4的并行性分析过程所采用的树形分析方式仅是本发明的一个实施例,其并非要对本发明进行限制。在其他实施例中,也可以使用列表、文本等任何形式来进行程序代码的各函数调用之间的依赖关系的分析及呈现。
返回到图4,该并行性分析过程还可包括可选步骤420。
在可选步骤420,对上述程序代码在其执行过程中的各次函数调用进行代码大小和数据大小的分析。具体地,该步骤根据下列算式来实现:
self_code_size(A)=the own codesize of function A
也就是说,在该步骤中,对于上述程序代码在执行过程中的各次函数调用callA,将其所对应的被调用函数A的本身代码大小与该函数调用期间进一步调用的各函数f的代码大小之和作为该函数调用callA的代码大小,并将该函数调用callA在生命周期中进行各次存储器访问i时所访问的空间大小之和作为该函数调用callA的数据大小。
上面的步骤420,对于当前进行并行性分析的程序代码是要应用于CELL那样每一个处理器核都具有本地存储器限制(256KB)的多核体系结构的情况而言,是必须的。因为,在这样的系统中,每一个处理器核所能够承受的任务的大小(代码及数据大小)是受其本地存储器的限制的,所以在对各个处理器核进行任务的分配时,必须首先考虑该任务的大小是否适合于该处理器核。但是,对于处理器核并没有本地存储器大小限制的多核体系结构而言,在对其程序代码进行并行性的分析时,则无需考虑所分配的任务的大小是否适合于其处理器核,从而无需执行上面的步骤420。因而,步骤420在图4中是作为可选步骤、依情况来执行的。
此外,在执行步骤420的情况下,在上面图1的步骤115中还要向用户呈现该步骤中所获得的各函数调用的代码大小和数据大小。各函数调用的代码大小和数据大小可以随调用树中的相应节点一起呈现。
以上,就是对图4的程序代码的并行性分析过程的详细描述。需要说明的是,在上面图4所示的过程中,虽然将步骤410的读访问记录集合和写访问记录集合获取步骤安排在步骤405的调用树生成步骤之后,但这只是为了便于说明而以这样的顺序来进行描述的,其并非是限定性的。在具体实现中,也可以在步骤405的调用树生成的同时执行步骤410。
以上,就是对本实施例的程序代码的并行性的分析方法的描述。从以上描述可知,本实施例首先通过模拟程序代码的顺序执行来收集对于该程序代码的并行性分析来说所需的执行信息,然后根据所收集的执行信息来进行各函数调用之间的依赖关系的分析,最终以直观的形式向用户呈现该分析结果。
因而,在本实施例中,由于模拟程序代码的实际执行,所以能够收集到内核级的存储器访问信息以及由例如输入输出控制的系统调用所引入的潜在的依赖关系,从而在此基础上进行的并行性分析更加准确,能够帮助程序设计者更有效地针对多核体系结构进行程序代码的并行任务的划分。并且,利用本实施例,能够使程序代码的并行性分析独立于目标系统的硬件和操作系统。
此外,以上虽然是针对于CELL系统的情况来描述本发明如何进行程序代码的并行性分析的,但是,并不限于此,本发明同样可应用于诸如Simple Scalar、Power系统芯片等其他多核系统的程序代码的并行性分析。
在同一发明构思下,图6是示出根据本发明实施例的程序代码的并行性的分析系统的方框图。
如图6所示,本实施例的程序代码的并行性的分析系统60包括:模拟器61、并行性分析单元62和呈现单元63。
其中,模拟器61,用于跟踪要进行并行性分析的程序代码的执行过程,以收集其执行信息。
图7是根据本发明实施例的用于跟踪程序代码的执行过程的模拟器的方框图。如图7所示,本实施例的模拟器61包括:模拟存储器611、存储器管理单元612、流水线613、模拟寄存器614、执行过程跟踪单元615和跟踪预处理单元616。
其中,模拟存储器611,是从主系统(当前系统)的存储器中分配出的、用作模拟器61所模拟的目标系统环境中的物理存储器的存储器块。
存储器管理单元(MMU)612,用于在程序代码的存储器访问期间将虚拟地址转换为物理地址。该存储器管理单元612包含一转换后备缓冲器TLB,其是高速缓存,并且存储有虚拟地址与物理地址之间的映射关系。该存储器管理单元612进行地址转换的过程是:搜索该转换后备缓冲器TLB,找到匹配的虚拟地址与物理地址对,从而得到所需的物理地址。
流水线613,其包括指令取单元6131、指令解码单元6132和指令执行单元6133。指令取单元6131将多条指令从模拟存储器611中取到该流水线613上,指令解码单元6132分析每一条指令的二进制格式,而指令执行单元6133则执行每一条指令的动作。
模拟寄存器614,用作模拟器61所模拟的目标系统的寄存器,用于存储中间计算结果。其中的PC寄存器记录当前要执行的指令的位置(虚拟地址)。
执行过程跟踪单元615,用于跟踪程序代码在模拟器61中的顺序执行过程,以获得该程序代码的执行信息。具体地,其判断在该模拟器61中执行的当前指令的类型:如果该指令是调用非系统API的函数调用/返回指令,则将当前执行周期以及被调用函数的标识记入日志;如果该指令是调用系统API中的存储器分配或释放函数的函数调用/返回指令,则将当前执行周期以及被分配的存储器大小、存储器地址记入日志;以及如果该指令是加载/存储指令,将当前执行周期以及数据地址、数据大小、读/写类型和存储器类型记入日志。
跟踪预处理单元616,用于分析上述日志中所记录的各存储器访问操作和存储器分配操作的相应存储器类型,并将该存储器类型信息记入日志。
下面,结合图8-10说明模拟器61的工作过程。
如图8所示,在模拟器61启动后,指令取单元6131读取PC寄存器中的值,以获得下一条指令的地址,并将该地址传送给存储器管理单元612以进行虚拟-物理地址的转换。然后,指令取单元6131根据所获得的物理地址从模拟存储器611的相应位置处读取指令,同时PC寄存器的值自动指向下一指令。
如图9所示,在指令执行单元6133执行一条加载/存储指令时,首先从该指令本身或寄存器中获取数据地址,并将该地址传送给存储器管理单元612以进行虚拟-物理地址的转换。然后,指令执行单元6133根据所获得的物理地址将数据加载或存储到模拟存储器611的相应位置处。与此同时,执行过程跟踪单元615记录相应的存储器访问信息。
如图10所示,在指令执行单元6133执行一条分支指令时,首先将PC寄存器中的值更新为该分支指令的目标地址,并丢弃掉已取到流水线613上的所有指令。然后,指令取单元6131根据PC寄存器中的新值将相应指令取到流水线613上。与此同时,执行过程跟踪单元615记录相应的函数调用信息。
以上,就是对本实施例的用于跟踪程序代码的执行过程的模拟器的详细描述。利用本实施例的模拟器,能够获得对于程序代码的并行性分析来说详细、有用的执行信息。
返回到图6,并行性分析单元62,用于根据模拟器61对程序代码的执行过程的跟踪结果,获得该跟踪结果所记录的该程序代码在执行过程中的各执行动作及其相应的时间信息和存储器类型信息,来进行并行性的分析。如图7所示,该并行性分析单元62进一步包括:调用树构造单元621、访问记录获得单元622、调用树优化单元623和代码/数据大小分析单元624。
其中,调用树构造单元621,用于根据模拟器61所获得的跟踪结果,以上述程序代码在执行过程中的各次函数调用作为节点、以函数调用之间的关系作为节点之间的关系,生成该程序代码的调用树。
访问记录获得单元622,用于根据模拟器61所获得的跟踪结果,为上述调用树构造单元621所生成的调用树中的各节点获得其所对应的函数调用期间的读访问记录集合和写访问记录集合。
调用树优化单元623,用于对于上述调用树中同一父节点下的各叶子节点,根据其读访问记录集合和写访问记录集合确定其之间是否存在针对同一非本地存储器地址的访问冲突,并且将存在存储器访问冲突的各叶子节点进一步合并为一个节点。
代码/数据大小分析单元624,用于对于上述程序代码在执行过程中的各次函数调用,将其所对应的被调用函数的本身代码大小与该函数调用期间进一步调用的各函数的代码大小之和作为该函数调用的代码大小,并将其在生命周期中进行各次存储器访问时所访问的存储器空间大小之和作为该函数调用的数据大小。
接着,呈现单元63,用于向用户呈现对上述程序代码的并行性的分析结果。该分析结果可包括上述程序代码的各函数调用之间的依赖关系、代码大小和数据大小的图形、文字等的表示。
以上,就是对本实施例的程序代码的并行性的分析系统的描述。从以上描述可知,本实施例首先利用模拟器来收集对于该程序代码的并行性分析来说所需的执行信息,然后根据所收集的执行信息来进行各函数调用之间的依赖关系的分析,最终以直观的形式向用户呈现该分析结果。
因而,在本实施例中,由于利用模拟器模拟程序代码的实际执行,所以能够收集到内核级的存储器访问信息以及由例如输入输出控制的系统调用所引入的潜在的依赖关系,从而在此基础上进行的并行性分析更加准确,能够帮助程序设计者更有效地针对多核体系结构进行程序代码的并行任务的划分。并且,利用本实施例,能够使程序代码的并行性分析独立于目标系统的硬件和操作系统。
本实施例的程序代码的并行性的分析系统及其各个组成部分可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行相应的软件的方式实现,也可以由上述硬件电路和软件的结合实现。并且这些各个组成部分也可以物理上集中在一起实施,也可以物理上相互独立而操作上互相协作。
以上虽然通过一些示例性的实施例对本发明的程序代码的并行性的分析方法和系统进行了详细的描述,但是以上这些实施例并不是穷举的,本领域技术人员可以在本发明的精神和范围内实现各种变化和修改。因此,本发明并不限于这些实施例,本发明的范围仅以所附权利要求为准。
Claims (17)
1.一种程序代码的并行性的分析方法,包括:
模拟程序代码的顺序执行,以跟踪该程序代码的执行过程;以及
根据对上述程序代码的执行过程的跟踪结果,对上述程序代码进行并行性的分析,
其中上述模拟程序代码的顺序执行,以跟踪该程序代码的执行过程的步骤进一步包括:
为上述程序代码模拟其目标系统的执行环境;
将上述程序代码加载到上述所模拟的执行环境中;
在上述执行环境中,顺序执行上述所加载的程序代码中的各指令;以及
将上述程序代码在上述顺序执行过程中的执行信息记入日志,
其中上述将程序代码在上述顺序执行过程中的执行信息记入日志的步骤进一步包括:
判断上述程序代码中的当前指令的类型:
如果其是调用非系统API的函数调用/返回指令,则将当前执行周期以及被调用函数的标识记入日志;
如果其是调用系统API中的存储器分配或释放函数的函数调用/返回指令,则将当前执行周期以及被分配的存储器大小、存储器地址记入日志;以及
如果其是加载/存储指令,则将当前执行周期以及数据地址、数据大小、读/写类型记入日志。
2.如权利要求1所述的程序代码的并行性的分析方法,其中上述对程序代码的执行过程的跟踪结果是记录有上述程序代码在上述顺序执行过程中的执行动作、所述动作的相应时间信息或存储器类型信息的日志。
3.如权利要求1所述的程序代码的并行性的分析方法,其中上述日志被分类为函数调用日志、存储器分配日志以及存储器访问日志,分别用于记录上述程序代码在顺序执行过程中的函数调用信息、存储器分配信息以及存储器访问信息。
4.如权利要求1或2所述的程序代码的并行性的分析方法,其中根据对上述程序代码的执行过程的跟踪结果,对上述程序代码进行并行性的分析的步骤进一步包括:
根据上述跟踪结果,分析上述程序代码在上述执行过程中的各次函数调用之间的依赖关系,以找出其中没有依赖关系的、可并行执行的函数调用。
5.如权利要求4所述的程序代码的并行性的分析方法,其中分析上述程序代码在上述执行过程中的各次函数调用之间的依赖关系的步骤进一步包括:
根据上述跟踪结果所记录的上述程序代码在上述顺序执行过程中的各执行动作及其相应的时间信息和存储器类型信息,来进行上述依赖关系的分析。
6.如权利要求4所述的程序代码的并行性的分析方法,其中分析上述程序代码在上述执行过程中的各次函数调用之间的依赖关系的步骤进一步包括:
根据上述跟踪结果,为上述程序代码在上述执行过程中的各次函数调用获得该次函数调用期间的读访问记录集合和写访问记录集合;
对于同一函数中的各函数调用,根据该各函数调用期间的读访问记录集合和写访问记录集合,确定其之间是否存在存储器访问冲突;以及
将上述同一函数中的各函数调用中存在存储器访问冲突的各函数调用确定为具有依赖关系、不可并行执行,而将不存在存储器访问冲突的各函数调用确定为不具有依赖关系、可并行执行。
7.如权利要求4所述的程序代码的并行性的分析方法,其中分析上述程序代码在上述执行过程中的各次函数调用之间的依赖关系的步骤进一步包括:
以上述程序代码在上述执行过程中的各次函数调用作为节点、以函数调用之间的相互关系作为节点之间的关系,生成该程序代码的调用树;
根据上述跟踪结果,为上述各节点获得其所对应的函数调用期间的读访问记录集合和写访问记录集合;
对于上述调用树中同一父节点下的各叶子节点,根据其读访问记录集合和写访问记录集合确定其之间是否存在存储器访问冲突;以及
将上述同一父节点下的各叶子节点中存在存储器访问冲突的各叶子节点进一步合并为一个节点。
8.如权利要求1或2所述的程序代码的并行性的分析方法,其中根据上述跟踪结果,对上述程序代码进行并行性的分析的步骤进一步包括:
根据上述跟踪结果,对上述程序代码在上述执行过程中的各次函数调用进行代码大小和数据大小的分析。
9.如权利要求8所述的程序代码的并行性的分析方法,其中对上述程序代码在上述执行过程中的各次函数调用进行代码大小和数据大小的分析的步骤进一步包括:
对于上述程序代码在上述执行过程中的各次函数调用,
将其所对应的被调用函数的本身代码大小与该函数调用期间进一步调用的各函数的代码大小之和作为该函数调用的代码大小;以及
将其在生命周期中进行各次存储器访问时所访问的存储器空间大小之和作为该函数调用的数据大小。
10.一种用于跟踪程序代码的执行过程的模拟器,包括:
模拟的执行环境,用于模拟程序代码能够在其中顺序执行的目标系统的执行环境;以及
执行过程跟踪单元,用于跟踪上述程序代码在上述模拟执行环境中的顺序执行过程,以获得该程序代码的执行信息,
其中上述执行过程跟踪单元判断在上述模拟的执行环境中执行的当前指令的类型:
如果该指令是调用非系统API的函数调用/返回指令,则将当前执行周期以及被调用函数的标识记入日志;
如果该指令是调用系统API中的存储器分配或释放函数的函数调用/返回指令,则将当前执行周期以及被分配的存储器大小、存储器地址记入日志;以及
如果该指令是加载/存储指令,将当前执行周期以及数据地址、数据大小、读/写类型记入日志。
11.权利要求10所述的用于跟踪程序代码的执行过程的模拟器,还包括:
跟踪预处理单元,用于获得与上述程序代码在上述顺序执行过程中的各执行动作相应的存储器类型信息,并将其记入日志。
12.权利要求10所述的用于跟踪程序代码的执行过程的模拟器,其中上述模拟的执行环境进一步包括:
模拟存储器,用作所模拟的上述目标系统的存储器;
存储器管理单元,用于在程序代码的存储器访问期间将虚拟地址转换为物理地址;
流水线,其包括指令取单元、指令解码单元和指令执行单元,分别用于实现从上述模拟存储器的指令的获取、指令的格式转换以及指令的执行;以及
模拟寄存器,用作所模拟的上述目标系统的寄存器。
13.一种程序代码的并行性的分析系统,包括:
权利要求10-12中任意一项所述的用于跟踪程序代码的执行过程的模拟器;以及
并行性分析单元,用于根据上述模拟器对程序代码的执行过程的跟踪结果,对该程序代码进行并行性的分析。
14.权利要求13所述的程序代码的并行性的分析系统,其中上述并行性分析单元根据上述模拟器获得的跟踪结果中记录的上述程序代码的各执行动作及其相应的时间信息和存储器类型信息,来进行并行性的分析。
15.权利要求13所述的程序代码的并行性的分析系统,其中上述并行性分析单元进一步包括:
访问记录获得单元,用于根据上述模拟器所获得的跟踪结果,为上述程序代码在执行过程中的各次函数调用获得读访问记录集合和写访问记录集合;以及
依赖性确定单元,用于对于同一函数中的各函数调用,根据该各函数调用的读访问记录集合和写访问记录集合,确定其之间是否存在依赖关系。
16.权利要求15所述的程序代码的并行性的分析系统,其中上述依赖性确定单元进一步包括:
调用树构造单元,用于根据上述模拟器所获得的跟踪结果,以上述程序代码在执行过程中的各次函数调用作为节点、以函数调用之间的关系作为节点之间的关系,生成该程序代码的调用树;以及
调用树优化单元,用于对于上述调用树中同一父节点下的各叶子节点,根据其所对应的函数调用期间的读访问记录集合和写访问记录集合确定其之间是否存在存储器访问冲突,并且将存在存储器访问冲突的各叶子节点进一步合并为一个节点。
17.权利要求13所述的程序代码的并行性的分析系统,还包括:
代码/数据大小分析单元,用于对于上述程序代码在执行过程中的各次函数调用,将其所对应的被调用函数的本身代码大小与该函数调用期间进一步调用的各函数的代码大小之和作为该函数调用的代码大小,并将其在生命周期中进行各次存储器访问时所访问的存储器空间大小之和作为该函数调用的数据大小。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200710109089 CN101329638B (zh) | 2007-06-18 | 2007-06-18 | 程序代码的并行性的分析方法和系统 |
US12/141,571 US8316355B2 (en) | 2007-06-18 | 2008-06-18 | Method and system for analyzing parallelism of program code |
US13/613,572 US9047114B2 (en) | 2007-06-18 | 2012-09-13 | Method and system for analyzing parallelism of program code |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200710109089 CN101329638B (zh) | 2007-06-18 | 2007-06-18 | 程序代码的并行性的分析方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101329638A CN101329638A (zh) | 2008-12-24 |
CN101329638B true CN101329638B (zh) | 2011-11-09 |
Family
ID=40205455
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200710109089 Expired - Fee Related CN101329638B (zh) | 2007-06-18 | 2007-06-18 | 程序代码的并行性的分析方法和系统 |
Country Status (2)
Country | Link |
---|---|
US (2) | US8316355B2 (zh) |
CN (1) | CN101329638B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108319458A (zh) * | 2018-01-17 | 2018-07-24 | 南京航空航天大学 | 一种基于图形化卫式命令演算的多任务编译方法 |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102053825A (zh) * | 2009-10-30 | 2011-05-11 | 国际商业机器公司 | 用于处理软件设计冲突的方法和系统 |
US8640108B2 (en) * | 2009-12-31 | 2014-01-28 | International Business Machines Corporation | Method for managing hardware resources within a simultaneous multi-threaded processing system |
JP5494156B2 (ja) * | 2010-04-09 | 2014-05-14 | ミツミ電機株式会社 | 評価システム、評価装置、評価方法及び評価プログラム |
CN101923492B (zh) * | 2010-08-11 | 2013-05-01 | 上海交通大学 | 面向嵌入式异构多核上执行动态分配指令的方法 |
KR101649925B1 (ko) * | 2010-10-13 | 2016-08-31 | 삼성전자주식회사 | 멀티 트레드 프로그램에서 변수의 단독 메모리 접근여부를 분석하는 방법 |
CN101986265B (zh) * | 2010-10-29 | 2013-09-25 | 浙江大学 | 一种基于Atom处理器的指令并行分发方法 |
CN102110018B (zh) * | 2010-12-23 | 2013-09-11 | 山东中创软件工程股份有限公司 | 一种云应用处理方法及系统 |
US9069893B2 (en) * | 2011-03-23 | 2015-06-30 | International Business Machines Corporation | Automatic verification of determinism for parallel programs |
CN102789377B (zh) * | 2011-05-18 | 2015-09-30 | 国际商业机器公司 | 处理指令分组信息的方法和装置 |
WO2013010159A1 (en) * | 2011-07-14 | 2013-01-17 | Siemens Corporation | Reducing the scan cycle time of control applications through multi-core execution of user programs |
US20130086564A1 (en) * | 2011-08-26 | 2013-04-04 | Cognitive Electronics, Inc. | Methods and systems for optimizing execution of a program in an environment having simultaneously parallel and serial processing capability |
US9727338B2 (en) * | 2012-11-05 | 2017-08-08 | Nvidia Corporation | System and method for translating program functions for correct handling of local-scope variables and computing system incorporating the same |
US9519568B2 (en) | 2012-12-31 | 2016-12-13 | Nvidia Corporation | System and method for debugging an executing general-purpose computing on graphics processing units (GPGPU) application |
EP2951680B1 (en) | 2013-01-30 | 2020-12-23 | EntIT Software LLC | Acquiring identification of an application lifecycle management entity associated with similar code |
US9465594B2 (en) * | 2013-02-27 | 2016-10-11 | Hewlett Packard Enterprise Development Lp | Distributed implementation of sequential code that includes a future |
US20130219372A1 (en) | 2013-03-15 | 2013-08-22 | Concurix Corporation | Runtime Settings Derived from Relationships Identified in Tracer Data |
KR102062208B1 (ko) * | 2013-05-03 | 2020-02-11 | 삼성전자주식회사 | 멀티스레드 프로그램 코드의 변환 장치 및 방법 |
US9471456B2 (en) * | 2013-05-15 | 2016-10-18 | Nvidia Corporation | Interleaved instruction debugger |
US9063710B2 (en) | 2013-06-21 | 2015-06-23 | Sap Se | Parallel programming of in memory database utilizing extensible skeletons |
CN104685473B (zh) * | 2013-09-30 | 2018-11-06 | 华为技术有限公司 | 一种软件测试方法及装置 |
CN104794046B (zh) * | 2014-01-21 | 2018-12-18 | 腾讯科技(深圳)有限公司 | 符号化程序运行日志的方法和系统 |
US9767004B2 (en) * | 2014-06-16 | 2017-09-19 | Symantec Corporation | Dynamic call tracking method based on CPU interrupt instructions to improve disassembly quality of indirect calls |
CN105335230A (zh) * | 2014-07-30 | 2016-02-17 | 阿里巴巴集团控股有限公司 | 一种服务处理方法及装置 |
US10649899B2 (en) | 2014-09-25 | 2020-05-12 | Intel Corporation | Multicore memory data recorder for kernel module |
US9846774B2 (en) * | 2015-06-27 | 2017-12-19 | Mcafee, Llc | Simulation of an application |
CN107122290B (zh) * | 2016-02-25 | 2020-06-09 | 阿里巴巴集团控股有限公司 | 日志信息的记录方法及装置 |
CN107025547B (zh) * | 2016-09-19 | 2020-10-16 | 创新先进技术有限公司 | 支付通道检测方法、装置及终端 |
JP7102756B2 (ja) * | 2018-02-02 | 2022-07-20 | 富士フイルムビジネスイノベーション株式会社 | 情報処理装置及びプログラム |
US11093225B2 (en) * | 2018-06-28 | 2021-08-17 | Xilinx, Inc. | High parallelism computing system and instruction scheduling method thereof |
CN109582650B (zh) * | 2018-11-09 | 2021-05-25 | 金色熊猫有限公司 | 模块调用量处理方法、装置、电子设备、存储介质 |
CN112257362B (zh) * | 2020-10-27 | 2023-01-31 | 海光信息技术股份有限公司 | 逻辑代码的验证方法、验证装置以及存储介质 |
US11934255B2 (en) | 2022-01-04 | 2024-03-19 | Bank Of America Corporation | System and method for improving memory resource allocations in database blocks for executing tasks |
CN114443174A (zh) * | 2022-02-17 | 2022-05-06 | Oppo广东移动通信有限公司 | 代码加载方法、代码加载装置、存储介质与电子设备 |
CN117093502B (zh) * | 2023-10-13 | 2024-01-30 | 支付宝(杭州)信息技术有限公司 | 程序代码的并行性检测方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1123930A (zh) * | 1994-04-28 | 1996-06-05 | 东芝株式会社 | 支援并行程序设计的装置以及设计并行程序的方法 |
US6230313B1 (en) * | 1998-12-23 | 2001-05-08 | Cray Inc. | Parallelism performance analysis based on execution trace information |
CN1645339A (zh) * | 2005-01-31 | 2005-07-27 | 浙江大学 | 在嵌入式系统模拟器上调试应用程序的方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6691287B2 (en) * | 2000-12-14 | 2004-02-10 | Tharas Systems Inc. | Functional verification system |
US20030120460A1 (en) | 2001-12-21 | 2003-06-26 | Celoxica Ltd. | System, method, and article of manufacture for enhanced hardware model profiling |
US7162401B1 (en) * | 2003-03-28 | 2007-01-09 | Applied Micro Circuits Corporation | Monitoring of resources that are being modeled by simulation or emulation |
EP1569104A3 (en) * | 2004-01-09 | 2006-05-03 | Interuniversitair Microelektronica Centrum Vzw | An automated method for performing parallelization of sequential code and a computerized system adapted therefore |
JP3901182B2 (ja) * | 2004-06-30 | 2007-04-04 | 日本電気株式会社 | プログラム並列化装置及びその方法並びにプログラム |
US20070130114A1 (en) * | 2005-06-20 | 2007-06-07 | Xiao-Feng Li | Methods and apparatus to optimize processing throughput of data structures in programs |
US20070169028A1 (en) * | 2005-12-15 | 2007-07-19 | Glenn Kasten | Partitioning of non-volatile memories for vectorization |
US20070234327A1 (en) * | 2006-03-31 | 2007-10-04 | Baxter Robert A | Configuring media applications based on performance characteristics |
GB2443277B (en) * | 2006-10-24 | 2011-05-18 | Advanced Risc Mach Ltd | Performing diagnostics operations upon an asymmetric multiprocessor apparatus |
-
2007
- 2007-06-18 CN CN 200710109089 patent/CN101329638B/zh not_active Expired - Fee Related
-
2008
- 2008-06-18 US US12/141,571 patent/US8316355B2/en not_active Expired - Fee Related
-
2012
- 2012-09-13 US US13/613,572 patent/US9047114B2/en not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1123930A (zh) * | 1994-04-28 | 1996-06-05 | 东芝株式会社 | 支援并行程序设计的装置以及设计并行程序的方法 |
US6230313B1 (en) * | 1998-12-23 | 2001-05-08 | Cray Inc. | Parallelism performance analysis based on execution trace information |
CN1645339A (zh) * | 2005-01-31 | 2005-07-27 | 浙江大学 | 在嵌入式系统模拟器上调试应用程序的方法 |
Non-Patent Citations (3)
Title |
---|
.构造串行程序对应的并行任务(DAG)图.《计算机工程与应用》.2007,(第01期),41-43. |
郭龙,陈闳中,叶青 |
郭龙,陈闳中,叶青;.构造串行程序对应的并行任务(DAG)图.《计算机工程与应用》.2007,(第01期),41-43. * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108319458A (zh) * | 2018-01-17 | 2018-07-24 | 南京航空航天大学 | 一种基于图形化卫式命令演算的多任务编译方法 |
CN108319458B (zh) * | 2018-01-17 | 2021-04-06 | 南京航空航天大学 | 一种基于图形化卫式命令演算的多任务编译方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101329638A (zh) | 2008-12-24 |
US8316355B2 (en) | 2012-11-20 |
US20090031290A1 (en) | 2009-01-29 |
US9047114B2 (en) | 2015-06-02 |
US20130007536A1 (en) | 2013-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101329638B (zh) | 程序代码的并行性的分析方法和系统 | |
CN105051680B (zh) | 用于在处理器内部的硬件并行执行道上处理指令的处理器及方法 | |
CN101256502B (zh) | 模拟多处理器系统的系统和方法 | |
Kumar et al. | A framework for hardware/software codesign | |
CN105408859B (zh) | 用于指令调度的方法和系统 | |
CN100356341C (zh) | 基于模拟器的嵌入式软件运行时能耗估算方法 | |
CN104050026A (zh) | 使对共享存储器存取的同步松弛的处理器、方法及系统 | |
CN101611380A (zh) | 推测性吞吐量计算 | |
EP3391224B1 (en) | Method and apparatus for data mining from core traces | |
CN103678115B (zh) | 在混合模式程序中检测源代码差错的位置的设备和方法 | |
CN101802784A (zh) | 动态指针的消岐 | |
Bai et al. | ArchExplorer: Microarchitecture exploration via bottleneck analysis | |
CN100530103C (zh) | 一种模拟器及方法 | |
Janik et al. | An overview of altera sdk for opencl: A user perspective | |
Baloukas et al. | Optimization methodology of dynamic data structures based on genetic algorithms for multimedia embedded systems | |
Faravelon et al. | Fast and accurate branch predictor simulation | |
Ducroux et al. | Fast and accurate power annotated simulation: Application to a many-core architecture | |
Yuan et al. | Automatic enhanced CDFG generation based on runtime instrumentation | |
Gu et al. | Case study of gate-level logic simulation on an extremely fine-grained chip multiprocessor | |
Nicolas et al. | Parallel native-simulation for multi-processing embedded systems | |
Mišić et al. | Comparison of parallel central processing unit‐and graphics processing unit‐based implementations of greedy string tiling algorithm for source code plagiarism detection | |
Sundari et al. | Improved memory performance through the development of an energy efficient distributed memory Management System | |
Ia-Manee et al. | Reducing engergy consumption in programs using cohesion technique | |
Raghav et al. | SIMinG‐1k: A thousand‐core simulator running on general‐purpose graphical processing units | |
Zhu | Predicting Performance of Parallel Analytics and Irregular Computations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20111109 Termination date: 20200618 |
|
CF01 | Termination of patent right due to non-payment of annual fee |