首页> 中国专利> 针对龙芯多核CPU模拟的动态代码转换的多线程化方法

针对龙芯多核CPU模拟的动态代码转换的多线程化方法

摘要

本发明为一种针对龙芯多核CPU模拟的动态代码转换的多线程化方法,包括:对需要模拟的龙芯多核CPU进行初始化;为各个待模拟的CPU核准备相应的动态代码转换环境;通过线程间通信完成各动态代码转换线程初始化;各个动态代码转换线程开始并行工作。该方法首先通过针对需要模拟的龙芯CPU核数进行探测,准备对应的多线程代码转换相应环境,再依靠多线程之间的通讯机制保证动态代码转换的并行执行,则避免模拟核在需要获得执行机会以及核间通讯过程中的不必要等待,提高对龙芯多核CPU的模拟效率。本发明的方法在计算机虚拟化技术领域内具有广泛地实用价值和应用前景。

著录项

  • 公开/公告号CN103049305A

    专利类型发明专利

  • 公开/公告日2013-04-17

    原文格式PDF

  • 申请/专利权人 北京航空航天大学;

    申请/专利号CN201210275667.3

  • 申请日2012-08-03

  • 分类号G06F9/455(20060101);G06F9/46(20060101);G06F9/54(20060101);

  • 代理机构11324 北京金恒联合知识产权代理事务所;

  • 代理人李强

  • 地址 100191 北京市海淀区学院路37号

  • 入库时间 2024-02-19 18:28:18

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-03-08

    授权

    授权

  • 2013-05-15

    实质审查的生效 IPC(主分类):G06F9/455 申请日:20120803

    实质审查的生效

  • 2013-04-17

    公开

    公开

说明书

技术领域

本发明涉及针对龙芯多核CPU模拟的动态代码转换的多线程化方法,具 体涉及一种多线程化的代码转换环境设计、多转换线程之间的通讯机制以及 基于以上方法的对龙芯多核CPU的多线程模拟方法,它能够通过在对龙芯多 核CPU模拟时多线程并行地进行代码转换从而对模拟效率进行优化,属于计 算机虚拟化技术领域。

背景技术

当前采用国产龙芯处理器的服务器中,大部分采用龙芯多核CPU,通常 在研发过程中需要对CPU硬件进行模拟,对CPU进行模拟是指通过软件方 法模拟出相应的硬件环境,提供给上层一个透明的运行环境,使上层感觉自 己就像直接运行在相应的CPU硬件上一样,通常对CPU硬件进行模拟可以 满足虚拟化、上层相应软件调试等需求,同时可以在模拟的CPU硬件上注入 故障以检查上层软件的健壮性。

现有的对龙芯多核CPU的模拟实现中并没有使多个模拟核进行并行的代 码转换,这降低了龙芯多核CPU的模拟效率,如图1所示,在当前龙芯多核 CPU的模拟实现中,由于每个模拟的CPU核按照轮询方式来获得执行机会, 同时在进行核间通讯的过程中,需要响应的模拟核因没有得到执行机会而不 能及时完成通讯过程,从而降低了对龙芯多核CPU的模拟效率。

如果能在模拟过程中,通过设计实现的多线程代码翻译环境,并且完成 多翻译线程之间的通讯机制,如图2所示,使在对多个核的模拟过程中实现 并行的动态代码翻译,则可以避免模拟核在需要获得执行机会以及核间通讯 过程中的不必要等待,提高对龙芯多核CPU的模拟效率,从而为虚拟化、上 层软件调试提供高效的支持。综上,本发明对提高针对龙芯多核CPU的模拟 效率有很重要的意义。

发明内容

本发明人认识到,如果能在模拟过程中,通过设计实现的多线程代码转 换环境,并且完成多转换线程之间的通讯机制,如图2所示,使在对多个核 的模拟过程中实现并行的动态代码转换,则可以避免模拟核在需要获得执行 机会以及核间通讯过程中的不必要等待,提高对龙芯多核CPU的模拟效率, 从而为虚拟化、上层软件调试提供高效的支持。综上,本发明对提高针对龙 芯多核CPU的模拟效率有很重要的意义。

本发明的一个目的,是提供一种针对龙芯多核CPU模拟的动态代码转换 的多线程化方法,它是针对龙芯多核CPU模拟的将动态代码转换过程多线程 化来实现并行的方法,它首先通过针对需要模拟的龙芯CPU核数进行探测, 准备对应的多线程代码转换相应环境,再依靠多线程之间的通讯机制保证动 态代码转换的并行执行,则避免模拟核在需要获得执行机会以及核间通讯过 程中的不必要等待,提高对龙芯多核CPU的模拟效率

