CN101482813B - 一种线程并行执行优化方法 - Google Patents
一种线程并行执行优化方法 Download PDFInfo
- Publication number
- CN101482813B CN101482813B CN2009100464927A CN200910046492A CN101482813B CN 101482813 B CN101482813 B CN 101482813B CN 2009100464927 A CN2009100464927 A CN 2009100464927A CN 200910046492 A CN200910046492 A CN 200910046492A CN 101482813 B CN101482813 B CN 101482813B
- Authority
- CN
- China
- Prior art keywords
- thread
- threads
- sets
- steps
- optimized structure
- 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
Abstract
本发明公开了一种线程并行执行优化方法。它是利用线程的语义和线程之间的关系优化线程并行执行。首先为每一线程构造线程优化结构,并且为每一台处理器构造处理器优化结构;其次为处理器优化结构设计动态分配和回收操作;接着为每一种类型线程设计线程并行执行优化操作;最后按照线程优化结构的控制部分的含义优化线程并行执行。本发明能够尽可能减少不必要线程执行,缩短程序执行时间,提高处理器有效利用率。
Description
技术领域
本发明涉及计算机领域,提出了一种线程并行执行优化方法。
背景技术
人类对计算能力无止境的需求促进了硬件技术和软件技术飞速发展。自上世纪七十年代以来,随着处理器的半导体工艺和体系结构不断迅速发展,相适应的软件设计技术和设计语言也得到了迅速发展。由于系统性能的提高,计算机在经济、社会、军事等各个领域取得了极大的成功,产生了良好的效益。计算机应用的不断深化需要计算机系统提供更高的性能,推动了处理器及相关软硬件技术研究不断深入。
由于面临高功耗和硬件设计异常困难等棘手问题,通过提高主频和复杂的流水线技术发掘指令级并行性已经很难进一步提高单处理器的性能。在这样的背景下,单片多核处理器(Chip Multi-Processors,CMP)技术成为最受关注的新技术之一。单片多核技术通过在一块芯片上集成多个相对简单的微处理器核心来并行执行程序,提高系统性能。利用CMP技术提高系统性能的关键是全面发挥多个微处理器核心的并行优势。线程级并行(Thread-LevelParallel,TLP)和线程级前瞻(Thread-Level Speculative,TLS)技术通过将串行程序划分为若干能够并行执行的线程来实现充分利用CMP多核资源的目的。线程并行层次较高,易于在源码级进行设计和实现,能够利用程序的语法和语义结构特征,处理器利用率由此得到了较大的提高,所以TLP技术并行引起了广泛的关注。
在串行程序执行过程中,处理器不会执行不必要的指令,但是线程级并行执行技术中却并非如此。由于仅仅按照保证程序语义不变和降低线程之间的相关性两个原则,将串行程序划分为若干并行执行的线程,而没有考虑程序具体执行环境对线程执行的影响,因而造成了不必要线程的执行。
发明内容
本发明要解决的技术问题是提供一种线程并行执行优化方法,通过减少不必要线程的执行缩短程序执行时间,提高处理器利用率。
为达到上述目的,本发明采用下述技术方案:
一种线程并行执行优化方法,其特征在于具体操作步骤如下:
A.为每一个线程构造线程优化结构;
B.为每一台处理器构造处理器优化结构;
C.利用步骤A所述的线程优化结构和步骤B所述的处理器优化结构来优化线程并行执行。
上述步骤A中的线程优化结构包括控制部分、线程组编号、线程编号;
上述步骤A中的构造线程优化结构的操作步骤如下:
A1.为线程优化结构分配连续的9个字节的内存空间;
A2.使用步骤A1所述的9个字节中的第1个字节,构造线程优化结构中的控制部分;
A3.使用步骤A1所述的9个字节中的第2个到第5个字节,构造线程优化结构中的线程组编号;
A4.使用步骤A1所述的9个字节中的第6个到第9个字节,构造线程优化结构中的线程编号。
上述步骤A2中的构造线程优化结构中的控制部分的操作步骤如下:
A21.控制部分的第1个二进制位标识线程并行执行是否需要优化:如果为1,则标识线程并行执行需要优化;如果为0,则标识线程并行执行不需要优化;
A22.控制部分的第2个二进制位标识线程是否包含子程序返回指令:如果为1,则标识线程包含子程序返回指令;如果为0,则标识线程不包含子程序返回指令;
A23.控制部分的第3个二进制位标识第1个字节的第2个二进制位为0的线程是否执行:如果为1,则标识第1个字节的第2个二进制位为0的线程停止执行;如果为0,则第1个字节的第2个二进制位为0的线程执行;
A24.控制部分的第4个二进制位标识步骤A3所述的线程组中的线程是否为互斥类型:如果为1,则标识线程组中的线程为互斥类型;如果为0,则标识线程组中的线程不是互斥类型;
A25.控制部分的第5个二进制位标识步骤A3所述的线程组是否包含循环指令:如果为1,则标识线程组包含循环指令;如果为0,则标识线程组不包含循环指令;
A26.控制部分的第6个二进制位标识步骤A3所述的线程组是否包含循环中断指令:如果为1,则标识线程组包含循环中断指令;如果为0,则标识线程组不包含循环中断指令;
A27.控制部分的第7个至第8个二进制位预留。
上述步骤A23中的线程组中的线程为互斥类型,即指所述线程组在某一次执行中有且仅有一个线程被正确执行;
上述步骤A3中的构造线程优化结构中的线程组编号的操作步骤如下:
A31.按照线程执行的顺序依次分析;
A32.将所有包含子程序返回指令的线程归为同一个线程组;
A33.将属于同一层跳转指令范畴内的线程归为同一个线程组;
A34.将位于同一层循环指令范畴内的线程归为同一个线程组;
A35.将经过步骤A32、A33、A34归类后剩余的每一个线程都归为一个单独的线程组;
A36.按照线程组执行的顺序,从0开始由小到大依次为线程组编号;
A37.将步骤A35所述线程组编号存储到步骤A3所述的第2个到第5个字节中;
A38.构造线程优化结构中的线程组编号的操作执行完毕。
上述步骤A33中的同一层跳转指令是指执行跳转指令时处理器测试的变量相同。
上述步骤A34中的同一层循环指令是指执行循环指令时处理器测试的变量相同。
上述步骤A4中的构造线程优化结构中的线程编号的操作步骤如下:
A41.按照线程组执行的顺序依次分析;
A42.按照线程组中线程的执行顺序,从1开始由小到大依次为线程编号;
A43.判断线程组所在线程优化结构中的控制部分的第4个二进制位是否为1,如果为1,则转步骤A44;否则转步骤A45;
A44.将线程组内所有线程编号设置为该线程组内线程编号的最大值;
A45.将步骤A42和步骤A44所述线程编号存储在步骤A4所述的第6个到第9个字节中。
上述步骤B中的处理器优化结构是指以线程优化结构为元素的动态数组。
上述步骤B中的处理器优化结构包括动态分配和动态回收两个操作。
上述动态分配的操作步骤如下:
BA1.查找线程所在线程组是否在上述的处理器优化结构中,如果是,则转步骤BA2;否则,转步骤BA3;
BA2.返回该线程组所在的线程优化结构;
BA3.为所述的动态数组增加9个字节作为新增的线程优化结构;
BA4.将步骤BA3所述的线程优化结构的控制部分的8个二进制位全部设置为0;
BA5.将步骤A3所述的线程组编号存储到步骤BA3所述的线程优化结构的线程组编号中;
BA6.将步骤A3所述的线程编号存储到步骤BA3所述的线程优化结构的线程编号中;
BA7.返回步骤BA3所述的线程优化结构。
上述动态回收的是指将要求删除的元素从动态数组中删除。
上述步骤C中的优化线程并行执行的操作步骤如下:
C1.判断线程是否全部执行完毕,如果是,则线程并行执行优化操作完成;否则转步骤C2;
C2.判断步骤C1所述线程的线程优化结构中的控制部分的第1个二进制位是否为0,如果为0,则转步骤C3;否则转步骤C4;
C3.继续执行该线程,转步骤C1;
C4.执行所述的动态分配的操作;
C5.判断正在执行线程的线程优化结构中的控制部分的第2个二进制位是否为1,如果为1,则转步骤C6;否则转步骤C7;
C6.执行子程序返回指令线程优化操作;
C7.判断C4返回的线程优化结构的控制部分的第3个二进制位设置是否为1,若为1,则转步骤C1;否则转步骤C8;
C8.判断正在执行线程的线程优化结构中的控制部分的第4个二进制位是否为1,如果为1,则转步骤C9;否则转步骤C10;
C9.执行互斥类型线程优化操作;
C10.判断正在执行线程的线程优化结构中的控制部分的第5个二进制位是否为1,如果为1,则转步骤C11;否则转步骤C3;
C11.判断正在执行线程的线程优化结构中的控制部分的第6个二进制位是否为1,如果为1,则转步骤C12;否则转步骤C3;
C12.执行循环中断指令线程优化操作。
上述步骤C6中的子程序返回指令线程优化操作的操作步骤如下:
C61.判断步骤C4所述线程优化结构中的线程编号是否小于步骤C3返回的动态数组元素中的线程编号,如果是,则转步骤C63;否则转步骤C62;
C62.终止该线程执行;
C63.将步骤C3返回的动态数组元素中的线程编号更换为步骤C4所述的正在执行线程的线程编号;
C64.将C3返回的动态数组元素中的控制部分的第3个二进制位设置为1;
C65.判断其它处理器核正在执行线程的线程组编号是否大于步骤C4所述线程的线程组编号,如果是,则转C62;否则转步骤C66;
C66.判断其它处理器核正在执行线程的线程组编号是否等于步骤C4所述线程的线程组编号,且前者的线程编号大于后者的线程编号,如果是,转步骤C62;否则转步骤C67;
C67.判断步骤C3返回的线程优化结构中的线程编号是否等于0,如果是,则转步骤C69;否则子程序返回指令线程优化操作结束;
C68.执行所述的动态回收的操作,子程序返回指令线程优化操作结束。
上述步骤C9中的互斥类型线程优化操作的操作步骤如下:
C91.将C3返回的线程优化结构的线程编号减去1;
C92.判断C3返回的线程优化结构的控制部分的第4个二进制位是否为1,若为1,则转步骤C93;否则继续执行该线程并转步骤C94;
C93.停止执行该线程
C94.将步骤C3返回的线程优化结构的控制部分的第4个二进制位设置为1;
C95.判断其它处理核正在执行线程的线程组编号是否与步骤C7所述线程的线程组编号相同,如果相同,则转步骤C96;否则转步骤C1;
C96.停止执行步骤C95所述的线程组编号相同的线程
C97.将步骤C3返回的线程优化结构的线程编号减去步骤C96停止执行线程的数目;
C98.判断步骤C3返回的线程优化结构的线程编号是否等于0,如果是,则转步骤C99;否则互斥类型线程优化操作结束;
C99.执行所述的动态回收的操作,互斥类型线程优化操作结束。
上述步骤C12中的循环指令线程优化操作的操作步骤如下:
C121.判断正在执行线程的线程优化结构中的线程编号是否小于步骤C3返回的线程优化结构的线程编号,如果是,则转步骤C123;否则转步骤C122;
C122.终止该线程执行;
C123.将步骤C3返回的线程优化结构的线程编号更换为步骤C121所述的正在执行线程的线程编号;
C124.判断其它处理器核正在执行线程的线程组编号是否与步骤C10所述的线程组编号相同,如果相同,则转步骤C125;否则转步骤C126;
C125.判断其它处理器核正在执行线程的线程编号是否大于步骤C10所述的线程编号,如果是,则转步骤C122;否则转步骤C126;
C126.判断步骤C3返回的线程优化结构的线程编号是否等于0,如果是,则转步骤C127;否则循环中断指令线程优化操作结束;
C127.执行所述的动态回收的操作,循环中断指令线程优化操作结束。
本发明与已有技术相比较,具有如下面显而易见的突出实质性特点和显著有点:本发明能够尽可能减少不必要线程执行,缩短程序执行时间,提高处理器有效利用率。
附图说明
图1是本发明中的线程并行优化方法的流程图
图2是本发明中的线程优化结构的结构图
图3是本发明中的构造线程组编号的流程图
图4是本发明中的构造线程编号的流程图
图5是本发明中的处理器优化结构的动态分配操作的流程图
图6是本发明中的线程并行执行优化的流程图
图7是本发明中的子程序返回指令线程优化操作的流程图
图8是本发明中的互斥类型线程优化操作的流程图
图9是本发明中的循环中断指令线程优化操作的流程图
具体实施方式
本发明的一个优选实施例结合附图详述如下:
本实施例所述方案的应用环境是面向多核处理器的线程级并行执行环境,本实施例不限定所述技术方案应用环境中多核处理器架构和线程划分及调度方式。
下面结合说明书附图和具体实施方式对本发明作进一步详细的说明。
参照图1,示出了本线程并行优化方法的流程图。
步骤101,为每一个线程构造线程优化结构;
步骤102,为每一台处理器构造处理器优化结构;
步骤103,利用步骤101构造的线程优化结构和步骤102构造的处理器优化结构来优化结构优化线程并行执行。
参照图2,示出了本实施例中的线程优化结构的结构图。
线程优化结构分为控制部分、线程组编号和线程编号三部分,由9个字节构成。其中,第1个字节为控制部分,第2个至第5个字节为线程组编号,第6个至第9个字节为线程编号。
标识符201,标识了控制部分的第1个二进制位标识线程并行执行是否需要优化,如果为1,则标识线程并行执行需要优化;如果为0,则标识线程并行执行不需要优化;
标识符202,标识了控制部分的第2个二进制位标识线程是否包含子程序返回指令,如果为1,则标识线程包含子程序返回指令;如果为0,则标识线程不包含子程序返回指令;
标识符203,标识了控制部分的第3个二进制位标识第1个字节的第2个二进制位为0的线程是否执行,如果为1,则标识第1个字节的第2个二进制位为0的线程停止执行;如果为0,则第1个字节的第2个二进制位为0的线程执行;
标识符204,标识了控制部分的第4个二进制位标识步骤A3所述的线程组中的线程是否为互斥类型,如果为1,则标识线程组中的线程为互斥类型;如果为0,则标识线程组中的线程不是互斥类型;
标识符205,标识了控制部分的第5个二进制位标识步骤A3所述的线程组是否包含循环指令,如果为1,则标识线程组包含循环指令;如果为0,则标识线程组不包含循环指令;
标识符206,标识了控制部分的第6个二进制位标识步骤A3所述的线程组是否包含循环中断指令;如果为1,则标识线程组包含循环中断指令;如果为0,则标识线程组不包含循环中断指令;
标识符207,标识了控制部分的二进制位预留;
标识符208,标识了控制部分的二进制位预留;
标识符209,标识了线程优化结构中的线程组编号;
标识符210,标识了线程优化结构中的线程编号。
参照图3,示出了本实施例中的构造线程组编号的流程图。
步骤301,按照线程执行的顺序依次分析;
步骤302,将所有包含子程序返回指令的线程归为同一个线程组;
本步骤将包含子程序返回指令的所有线程归为同一个线程组;
步骤303,将属于同一层跳转指令范畴内的线程归为同一个线程组;
步骤304,将位于同一层循环指令范畴内的线程归为同一个线程组;
步骤305,将经过步骤302、303、304归类后剩余的每一个线程都归为一个单独的线程组;
本步骤将剩余的每一个线程都作为一个单独的线程组,即该线程组中只含有一个线程,此类线程不需要单独并行执行优化,因而此类线程的线程优化结构的第1个二进制为0;
步骤306,按照线程组执行的顺序,从1开始由小到大依次为线程组编号;
步骤307,将步骤306所述线程组编号存储到线程优化结构的第2个到第5个字节中;
本步骤中的线程优化结构的第2个到第5个字节为线程组编号,因而将构造的线程组编号存储在第2个到第5个字节中。
参照图4,示出了本实施例中的构造线程编号的流程图。
步骤401,按照线程组执行的顺序依次分析;
步骤402,按照线程组中线程的执行顺序,从1开始由小到大依次为线程编号;
本步骤表明线程组编号是按照线程在线程组中执行的顺序构造的,线程编号是线程在线程组内部的编号,在线程组之外是无意义的。
步骤403,判断线程组所在线程优化结构中的控制部分的第4个二进制位是否为1,如果为1,则转步骤404;否则转步骤405;
步骤404,将线程组内所有线程编号设置为该线程组内线程编号的最大值;
本步骤针对互斥类型的线程设计。在互斥类型的线程并行执行优化中,线程组每次执行过程中有且仅有一个线程被正确执行,因而当某一个线程正确执行时,应当终止其它线程执行,并且回收处理器优化结构中分配的空间。但由于线程执行顺序是不确定的,所以只有该线程组对应的处理器优化结构不再需要时,才能进行动态回收。本步骤将线程编号设为最大值,即设为该线程组内线程的数目;每次优化该线程组内一个线程执行时都将线程编号减1,当线程编号等于0时,该线程组对应的处理器优化结构就可以进行动态回收操作。
步骤405,将步骤402和步骤404所述线程编号存储在线程优化结构的第6个到第9个字节中。
本步骤中的线程优化结构的第6个到第9个字节为线程编号,因而将构造的线程编号存储在第6个到第9个字节中。
参照图5,示出了本实施例中的处理器优化结构的动态分配操作的流程图。
步骤501,查找线程所在线程组是否在处理器优化结构中,如果是,则转步骤502;否则,转步骤503;
本步骤除了处理器优化结构的动态分配操作外,还包括查询操作;如果要查询的线程组已在处理器优化结构中,本步骤返回该线程组所在的线程优化结构;
步骤502,返回该线程组所在的线程优化结构;
步骤503,为处理器优化结构增加9个字节作为新增的线程优化结构;
步骤504,将步骤503所述的线程优化结构的控制部分的8个二进制位全部设置为0;
步骤505,将步骤501所述的线程组编号存储到步骤503所述的线程优化结构的线程组编号中;
步骤506,将步骤501所述的线程编号存储到步骤503所述的线程优化结构的线程编号中;
步骤504、步骤505、步骤506为新增加的线程优化结构初始化;
步骤507,返回步骤503所述的线程优化结构;
本步骤返回新增的线程优化结构。
参照图6,示出了本实施例中的线程并行执行优化的流程图。
步骤601,判断线程是否全部执行完毕,如果是,则线程并行执行优化操作完成;否则转步骤602;
本步骤判断线程是否全部执行完毕,如果全部执行完毕,那么线程并行执行优化操作也相应结束。
步骤602,判断步骤601所述线程的线程优化结构中的控制部分的第1个二进制位是否为0,如果为0,则转步骤603;否则转步骤604;
本步骤判断当前线程是否需要做线程并行执行优化;
步骤603,继续执行该线程,转步骤601;
本步骤表明,如果不做线程并行执行优化,那么处理器核继续执行该线程,并继续分析下一条指令是否要做线程并行执行优化;
步骤604,执行处理器优化结构的动态分配操作;
本步骤为当前正在进行线程并行执行优化的线程动态分配处理器优化结构,如果该线程所在的线程优化结构已存在于处理器优化结构,那么只返回该线程优化结构;否则为该线程动态分配线程优化结构所需的空间,并进行初始化;
步骤605,判断正在执行线程的线程优化结构中的控制部分的第2个二进制位是否为1,如果为1,则转步骤606;否则转步骤607;
步骤606,执行子程序返回指令线程优化操作;
步骤605、步骤606表示当线程组内的线程包含子程序返回指令时,对线程做执行子程序返回指令线程优化操作;
步骤607,判断步骤604返回的线程优化结构的控制部分的第3个二进制位设置是否为1,若为1,则转步骤601;否则转步骤608;
步骤608,判断正在执行线程的线程优化结构中的控制部分的第4个二进制位是否为1,如果为1,则转步骤609;否则转步骤610;
步骤609,执行互斥类型线程优化操作;
步骤608、步骤609表示当线程组内的线程为互斥类型时,对线程执行互斥类型线程优化操作;
步骤610,判断正在执行线程的线程优化结构中的控制部分的第5个二进制位是否为1,如果为1,则转步骤611;否则转步骤603;
本步骤判断线程是否为由循环语句划分而得的;
步骤611,判断正在执行线程的线程优化结构中的控制部分的第6个二进制位是否为1,如果为1,则转步骤612;否则转步骤603;
步骤612,执行循环中断指令线程优化操作。
步骤611、步骤612表示当线程组内的线程包含循环中断指令时,对线程循环中断指令线程优化操作;
参照图7,示出了本实施例中的子程序返回指令线程优化操作的流程图。
步骤701,判断步骤C4所述线程优化结构中的线程编号是否小于步骤C3返回的线程优化结构中的线程编号,如果是,则转步骤703;否则转步骤702;
本步骤判断当前正在优化线程的线程编号是否小于处理器优化结构中的线程编号,如果是,表明执行顺序在当前线程之前的线程已经执行,那么当前线程应停止执行;
步骤702,终止该线程执行;
步骤703,将动态分配操作返回的线程优化结构中的线程编号更换为当前线程的线程编号;
步骤704,将动态分配操作返回的线程优化结构中的控制部分的第3个二进制位设置为1;
步骤705,判断其它处理器核正在执行线程的线程组编号是否大于步骤C4所述线程的线程组编号,如果是,则转702;否则转步骤706;
步骤706,判断其它处理器核正在执行线程的线程组编号是否等于步骤C4所述线程的线程组编号,且前者的线程编号大于后者的线程编号,如果是,转步骤702;否则转步骤707;
步骤707,判断动态分配操作返回的线程优化结构中的线程编号是否等于0,如果是,则转步骤708;否则子程序返回指令线程优化操作结束;
步骤708,执行处理器优化结构的动态回收操作,子程序返回指令线程优化操作结束。
参照图8,示出了本实施例中的互斥类型线程优化操作的流程图。
步骤801,将动态分配操作返回的线程优化结构的线程编号减去1;
步骤802,判断动态分配操作返回的线程优化结构的控制部分的第4个二进制位是否为1,若为1,则转步骤803;否则继续执行该线程并转步骤804;
步骤803,停止执行该线程
步骤804,将动态分配操作返回的线程优化结构的控制部分的第4个二进制位设置为1;
步骤805,判断其它处理核正在执行线程的线程组编号是否与步骤C7所述线程的线程组编号相同,如果相同,则转步骤806;否则转步骤808;
步骤806,停止执行步骤C805所述的线程组编号相同的线程
步骤807,将动态分配操作返回的线程优化结构的线程编号减去步骤806停止执行线程的数目;
步骤808,判断动态分配操作返回的线程优化结构的线程编号是否等于0,如果是,则转步骤809;否则互斥类型线程优化操作结束;
步骤809,执行处理器优化结构的动态回收操作,互斥类型线程优化操作结束;
参照图9,示出了本实施例中的循环中断指令线程优化操作的流程图。
步骤901,判断正在执行线程的线程优化结构中的线程编号是否小于动态分配操作返回的线程优化结构的线程编号,如果是,则转步骤C123;否则转步骤C122;
本步骤判断当前线程是否需要终止执行。如果小于,表明执行顺序在当前线程之前的线程已正确执行,那么当前线程应停止执行;
步骤902,终止该线程执行;
步骤903,将动态分配操作返回的线程优化结构的线程编号更换为步骤C121所述的正在执行线程的线程编号;
如果当前线程的线程编号小于处理器优化结构中的线程编号,表明应采用当前线程的线程编号作为优化当前线程所在线程组中线程的关键点,即如果线程的线程编号大于当前线程的线程编号,则终止执行该线程;
步骤904,判断其它处理器核正在执行线程的线程组编号是否与步骤C10所述的线程组编号相同,如果相同,则转步骤C125;否则转步骤C126;
步骤905,判断其它处理器核正在执行线程的线程编号是否大于步骤C10所述的线程编号,如果是,则转步骤C122;否则转步骤C126;
步骤906,判断动态分配操作返回的线程优化结构的线程编号是否等于0,如果是,则转步骤C127;否则循环中断指令线程优化操作结束;
本步骤是判断当前线程优化时是否需要执行相应的处理器优化结构的回收操作,如果当前线程所在的线程组已优化完毕,则回收处理器优化结构中相应的线程优化结构所占的空间;
步骤907,执行所述的动态回收操作,循环中断指令线程优化操作结束。
以上对本多处理器实时任务执行功耗优化方法,进行了详细的介绍。本文结合说明书附图和具体实施例进行阐述只是用于帮助理解本发明的方法和核心思想;同时,对于本领域的一般技术人员,依据本发明的方法和思想,在具体实施方式和应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (2)
1.一种线程并行执行优化方法,其特征在于具体操作步骤如下:
A.为每一个线程构造线程优化结构;
B.为每一台处理器构造处理器优化结构;
C.利用步骤A所述的线程优化结构和步骤B所述的处理器优化结构来优化结构优化线程并行执行;
所述步骤A中的线程优化结构包括控制部分、线程组编号、线程编号;所述步骤A中的构造线程优化结构的操作步骤如下:
A1.为线程优化结构分配连续的9个字节的内存空间;
A2.使用步骤A1所述的9个字节中的第1个字节,构造线程优化结构中的控制部分;
A3.使用步骤A1所述的9个字节中的第2个到第5个字节,构造线程优化结构中的线程组编号;
A4.使用步骤A1所述的9个字节中的第6个到第9个字节,构造线程优化结构中的线程编号;
所述步骤A2中的构造线程优化结构中的控制部分的操作步骤如下:
A21.控制部分的第1个二进制位标识线程并行执行是否需要优化:如果为1,则标识线程并行执行需要优化;如果为0,则标识线程并行执行不需要优化;
A22.控制部分的第2个二进制位标识线程是否包含子程序返回指令:如果为1,则标识线程包含子程序返回指令;如果为0,则标识线程不包含子程序返回指令;
A23.控制部分的第3个二进制位标识第1个字节的第2个二进制位为0的线程是否执行:如果为1,则标识第1个字节的第2个二进制位为0的线程停止执行;如果为0,则第1个字节的第2个二进制位为0的线程执行;
A24.控制部分的第4个二进制位标识步骤A3所述的线程组中的线程是否为互斥类型:如果为1,则标识线程组中的线程为互斥类型;如果为0,则标识线程组中的线程不是互斥类型;
A25.控制部分的第5个二进制位标识步骤A3所述的线程组是否包含循环指令:如果为1,则标识线程组包含循环指令;如果为0,则标识线程组不包含循环指令;
A26.控制部分的第6个二进制位标识步骤A3所述的线程组是否包含循环中断指令:如果为1,则标识线程组包含循环中断指令;如果为0,则标识线程组不包含循环中断指令;
A27.控制部分的第7个至第8个二进制位预留;
所述步骤A3中的构造线程优化结构中的线程组编号的操作步骤如下:
A31.按照线程执行的顺序依次分析;
A32.将所有包含子程序返回指令的线程归为同一个线程组;
A33.将属于同一层跳转指令范畴内的线程归为同一个线程组;
A34.将位于同一层循环指令范畴内的线程归为同一个线程组;
A35.将经过步骤A32、A33、A34归类后剩余的每一个线程都归为一个单独的线程组;
A36.按照线程组执行的顺序,从1开始由小到大依次为线程组编号;
A37.将步骤A36所述线程组编号存储到步骤A3所述的第2个到第5个字节中;
A38.构造线程优化结构中的线程组编号的操作执行完毕;
所述步骤A4中的构造线程优化结构中的线程编号的操作步骤如下:
A41.按照线程组执行的顺序依次分析;
A42.按照线程组中线程的执行顺序,从1开始由小到大依次为线程编号;
A43.判断线程组所在线程优化结构中的控制部分的第4个二进制位是否为1,如果为1,则转步骤A44;否则转步骤A45;
A44.将线程组内所有线程编号设置为该线程组内线程编号的最大值;
A45.将步骤A42和步骤A44所述线程编号存储在步骤A4所述的第6个到第9个字节中。
2.根据权利要求1所述的线程并行执行优化方法,其特征在于所述步骤B中的处理器优化结构是指以线程优化结构为元素的动态数组;所述处理器优化结构包括动态分配和动态回收两个操作;
所述的动态分配的操作步骤如下:
BA1.查找线程所在线程组是否在所述的处理器优化结构中,如果是,则转步骤BA2;否则,转步骤BA3;
BA2.返回该线程组所在的线程优化结构;
BA3.为所述的动态数组增加9个字节作为新增的线程优化结构;
BA4.将步骤BA3所述的线程优化结构的控制部分的8个二进制位全部设置为0;
BA5.将步骤BA1所述的线程组编号存储到步骤BA3所述的线程优化结构的线程组编号中;
BA6.将步骤BA1所述的线程编号存储到步骤BA3所述的线程优化结构的线程编号中;
BA7.返回步骤BA3所述的线程优化结构;
所述的动态回收的操作是指将要求删除的元素从动态数组中删除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100464927A CN101482813B (zh) | 2009-02-24 | 2009-02-24 | 一种线程并行执行优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100464927A CN101482813B (zh) | 2009-02-24 | 2009-02-24 | 一种线程并行执行优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101482813A CN101482813A (zh) | 2009-07-15 |
CN101482813B true CN101482813B (zh) | 2012-02-29 |
Family
ID=40879942
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100464927A Expired - Fee Related CN101482813B (zh) | 2009-02-24 | 2009-02-24 | 一种线程并行执行优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101482813B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8688964B2 (en) * | 2009-07-20 | 2014-04-01 | Microchip Technology Incorporated | Programmable exception processing latency |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101233489A (zh) * | 2005-08-04 | 2008-07-30 | 国际商业机器公司 | 具有多个处理器的计算机系统中的自适应进程分派 |
WO2008127622A2 (en) * | 2007-04-11 | 2008-10-23 | Apple Inc. | Data parallel computing on multiple processors |
-
2009
- 2009-02-24 CN CN2009100464927A patent/CN101482813B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101233489A (zh) * | 2005-08-04 | 2008-07-30 | 国际商业机器公司 | 具有多个处理器的计算机系统中的自适应进程分派 |
WO2008127622A2 (en) * | 2007-04-11 | 2008-10-23 | Apple Inc. | Data parallel computing on multiple processors |
Also Published As
Publication number | Publication date |
---|---|
CN101482813A (zh) | 2009-07-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101387952B (zh) | 单芯片多处理器任务调度管理方法 | |
CN101441564B (zh) | 为程序定制的可重构加速器实现方法 | |
CN101923492B (zh) | 面向嵌入式异构多核上执行动态分配指令的方法 | |
CN101299194B (zh) | 基于可配置处理器的异构多核系统线程级动态调度方法 | |
CN101807144A (zh) | 一种前瞻多线程并行执行优化方法 | |
CN102918501A (zh) | 用于分析多线程应用的性能的方法和系统 | |
CN102073740A (zh) | 基于基数排序的字符串后缀数组构造方法 | |
CN1717654A (zh) | 数据处理器的循环控制电路 | |
CN101833438A (zh) | 一种基于多重并行的数据通用处理方法 | |
CN102799625B (zh) | 一种挖掘社交网络中话题核心圈的方法及系统 | |
CN110852046B (zh) | 一种文本后缀索引的分块归纳排序方法及系统 | |
CN111221575A (zh) | 一种乱序高性能处理器的寄存器重命名方法及系统 | |
CN101944014B (zh) | 一种自动流水并行的实现方法 | |
CN110134517A (zh) | 一种基于公式解析的并行计算方法及装置 | |
CN103064841A (zh) | 检索装置和检索方法 | |
CN101482813B (zh) | 一种线程并行执行优化方法 | |
CN103995827A (zh) | MapReduce计算框架中的高性能排序方法 | |
CN103761499B (zh) | 基于多核dsp的条码识别方法 | |
CN102243596A (zh) | 一种自适应动态代码卸载方法 | |
CN101286138A (zh) | 基于数据划分的多线程共享多核处理器二级缓存的方法 | |
CN100583042C (zh) | 针对程序中循环的编译方法和编译设备 | |
CN112579089B (zh) | 异构众核数据重用方法 | |
CN101901192A (zh) | 一种片上和片外数据对象静态分配方法 | |
Rabiu et al. | Comparative analysis between selection sort and merge sort algorithms | |
Ferraz et al. | Efficient Strategies for Graph Pattern Mining Algorithms on GPUs |
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: 20120229 Termination date: 20150224 |
|
EXPY | Termination of patent right or utility model |