CN103049305B - 针对龙芯多核cpu模拟的动态代码转换的多线程化方法 - Google Patents
针对龙芯多核cpu模拟的动态代码转换的多线程化方法 Download PDFInfo
- Publication number
- CN103049305B CN103049305B CN201210275667.3A CN201210275667A CN103049305B CN 103049305 B CN103049305 B CN 103049305B CN 201210275667 A CN201210275667 A CN 201210275667A CN 103049305 B CN103049305 B CN 103049305B
- Authority
- CN
- China
- Prior art keywords
- cpu
- core
- thread
- simulation
- dynamic code
- 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
Landscapes
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明为一种针对龙芯多核CPU模拟的动态代码转换的多线程化方法,包括:对需要模拟的龙芯多核CPU进行初始化;为各个待模拟的CPU核准备相应的动态代码转换环境;通过线程间通信完成各动态代码转换线程初始化;各个动态代码转换线程开始并行工作。该方法首先通过针对需要模拟的龙芯CPU核数进行探测,准备对应的多线程代码转换相应环境,再依靠多线程之间的通讯机制保证动态代码转换的并行执行,则避免模拟核在需要获得执行机会以及核间通讯过程中的不必要等待,提高对龙芯多核CPU的模拟效率。本发明的方法在计算机虚拟化技术领域内具有广泛地实用价值和应用前景。
Description
技术领域
本发明涉及针对龙芯多核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的模拟效率,从而为虚拟化、上层软件调试提供高效的支持。
以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
Claims (5)
1.一种针对龙芯多核CPU模拟的动态代码转换的多线程化方法,其特征在于包括:
步骤A:对需要模拟的龙芯多核CPU进行初始化;
步骤B:为各个待模拟的CPU核准备相应的动态代码转换环境;
步骤C:通过线程间通信完成各动态代码转换线程初始化;
步骤D:使各个动态代码转换线程开始并行工作,
其中所述步骤B包括:
初始化各个核的动态代码转换上下文(步骤202-1);
初始化各个核转换的目的代码的执行前后序列(步骤202-2);
初始化各个核转换的中间代码操作码及操作数缓存(步骤202-3);
初始化各个核的动态转换加速资源(步骤202-4),
所述步骤C包括:
设置多个代码转换线程相互之间及与IO线程之间的信号通讯机制和锁变量,从而保证多个CPU核能够在同时就绪的情况下同时开始工作,从而使线程间通信能够保证多个动态代码转换线程的一致性,
利用系统的初始主线程,为每个CPU核创建一个子线程,其中所述主线程在创建每个所述子线程后保留每个子线程的线程号用于后续的通信,主线程需要CPU线程初始化后才能开始后续工作,
在主线程创建所述子线程后,挂起所述主线程,
随后主线程等待创建的子线程准备就绪并返回线程号后再被唤醒继续运行,
使用CPU信号cpu_cond和每个CPU核的全局锁global_mutex_multi来同步所述主线程和子线程。
2.根据权利要求1所述的针对龙芯多核CPU模拟的动态代码转换的多线程化方法,其特征在于所述步骤A包括:
对需要模拟的龙芯多核CPU进行特定的分析,
确定每个CPU中要进行模拟的核数,同时给对应的核进行特定标识,以便之后动态代码转换并行化,
然后为待进行模拟的CPU初始化好相应的模拟寄存器、模拟内存,并且
在寄存器中放好启动所需的特定初始值,为启动CPU做好准备。
3.根据权利要求1所述的针对龙芯多核CPU模拟的动态代码转换的多线程化方法,其特征在于
动态代码转换过程包括:
将源代码变为中间代码,
将中间代码转换为目的代码,
且,所述步骤B包括为所述中间代码和目的代码分别准备配套的资源。
4.根据权利要求1所述的针对龙芯多核CPU模拟的动态代码转换的多线程化方法,其特征在于所述步骤D包括
在已准备好的动态代码转换环境和动态代码转换线程初始化的基础上,对各个核中的需要模拟执行的指令进行并行的动态代码转换,
在转换过程中保持线程间的同步性,从而保证并行工作的正确性,以及
利用线程间通信完成核间通讯的模拟。
5.根据权利要求1所述的针对龙芯多核CPU模拟的动态代码转换的多线程化方法,其特征在于
设置一个系统就绪标识system_ready来表示系统是否初始化完毕,
结合一个系统就绪信号量system_cond以及所述CPU核全局锁来进行线程间通信,
在子线程进行相应初始化后,挂起子线程,
等待系统就绪信号量system_cond并不断检测系统就绪标识system_ready的状态,
在主线程完成后续的初始化工作后,把系统就绪标识system_ready设置为“完成”并广播系统就绪信号量system_cond,从而使之前准备就绪的子线程被唤醒并开始执行代码转换,使之前的初始主线程变为整个动态代码转换中的IO线程及控制进程,总体管理在动态代码转换并行化过程中的同步性。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210275667.3A CN103049305B (zh) | 2012-08-03 | 2012-08-03 | 针对龙芯多核cpu模拟的动态代码转换的多线程化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210275667.3A CN103049305B (zh) | 2012-08-03 | 2012-08-03 | 针对龙芯多核cpu模拟的动态代码转换的多线程化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103049305A CN103049305A (zh) | 2013-04-17 |
CN103049305B true CN103049305B (zh) | 2017-03-08 |
Family
ID=48061956
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210275667.3A Active CN103049305B (zh) | 2012-08-03 | 2012-08-03 | 针对龙芯多核cpu模拟的动态代码转换的多线程化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103049305B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063329B (zh) * | 2014-06-30 | 2017-04-12 | 龙芯中科技术有限公司 | 64位立即数处理方法及装置 |
CN108874446B (zh) * | 2018-04-12 | 2020-10-16 | 武汉斗鱼网络科技有限公司 | 多线程访问方法及装置 |
CN112463716B (zh) * | 2020-11-27 | 2024-02-13 | 中船重工(武汉)凌久电子有限责任公司 | 基于多核多处理器并行系统的全局信号量实现方法 |
CN113360280B (zh) * | 2021-06-02 | 2023-11-28 | 西安中锐创联科技有限公司 | 基于多线程运行、动态全局变量处理的仿真曲线显示方法 |
CN114866499B (zh) * | 2022-04-27 | 2024-02-23 | 曙光信息产业(北京)有限公司 | 片上多核系统的同步广播通信方法、装置和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101477472A (zh) * | 2009-01-08 | 2009-07-08 | 上海交通大学 | 动态二进制翻译器中热路径的多核多线程构建方法 |
CN103092682A (zh) * | 2011-10-28 | 2013-05-08 | 浙江大华技术股份有限公司 | 异步网络应用程序处理方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4754004B2 (ja) * | 2009-03-05 | 2011-08-24 | インターナショナル・ビジネス・マシーンズ・コーポレーション | マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム |
-
2012
- 2012-08-03 CN CN201210275667.3A patent/CN103049305B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101477472A (zh) * | 2009-01-08 | 2009-07-08 | 上海交通大学 | 动态二进制翻译器中热路径的多核多线程构建方法 |
CN103092682A (zh) * | 2011-10-28 | 2013-05-08 | 浙江大华技术股份有限公司 | 异步网络应用程序处理方法 |
Non-Patent Citations (1)
Title |
---|
龙芯多核平台上性能分析工具的设计与实现;徐恒阳;《中国优秀硕士学位论文全文数据库信息科技辑》;20110915;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN103049305A (zh) | 2013-04-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103049305B (zh) | 针对龙芯多核cpu模拟的动态代码转换的多线程化方法 | |
US20220365783A1 (en) | Matrix multiplication and accumulation operations on compressed matrices | |
CN111008042B (zh) | 基于异构流水线的高效通用处理器执行方法及系统 | |
WO2023183874A1 (en) | Application programming interface to perform operation with reusable thread | |
US20230305845A1 (en) | Techniques to selectively store data | |
US20230244942A1 (en) | Tensor modification based on processing resources | |
US20230140934A1 (en) | Thread specialization for collaborative data transfer and computation | |
CN116436874A (zh) | 使用备用指示集的网络组播 | |
CN116225676A (zh) | 用于限制存储器的应用程序编程接口 | |
JP2024513617A (ja) | コードを同時に起動すること | |
Luo et al. | An Efficient Task Partitioning and Scheduling Method for Symmetric Multiple GPU Architecture | |
US20240143402A1 (en) | Application programming interface to indicate operations | |
US20240036916A1 (en) | Application programming interface to indicate parallel scheduling maximum | |
US20230367964A1 (en) | Parallel processing of hierarchical text | |
US20240168762A1 (en) | Application programming interface to wait on matrix multiply-accumulate | |
US20230185641A1 (en) | Application programming interface to store portions of an image | |
US20240095133A1 (en) | Frequency adjustment for processors | |
US20180136955A1 (en) | Simulation apparatus, simulation method, and computer readable medium | |
Wang et al. | LabVIEW's code style and optimization | |
CN118119924A (zh) | 用于利用可重用线程执行操作的应用程序编程接口 | |
WO2023064814A1 (en) | Code generation based on processor usage | |
Lee et al. | A Virtual Simulation Environment for a Design and Verification of a GPGPU | |
JP2023007422A (ja) | 同期バリア | |
CN117480495A (zh) | 可配置的处理器分区 | |
CN118043786A (zh) | 多传递性能剖析 |
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 |