根据本发明的一个方面,提供了一种针对龙芯多核CPU模拟的动态代码 转换的多线程化方法,其特征在于包括:

步骤A:对需要模拟的龙芯多核CPU进行初始化;

步骤B:为各个待模拟的CPU核准备相应的动态代码转换环境;

步骤C:通过线程间通信完成各动态代码转换线程初始化;

步骤D:使各个动态代码转换线程开始并行工作。

本发明的优点包括:

本发明是一种针对龙芯多核CPU模拟的多线程动态代码转换方法,它与 现有技术相比,其主要优点如下:(1)通过使对多核CPU模拟的过程通过多 线程技术,实现了动态代码并行化,提高了模拟过程中动态代码转换的效率; (2)通过在多线程代码转换的过程中,通过线程通讯模拟核间通讯过程,避 免不必要的等待,进一步提高动态代码转换的效率。

附图说明

图1是现有技术的龙芯多核CPU模拟动态代码转换时序图。

图2是根据本发明的一个实施例的龙芯多核CPU模拟动态代码转换时序 图。

图3是根据本发明的一个实施例的针对龙芯多核CPU模拟的多线程动态 代码转换方法总体流程图。

图4是根据本发明的一个实施例的针对龙芯多核CPU模拟的多线程动态 代码转换详细工作流程图。

具体实施方式

以下结合附图及具体实施例对本发明再作进一步详细的说明。

本发明的一个主要思想,是在对龙芯多核cpu的模拟过程中通过使每个 核的动态代码转换并行化,从而避免原本各个核轮询执行过程中以及在核间 通讯过程中不必要的等待,进而提高对龙芯多核CPU的模拟效率。

经过并行后的龙芯多核CPU动态代码转化时序图如图2所示,从图中我 们可以看出多个CPU核在整个代码翻译的过程中采用并行化执行,在同一时 刻多个CPU同时进行动态代码转换。

如图3所示,根据本发明的一个实施例的一种针对龙芯多核CPU模拟的 多线程动态代码转换方法包括以下步骤:

步骤101.对需要模拟的龙芯多核CPU进行初始化;

步骤102.为各个待模拟的CPU核准备相应的动态代码转换环境;

步骤103.通过线程间通信完成各动态代码转换线程初始化;

步骤104.各个动态代码转换线程开始并行工作。

其中,步骤101所述的对需要模拟的龙芯多核CPU进行初始化包括对需 要模拟的龙芯CPU进行特定的分析,确定每个CPU中要进行模拟的核数,同 时给对应的核进行特定标识,以便之后动态代码转换并行化,然后为其初始 化好相应的模拟寄存器、模拟内存等,并且在特定的寄存器中放好启动所需 的特定初始值,为启动CPU做好准备。

其中,步骤102包括为了保证多线程动态代码转换的并行执行,为每个 动态代码转换线程准备独立的代码转换资源,由于动态代码转换过程需要经 历将源代码变为中间代码,从而最终转换为目标代码两个过程,所以需要为 中间代码和目标代码分别准备配套的资源。

其中,步骤103包括:为了保证多个代码核能够在同时就绪的情况下同 时开始工作,设置特定的信号通讯机制和锁变量,在此基础上线程间通讯保 证多个动态代码转换线程的一致性。

其中,步骤104包括:在之前准备好的多线程代码转换线程环境和动态 代码转换进程初始化的基础上,对各个核中的需要模拟执行的指令进行并行 的动态代码转换,在转换过程中保持线程间的同步性,保证并行工作的正确 性,并且利用线程间通讯完成核间通讯的模拟。

本发明适用但不限于针对龙芯多核处理器的模拟效率优化。

更具体地,参见图2、图3及图4,根据本发明的一个实施例的一种针对 龙芯多核CPU模拟的多线程动态代码转换方法包括以下步骤:

步骤201:对需要模拟的龙芯多核CPU进行初始化

在对龙芯多核CPU进行模拟前,需要对龙芯多核CPU进行抽象,为保证 之后多个核能够在多线程环境下进行并行动态代码转换,每个核需要有自己 独立的数据结构,其中包括CPUState和CoreIPIState两方面,需要对核进行 唯一编号,从而形成CoreID,以便在动态代码转换的过程中使用数据自己的 转换资源;同时对于核内部的CPUState进行独立的初始化以备动态代码转换 过程中的映射,通过以上工作来保证每个核在运行过程中不影响其他核的动 态代码转换工作。

