一种轻量级裸片代码的创建及并行运行方法

文档序号:9921882阅读:476来源:国知局
一种轻量级裸片代码的创建及并行运行方法
【技术领域】
[0001]本发明涉及计算机程序领域,尤其是一种轻量级裸片代码的创建及并行运行方法。
【背景技术】
[0002]当今多核处理器已经普及,在硬件发展迅猛的时代,CPU通过增加核数,而非仅增加频率来提高其运算效率,这对程序的并行运行度提出了更高的要求。传统的轻量级裸片代码的并行运行方法通过函数形式的多线程来实现,但多线程的编程过程较为繁琐,程序员在程序编写时,必须将轻量级裸片代码的并行部分封闭到独立函数,且还要进行繁琐的参数传递、任务分配、线程创建、调用和同步等过程,程序编写的成本高且并行程序的运行效率低。
[0003]如何做到既提高并行程序的运行效率,又降低多线程程序的编写成本是并行程序设计领域的重要课题,该课题对于那些需要实时、高效运行程序的环境尤为重要。

【发明内容】

[0004]为解决上述技术问题,本发明的目的在于:提供一种程序编写的成本低且并行程序的运行效率高的,轻量级裸片代码的创建及并行运行方法。
[0005]本发明解决其技术问题所采取的技术方案是:
一种轻量级裸片代码的创建及并行运行方法,包括:
51、父线程执行至需并行运行的代码处,获取用户要求并发的线程数以及用户是否需要线程同步的信息,并对公用计数器进行初始化;
52、计算并行运行代码块的起始位置和结束位置;
53、获取所需的环境彳目息;
54、根据用户要求并发的线程数和用户是否需要线程同步的信息创建子线程;
55、子线程获取由父线程传入的所需的环境信息,然后配置子线程的环境;
56、根据用户是否需要线程同步的信息,决定由子线程采用公用计数器单独执行并行运行的代码或者由子线程和父线程采用公用计数器共同执行并行运行的代码。
[0006]其中,子线程采用公用计数器单独执行并行运行的代码时,各个子线程都需执行完一次并行运行代码块的代码,此时,并行运行代码块将需要重复执行多次的代码分配给各个子线程来并行执行。
[0007]子线程和父线程采用公用计数器共同执行并行运行的代码,父线程和各个子线程都需执行完一次并行运行代码块的代码,此时,并行运行代码块将需要重复执行多次的代码分配给父线程和各个子线程来并行执行。
[0008]进一步,所述所需的环境信息包括但不限于父线程当前函数的所有变量、并行运行代码块的起始位置和结束位置。
[0009]进一步,所述步骤SI,其包括: 511、父线程按照单线程的方式执行到需要并行运行的代码处;
512、获取用户要求并发的线程数以及用户是否需要线程同步的信息,并对公用计数器进行初始化;
进一步,在所述步骤S12,其包括:
父线程获取用户要求并发的线程数以及用户是否需要线程同步的信息;
父线程设定公用计数器的类型、变量名和初始值,并修改公用计数器所采用的函数; 父线程设定线程任务继续执行的条件;
父线程设定线程执行并行运行代码块的代码前需执行的额外代码;
父线程设定所需的参数或用逗号分隔的参数组。
[00?0]进一步,所述步骤S4,其具体为:
若用户需要线程同步,则创建n-1个子线程;反之,则创建η个子线程,其中,η为用户要求并发的线程数。
[0011]进一步,所述步骤S5,其包括:
551、子线程获取由父线程传入的所需的环境信息;
552、子线程根据获得的环境信息配置本子线程的变量信息,以使本子线程获得父线程的变量快照;
553、子线程跳转至并行运行代码块的起始位置。
[0012]进一步,所述步骤S6,其具体为:
若用户需要线程同步,则父线程与创建的n-1个子线程等价,父线程执行完一次并行运行代码块的代码至并行运行代码块的结束位置后,等待η-1个子线程分别采用公用计数器执行完一次并行运行代码块的代码;反之,则父线程与创建的η个子线程异步,父线程直接跳转至并行运行代码块的结束位置,等待η个子线程分别采用公用计数器执行完一次并行运行代码块的代码。
[0013]进一步,所述η-1个子线程分别采用公用计数器执行完一次并行运行代码块的代码或η个子线程分别采用公用计数器执行完一次并行运行代码块的代码这一步骤,其包括:
561、以n-1个子线程或η个子线程中的任一子线程作为当前子线程,判断公用计数器是否被其他子线程或父线程锁定,若是,则当前子线程进入阻塞等待状态,直至公用计数器被解锁后执行步骤S62,反之,则当前子线程直接执行步骤S62;
562、当前子线程锁定公用计数器;
563、判断公用计数器是否符合设定的退出规则,若是,则当前子线程解锁公用计数器并跳转至并行运行代码块的结束位置,反之,则当前子线程执行步骤S64;
564、当前子线程获得公用计数器的副本,并以获得的副本的值作为当前子线程本轮的计数器值;
565、当前子线程采用计数器修改函数修改公用计数器,然后解除公用计数器的锁定;
566、当前子线程以当前子线程本轮的计数器值作为计数器的值,执行完一次并行运行代码块的代码,然后以下一个子线程作为当前子线程返回步骤S61。
[0014]进一步,在所述步骤S5之后还设有步骤S6,所述步骤S6,其具体为:父线程执行并行运行代码块后的其它代码,并在执行完毕后释放所占的资源。
[0015]进一步,当用户需要线程同步时,所述父线程与子线程的堆内存空间是共享的而栈空间是独立的。
[0016]本发明的有益效果是:根据用户是否需要线程同步的信息,决定由子线程采用公用计数器单独执行并行运行的代码或者由子线程和父线程采用公用计数器共同执行并行运行的代码,采用了非函数形式的多线程并行运行方法,在不需为集成开发环境安装任何辅助插件的前提下,令编程人员可以并行化执行运行代码块的代码片段,不再需要传统的将代码封装至函数的繁琐执行方式,有效地提高了多线程程序的编写效率和成本;采用公用计数器来控制多线程并行运行的执行流程,可以把并行运行代码块中一个循环的不同执行遍数均衡分派到多个线程中执行,提高了并行程序的运行效率。进一步,父线程与子线程的堆内存空间是共享的而栈空间是独立的,对每个并行的线程来说,堆是共享的而栈是独立的,既保证了数据的共享性,又维护了线程的独立性。
【附图说明】
[0017]图1为本发明一种轻量级裸片代码的创建及并行运行方法的整体流程图;
图2为本发明实施例一中父线程与子线程的步骤流程图;
图3为本发明实施例一内存空间的结构图;
图4为本发明实施例一正在运行的线程示意图;
图5为本发明实施例一多条相似线程的示意图;
图6为本发明实施例一同步单级发射的运行过程示意图;
图7为本发明实施例一异步单级发射的运行过程示意图;
图8为本发明实施例一同步多级发射的运行过程示意图;
图9为本发明实施例一异步多级发射的运行过程示意图;
图10为本发明实施例二的单线程与4线程耗时对比图;
图11是本发明实施例二的相对加速对比图。
【具体实施方式】
[0018]参照图1,一种轻量级裸片代码的创建及并行运行方法,包括:
51、父线程执行至需并行运行的代码处,获取用户要求并发的线程数以及用户是否需要线程同步的信息,并对公用计数器进行初始化;
52、计算并行运行代码块的起始位置和结束位置;
53、获取所需的环境彳目息;
54、根据用户要求并发的线程数和用户是否需要线程同步的信息创建子线程;
55、子线程获取由父线程传入的所需
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1