步骤202:为各个待模拟的CPU核准备相应的动态代码转换环境。

通过该步骤主要完成了对动态代码转换所需的相关资源的初始化,为每 个核准备特定的资源进行处理;根据如图4所示的本发明的实施例,步骤202 的具体实现过程可以包括:

步骤202-1:初始化各个核的动态代码转换上下文

在为每一个待模拟的CPU核准备动态代码转换环境的过程中,应当为其 准备代码转换上下文TCGContext,包括在代码转换过程中核所对应的序号, 转换过程中用到的中间变量和全局变量计数,目标代码保存数据及跳转指针, 在代码转换上下文TCGContext中较重要的数据结构如下:

int cpu_index;

uint8_t*code_buf;

uint8_t*code_ptr;

int nb_globals;

int nb_temps;

unsigned long*tb_next;

步骤202-2:初始化各个核转换目的代码的执行前后序列

在将代码块转换成目的代码,目的代码的执行过程中,先执行一段公共 的前序代码,然后跳转到代码转换上下文中的目的代码保存数据结构上,从 而开始执行目的代码,实现代码转换,最终执行共有的后序代码。所以需要 准备好每个核的前后续代码,其初始化方法为tcg_prologue_init_multi, 完成前序代码、跳转到目的代码及后序代码的连接。

步骤202-3:初始化各个核转换的中间代码操作码及操作数缓存

在代码转换过程中首先将源代码块逐条转换为多条中间代码序列,由方 法gen_intermediate_code_internal_multi完成,在生成的中间代码需要按 照操作码及操作数分开准备,他们分别为gen_opc_buf_multi和 gen_opparam_ptr_multi。

步骤202-4:初始化各个核的动态转换加速资源

用相应的资源来加速代码转换的hash表结构,通过缓存特定的二进制代 码块,利用程序的局部性来加速代码转换过程,这样的转换资源也应该针对 每个核特定设计,设计的数据结构为tb_phys_hash_multi。

步骤203:通过线程间通信完成动态代码转换多线程初始化

该步骤主要在利用步骤202的准备好的多个转换资源,通过线程间通信, 完成整个CPU模拟中动态代码转换并行化的基本运行条件。

系统起初有一个主线程运行,当完成CPU核的初始化时,主线程会为每 个CPU核创建一个线程。主线程创建每个CPU线程后要保留每个线程的线程 号用于后续的通信,该线程需要CPU线程初始化后才能开始后续工作,所以 主线程创建CPU线程后会被挂起,等待创建的CPU线程准备就绪并返回线程 号后再被唤醒继续运行,使用CPU信号cpu_cond和每个CPU核的全局锁 global_mutex_multi来同步主线程和CPU代码转换线程。

CPU代码线程被创建后并不能立刻开始执行代码转换,因为系统还未完 全初始化。此处,我们设计一个系统就绪标识system_ready表示系统是否初 始化完毕,并结合系统就绪信号量system_cond以及前面提到的CPU核全局 锁来进行线程间通信。CPU代码转换线程进行相应初始化后会被挂起,等待 系统就绪信号量system_cond并不断检测系统就绪标识system_ready的状 态。主线程完成后续的初始化工作后设置系统就绪标识system_ready为完成 并广播系统就绪信号量system_cond,此时之前准备就绪的CPU代码转换线 程会被唤醒并开始执行代码转换,之前的初始化主现成变为整个动态代码转 换中的IO线程及控制进程,总体管理在动态代码转换并行化过程中的同步 性。

步骤204:各个动态代码转换线程开始并行工作

在之前准备好的多线程代码转换线程环境和动态代码转换进程初始化的 基础上,对各个核中的需要模拟执行的指令进行并行的动态代码转换,通过 线程间通讯IPI信号完成核间通讯的模拟,同时将数据反映到CPU核的 CoreIPIState结构中,利用信号来完成核间中断处理,代码转换利用前面的 环境进行正确的并行动态代码转换。

本发明可以有效地避免原本对龙芯多核CPU模拟中各个核轮询执行以及 在核间通讯模拟过程的不必要等待,充分提高对龙芯多核CPU的模拟效率, 从而为虚拟化、上层软件调试提供高效的支持。

以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施 例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对 本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或 局部替换,其均应涵盖在本发明的权利要求范围当中。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号