CN117640471B - 面向多核处理器的核间通信带宽测量方法、系统及设备 - Google Patents

面向多核处理器的核间通信带宽测量方法、系统及设备 Download PDF

Info

Publication number
CN117640471B
CN117640471B CN202410113049.1A CN202410113049A CN117640471B CN 117640471 B CN117640471 B CN 117640471B CN 202410113049 A CN202410113049 A CN 202410113049A CN 117640471 B CN117640471 B CN 117640471B
Authority
CN
China
Prior art keywords
thread
core
space
cache
data
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
Application number
CN202410113049.1A
Other languages
English (en)
Other versions
CN117640471A (zh
Inventor
方建滨
高琬蓉
唐滔
黄春
张鹏
彭林
崔英博
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN202410113049.1A priority Critical patent/CN117640471B/zh
Publication of CN117640471A publication Critical patent/CN117640471A/zh
Application granted granted Critical
Publication of CN117640471B publication Critical patent/CN117640471B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本申请涉及一种面向多核处理器的核间通信带宽测量方法、系统及设备。所述方法包括:获取基准测试参数,并赋值全局数据结构体。基准测试参数包括:测试线程数量、测量数据集空间以及待测通信计算核心。通过系统文件获取缓存大小,根据缓存大小、测试线程数量以及全局数据结构体创建线程数组,线程数组中每一个子线程将测量数据集空间与每一级高速缓存空间由高至低进行逐级比对,得到比对结果,根据比对结果对测量数据集空间进行数据驱逐,得到第一内存空间。根据第一内存空间获取主线程对应的核心与线程数组中每一个子线程对应的待测通信计算核心之间的通信带宽测量结果。采用本方法能够精准测量多核处理器的核间通信带宽数据。

Description

面向多核处理器的核间通信带宽测量方法、系统及设备
技术领域
本申请涉及多核处理器核间通信带宽测量技术领域,特别是涉及一种面向多核处理器的核间通信带宽测量方法、系统及设备。
背景技术
处理器芯片厂商在过去主要通过不断地提高主频来提升处理器的性能。这种传统的处理器体系结构技术路线已经面临着严重的发展瓶颈。近年来,处理器厂商通过在单个芯片上集成多个计算核心来提高处理器性能,即片上多核处理器。与单核心处理器相比,多核处理器的内存访问请求数量随着并行执行线程数量的增加而增加,从而对内存系统的访问带来了前所未有的压力。为此,多核处理器的存储层次结构设计通过引入多级片上高速缓存将经常访问的数据“锁定”在其中,尽可能减少处理器核心对片外主存的访问,旨在有效地提升并行程序性能。
然而,现代多核处理器缓存系统的层次数量、每层缓存容量的大小、包容性与否等特征因处理器架构而异。而且现代多核处理器的缓存系统常以“黑盒”的形式工作,很多厂商关于缓存系统的实现细节往往不对外公布;即使公布的少量数据也仅仅是理论数据,对分析并行程序的实际性能不具有参考意义。这给程序员在多核处理器上分析、建模及优化程序性能带来了巨大的挑战。
掌握不同处理器计算核心间的访问带宽对优化并行程序性能至关重要,例如对于共享内存的并发访问、生产者-消费者问题、核心之间的线程迁移以及高速缓存数据的后续重用等。因此,需要一种测量计算核心间通信带宽的方法及系统,获得不同计算核心间的通信带宽,提高多核处理器之间的程序性能。
发明内容
基于此,有必要针对上述技术问题,提供一种能够为多核处理器的多级缓存系统提供一种准确的测量核间通信带宽的面向多核处理器的核间通信带宽测量方法、系统及设备。
一种面向多核处理器的核间通信带宽测量方法,应用于多核处理器系统,所述方法包括:
获取基准测试参数,并赋值全局数据结构体。基准测试参数包括:测试线程数量、测量数据集空间以及待测通信计算核心。
通过系统文件获取缓存大小,根据缓存大小、测试线程数量以及全局数据结构体创建线程数组,线程数组中每一个子线程将测量数据集空间与每一级高速缓存空间由高至低进行逐级比对,得到比对结果,根据比对结果对测量数据集空间进行数据驱逐,得到第一内存空间。
根据第一内存空间获取主线程对应的核心与线程数组中每一个子线程对应的待测通信计算核心之间的通信带宽测量结果。
在其中一个实施例中,还包括:基准测试程序通过theinfo函数解析基准测试参数文件获取基准测试参数,并从哈希表中获取相关值赋值全局数据结构体。
在其中一个实施例中,还包括:通过系统文件获取缓存大小,根据缓存大小分配临时内存空间,并根据测试线程数量与全局数据结构体创建线程数组。
在其中一个实施例中,还包括:线程数组中每一个子线程将测量数据集空间中由高级到低级的高速缓存逐一与每一级高速缓存空间进行降序比对,若测量数据集空间大于当前级别的高速缓存空间,则将当前子线程的测量数据驱逐至下一级高速缓存中。否则,测量数据集空间与上一级高速缓存空间进行比对,直至测量数据集空间的全部测量数据仅存储至一级高速缓存空间或主存空间,得到第一内存空间。
在其中一个实施例中,还包括:多核处理器根据基准测试参数修改第一内存空间中每一个子线程对应的核心中数据的初始化数据状态,得到测量数据集空间中数据的一致性状态。
在其中一个实施例中,还包括:根据所述第一内存空间获取主线程读取每一个子线程对应核心中大小为所述测量数据集空间的第二内存,在所述第二内存中,主线程通过PMCCNTR_EL0获取多核处理器的核间数据传输的耗时,根据所述耗时与所述多核处理器的主频对所述主线程与每一个所述子线程之间的通信带宽进行迭代运算,得到主线程对应的核心与所述线程数组中每一个子线程对应的所述待测通信计算核心之间的带宽测量结果集合,取所述带宽测量结果集合的最大值为信带宽测量结果。
在其中一个实施例中,还包括:多核处理器根据所述基准测试参数对每一个子线程使用str汇编指令控制除当前子线程对应的计算核心之外的其余计算核心中的数据失效,得到当前子线程对应的计算核心的第一有效数据。通过dc civac汇编指令初始化第一有效数据的状态为失效状态,根据系统预设的参数通过读写指令修改第一内存空间中数据的失效状态,得到测量数据集空间中数据的一致性状态。
一种面向多核处理器的核间通信带宽测量系统,面向多核处理器的核间通信带宽测量系统装载在多核处理器上,通过基准测试程序测量多核处理器的核间通信带宽数据,将所述核间通信带宽数据以及测试过程发送至可视化模块,测量多核处理器的多级缓存系统的核间通信带宽数据,所述系统包括:
基准参数获取模块,用于获取基准测试参数,并赋值全局数据结构体。基准测试参数包括:测试线程数量、测量数据集空间以及待测通信计算核心。
第一内存空间分配模块,用于通过系统文件获取缓存大小,根据缓存大小、测试线程数量以及全局数据结构体创建线程数组,线程数组中每一个子线程将测量数据集空间与每一级高速缓存空间由高到低进行逐级比对,得到比对结果,根据比对结果对测量数据集空间进行数据驱逐,得到第一内存空间。
测量模块,用于根据第一内存空间获取主线程对应的核心与线程数组中每一个子线程对应的待测通信计算核心之间的通信带宽测量结果。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取基准测试参数,并赋值全局数据结构体。基准测试参数包括:测试线程数量、测量数据集空间以及待测通信计算核心。
通过系统文件获取缓存大小,根据缓存大小、测试线程数量以及全局数据结构体创建线程数组,线程数组中每一个子线程将测量数据集空间与每一级高速缓存空间由高至低进行逐级比对,得到比对结果,根据比对结果对测量数据集空间进行数据驱逐,得到第一内存空间。
根据第一内存空间获取主线程对应的核心与线程数组中每一个子线程对应的待测通信计算核心之间的通信带宽测量结果。
上述面向多核处理器的核间通信带宽测量方法、系统及设备,通过读取系统文件获取处理器的缓存大小信息,这些信息包括各级缓存的容量大小和层次结构等,可以用来确定缓存系统的层次数量和每层缓存的容量大小,从而为后续的线程创建和内存空间分配提供参考。然后根据获取的缓存大小、测试线程数量以及全局数据结构体中的参数,创建一个线程数组。每个线程代表一个并发执行的计算核心,进而,将每个线程绑定到待测通信计算核心上,以确保测试的准确性和一致性。主线程是负责访问数据和测量访问时间的线程,线程的控制通过线程间共享数组实现。通过迭代测试,主线程访问每个子线程对应的处理器计算核心,获取计算核心之间的通信带宽的结果,将这些结果存储在第一内存空间中。将测试数据集空间与各级高速缓存空间比对,根据对比结果进行数据驱逐,通过确定被访问数据的缓存层次,在多核处理器复杂的通信模式下,可以精准获取细粒度通信带宽,以此为基础,提高程序并行效能以及内存并发访问速率。
附图说明
图1为一个实施例中面向多核处理器的核间通信带宽测量方法的流程示意图;
图2为另一个实施例中面向多核处理器的核间通信带宽测量步骤的流程示意图;
图3为一个实施例中在FT-2000+平台上以测试目标为核心0的本地带宽以及核心0与核心1和核心4之间的通信带宽的结果示意图;
图4为一个实施例中面向多核处理器的核间通信带宽测量系统的结构框图;
图5为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种面向多核处理器的核间通信带宽测量方法,以该方法应用于ARMv8的多核处理器上为例进行说明,包括以下步骤:
步骤102,获取基准测试参数,并赋值全局数据结构体。
基准测试参数包括:测试线程数量、测量数据集空间、测量数据集的选取频次、数据初始一致性状态、待测通信计算核心以及预先设定的数据基本结构,其中,数据基本结构包括:环境参数结构体element、基准测试参数结构体bi_info、cpu参数结构体cpu_info_t、全局数据结构体mydata_t和线程数据结构体threaddata_t。
element是存放环境参数信息的结构体,该结构体包括5个域:(1)参数名key,(2)参数名长度keyLength,(3)参数值value,(4)参数值长度valueLength,(5)指向下一个element的指针。
bi_info是存储基准测试相关信息的结构体,该结构体主要包括3个域以及其他一些测试相关信息:(1) 测试所用线程数num_threads_per_process,(2)测试数据集个数num_measurements,(3) 实际测试的结果数numfunctions。
cpu_info_t是存储cpu参数信息的结构体,主要包括14个域以及其他一些测试会用到的cpu参数:(1)cpu核数num_cores,(2)每个package中的cpu核数num_cores_per_package,(3)package数num_packages,(4)numa节点数num_numa_nodes,(5)每个核里的线程数num_threads_per_core,(6)每个package中的线程数num_threads_per_package,(7)高速缓存级别数量Cachelevels,(8)判断每个高速缓存级别是否为混合类型的数组Cache_unified[MAX_CACHELEVELS],(9)记录每个高速缓存级别中缓存行大小的数组Cacheline_size[MAX_CACHELEVELS],(10)记录每个指令高速缓存大小的数组I_Cache_Size[MAX_CACHELEVELS],(11)记录每个数据高速缓存大小的数组D_Cache_Size[MAX_CACHELEVELS],(12)记录每个混合高速缓存大小的数组U_Cache_Size [MAX_CACHELEVELS],(13)数据高速缓存总大小Total_D_Cache_Size,(14)页面大小num_pagesizes。
mydata_t是存储测试过程中需要的所有全局数据结构的结构体,主要包括15个域:(1)指向被访问内存地址的指针buffer ,(2)指向缓存刷新例程中的会使用的虚拟数据地址的指针cache_flush_area,(3)结构体数组threaddata,(4)指向结构体cpu_info_t的指针cpuinfo,(5)共享cpu列表里的第一个cpu序号FRST_SHARE_CPU,(6)共享cpu数量NUM_SHARED_CPUS,(7)循环开销loop_overhead,(8)线程数num_threads,(9)结果数num_results,(10)测试指令类型function,(11)迭代次数runs,(12)指定的缓存一致性状态USE_MODE,(13)线程状态数组thread_comm,(14)判断线程是否应答新状态的标志ack,(15)判断线程是否完成当前状态的标志done。
threaddata_t是存储每个线程所需数据结构的结构体,主要包括9个域:(1)指向被访问内存地址的指针buffer ,(2)指向缓存刷新例程中的会使用的虚拟数据地址的指针cache_flush_area,(3)指向结构体mydata_t的指针,(4)指向结构体cpu_info_t的指针cpuinfo,(5)缓存池大小buffersize,(6)测试数据集大小memsize,(7)线程号thread_id,(8)绑定该线程的对应cpu序号cpu_id,(9)指定的缓存一致性状态USE_MODE。
具体的,S11建立一个空哈希表来存储测试需要的环境参数。
S111、按照参数数量申请一个结构体数组table,每个数据元素为一个element结构体,数组大小为参数数量乘于结构体大小。
S112、依次遍历数组,将每个element赋为空。
S12、使用bi_put函数将所有的参数键值对填入哈希表中,如果哈希表中之前存在这个参数名对应的element,则覆盖其值,如果没有则新插入一个element。
S13、创建theinfo,其数据结构为bi_info结构体(存储基准测试相关信息的结构体),用于存储基准测试相关信息。
S14、给theinfo分配内存空间,解析参数文件PARAMETER(参数),获得基准测试各项参数,如测试所用线程数、测量数据集大小的上界和下界以及选取频次、待测的通信计算核心、数据初始一致性状态等。
S141、给全局变量mdp分配内存空间并将其元素内容全部设置为0,mdp是一个用于存储所有全局数据结构的mydata_t结构体。
S142、从哈希表table中读取相关值给各个全局数据赋值。其方法为,如果在table中能够查询到该参数名,则读取对应参数值转化为整数型或长整数型等赋给全局变量;如果哈希表中没有,则报错。
S143、初始化数组problemarray1,数组大小为测试数据集的总数,每一项为根据测试数据集大小的上界和下界以及选取频次计算出的每次用于测试的测试数据集大小。
S15、用S142获得的相关全局数据初始化theinfo,即将theinfo的域num_threads_per_process和maxproblemsize分别设置为参数文件PARAMETER预先设置好的测试所用线程数和数据集大小的上界,将theinfo的域numfunctions设置为测试的结果数,实际上就是测试所用线程数。
S16、给全局变量cpuinfo分配内存空间并将其元素内容全部设置为0,cpuinfo为一个存储处理器相关参数的cpu_info_t结构体。根据系统文件初始化cpuinfo的各个域。
步骤104,通过系统文件获取缓存大小,根据缓存大小、测试线程数量以及全局数据结构体创建线程数组,线程数组中每一个子线程将测量数据集空间与每一级高速缓存空间由高至低进行逐级比对,得到比对结果,根据比对结果对测量数据集空间进行数据驱逐,得到第一内存空间。
全局数据结构体变量为mdp。
具体的,S21、将主线程与对应计算核心绑定。
S22、定义实验需要访问的内存块大小BUFFERSIZE,在最大数据集大小的基础上加上内存对齐可能需要的大小。
S23、将mdp的cpuinfo域设置为全局变量cpuinfo,并用S142获得的相关全局数据初始化mdp的一部分域。
S24、根据系统文件获取的缓存级别和缓存大小定义CACHEFLUSHSIZE,并根据大小为刷新缓存池分配内存空间
S25、根据测试线程数量创建线程数组threaddata,将线程数组的域设置为mdp的域,其中每一个数组项threaddata[t]的数据结构为threaddata_t结构体,存储每个线程的测试所需数据。
S26、根据测试所用线程数创建线程,对每个线程t:
S261、将其绑定到指定的cpu核心上。
S262、将threaddata[t].cpuinfo赋值为mdp.cpuinfo,从而实现硬件参数在多线程中的同步。
S263、将threaddata[t].data赋值为全局变量mdp,实现线程间交流。
S264、将mdp中thread_comm(线程状态数组)域对应的第t个数组元素,即thread_comm[t]设置为THREAD_INIT。
S265、根据mdp中的对应域值初始化每个线程的threaddata[t]结构中的同名域值。
S266、调用pthread_create函数以threaddata[t]为参数运行thread函数创建每个线程。
S267、将除主线程以外的各个线程对应的thread_comm[t]设置为为THREAD_WAIT,使除主线程以外的各个线程持续执行while循坏,直到状态再次发生改变。
S27、为主线程分配内存空间,将分配的内存空间的首地址存入mdp的buffer指针域。
S28、初始化内存空间,连续访问内存空间,给地址赋值,而后使用汇编指令dccivac清理和作废因为赋值操作产生的缓存行。
步骤106,根据第一内存空间获取主线程对应的核心与线程数组中每一个子线程对应的待测通信计算核心之间的通信带宽测量结果。
具体的,S31、根据测试的结果数,即theinfo.numfunctions和每个线程测试时访问的数据集个数num_measurements给allresults数组分配内存空间,用于存放所有测试结果。
S32、根据测试的结果数,即theinfo.numfunctions给tempresults数组分配内存空间,用于存放每个测试数据集对应的各个线程的通信带宽结果。
S33、根据测试数据集个数num_measurements分别为待测试数组todolist和已测试数组donelist分配内存空间,并将其元素初始化为0,通过待测试数组获取待测试数据集空间memsize,通过已测试数组标记已测试数据集。除去第0项,todolist的每一项为下一个测试用数据集大小在problemarray1中的序号。donelist的每一项标记todolist中对应项是否已测试过,如果测试过则标记为1,没测试过则为0,其中第0项标记是否所有数据集都被测试过,是则置为1,不是则置为0。
S34、如果todolist中还有未被测试过的项,则依次读取todolist的每一项,将problemarray1的对应项作为访问数据集大小memsize进行读带宽测试,并将每次测试所得结果存入tempresults数组对应项。
S35、对每个测试数据集,根据全局变量RUNS、测试数据集大小memsize和所用汇编指令计算出迭代次数runs。
S36、在每次迭代内,各线程会先准备数据,即按照设置参数修改存放数据的一致性状态和缓存层次,等待被主线程访问。
S361、对每个线程,如果线程是主线程,直接执行S362;否则,将测试所需参数memsize,access,USE_MODE赋值给对应线程的结构体,并将对应线程的thread_comm[t]设置为THREAD_USE_MEMORY,而后线程执行S362。
S362、根据测试参数执行数据准备过程。
S3621、根据cpuinfo.Cacheline_size将循环步长设置为最短的缓存行大小。
S3622、使用str汇编指令向buffer所指内存空间循环写入memsize大小的数据,使除线程对应核心以外的其他计算核心中的对应缓存行失效。
S3623、使用dc civac汇编指令使线程对应核心中的缓存行失效。
S3624、如果指定缓存行一致性状态为MODE_MODIFIED(即修改状态),使用str汇编指令向buffer所指内存空间循环写入memsize大小的数据,把缓存行状态从失效状态修改为修改状态。
S3625、如果指定缓存行一致性状态为MODE_ EXCLUSIVE或MODE_ SHARED,使用ldr指令从buffer所指内存空间循环读出memsize大小的数据,把缓存行状态从失效修改为独占状态。
S3626、对每个线程,如果线程是主线程,直接执行S363;否则,将对应线程的thread_comm[t]设置为THREAD_WAIT。
S363、如果指定一致性状态为MODE_ SHARED,根据所指定的分享数据的核心列表,修改每个核心对应线程的thread_comm[t]值为THREAD_USE_MEMORY,调用use_memory函数执行S362。而后将对应线程的thread_comm[t]设置为THREAD_WAIT。
步骤108,所述线程数组中每个线程将待测试数据集空间与各级高速缓存空间从最高级开始进行逐级比对,根据对比结果进行数据驱逐,直至测量数据集最终存在且仅存在某一级高速缓存或主存中。
具体的,S37、基准测试通过控制随机数据集的大小来确定数据所在的缓存级别,但数据经常可能存在于多个缓存级别中,此时测得的性能数据会受到来自不同缓存级别的影响,无法准确的得出某个缓存级别的延迟和带宽。为了避免该影响,当用于测试的数据集大于某个高速缓存级别大小时,基准程序将使用一个数据驱逐模块,使用不会在测量期间被访问的虚拟数据完全替换该级别高速缓存和更高级别高速缓存中的数据,从而将测量数据完全驱逐到下一级足够大的高速缓存中。
S371、对每个线程,如果线程是主线程,直接执行S3711;否则,将对应线程的线程状态数组thread_comm[t]设置为THREAD_FLUSH,而后线程执行S3711。
S3711、从最高级cache开始,比较测试数据集与该cache的大小,如果测试数据集大于缓存大小,执行S3712,否则执行S3713。
S3712、将测量数据完全驱逐到下一级足够大的cache或主存中。
S37121、计算循环步长,步长等于缓存行大小除以每个缓存行被访问的次数。
S37122、确定虚拟数据集大小。为了确保整个测试数据集,即该级高速缓存cache以及更高级别的高速缓存cache中的数据都被彻底驱逐到下一级高速缓存cache或主存中,虚拟数据集大小将额外比该级cache大EXTRA_FLUSH_SIZE%;如果该级cache为最后一级cache,则虚拟数据集取两倍大小。
S37123、连续访问虚拟数据集大小的数据,完全替换该级高速缓存和更高级高速缓存中的数据,从而将测量数据完全驱逐到下一级足够大的高速缓存中,而后执行S372。
S3713、继续比较上一级cache与测试数据集大小,如果测试数据集大于缓存大小,执行S3712,否则执行S3713,直至比较完所有级别的高速缓存,执行S372。
S372、对每个线程,如果线程是主线程,直接执行S38;否则,将对应线程的thread_comm[t]设置为THREAD_WAIT。
步骤110,主线程根据处理器主频和连续访问测量数据集时间确定与线程数组中每个子线程对应的计算核心之间的通信带宽测量结果。
具体的,S38、主线程使用ld1指令读取每个通信线程对应核心中大小为memsize的连续内存,通过PMCCNTR_EL0 来获得读取数据的耗时addr,并根据主频计算出带宽结果tmp。对每个线程迭代测试run次,取其中最大的结果作为测试结果赋值给tempresults对应项。
进一步地,如图3所示,使用gnuplot绘图工具可视化测量结果(即通信带宽测量结果),将所有线程和所有数据集的测试结果allresults写入对应bit文件,每个线程和数据集对应一个测量带宽结果。进而,将bit文件作为输入,使用gnuplot工具生成同名eps格式图片文件。其中,横轴为数据集大小,以字节为单位;纵轴为带宽,单位为GB/s;访问不同核心的通信带宽测量结果以不同点型表示。
上述面向多核处理器的核间通信带宽测量方法,通过读取系统文件获取处理器的缓存大小信息,这些信息包括各级缓存的容量大小和层次结构等,可以用来确定缓存系统的层次数量和每层缓存的容量大小,从而为后续的线程创建和内存空间分配提供参考。然后根据获取的缓存大小、测试线程数量以及全局数据结构体中的参数,创建一个线程数组。每个线程代表一个并发执行的计算核心,进而,将每个线程绑定到待测通信计算核心上,以确保测试的准确性和一致性。主线程是负责访问数据和测量访问时间的线程,线程的控制通过线程间共享数组实现。通过迭代测试,主线程访问每个子线程对应的处理器计算核心,获取计算核心之间的通信带宽的结果,将这些结果存储在第一内存空间中。将测试数据集空间与各级高速缓存空间比对,根据对比结果进行数据驱逐,通过确定被访问数据的缓存层次,在多核处理器复杂的通信模式下,可以精准获取细粒度通信带宽,以此为基础优化程序并行效能以及内存并发访问速率。
在其中一个实施例中,基准测试程序通过theinfo函数解析基准测试参数文件获取基准测试参数,并从哈希表中获取相关值赋值全局数据结构体。
在其中一个实施例中,通过系统文件获取缓存大小,根据缓存大小分配临时内存空间,并根据测试线程数量与全局数据结构体创建线程数组。
具体的,通过系统文件获取的缓存级别与缓存大小定义CACHEFLUSHSIZE,并以缓存大小为刷新缓存池分配内存空间。根据测试线程数量创建线程数组threaddata,将threaddata设置为全局数据结构体的域。每一个线程数组项threaddata[t]的数据结构为线程数据结构体threaddata_t。将线程数组中每一线程t的指针threaddata[t].cpuinfo赋值为全局数据结构体的指针mdp.cpuinfo,并将线程数剧中每一个线程t的数据threaddata[t].data赋值为全局变量。根据全局变量与指针threaddata[t].cpuinfo初始化每个线程数组项threaddata[t]的同名域值,根据同步域值为线程数组的主线程分配内存空间,得到第一内存空间。
在其中一个实施例中,第一内存空间根据测试数据集个数num_measurements分别对待测试数组todolist和已测试数组donelist分配内存空间获取待测试数据集空间memsize和已测试数据集。
在其中一个实施例中,线程数组中每一个子线程将测量数据集空间中由高级到低级的高速缓存逐一与每一级高速缓存空间进行降序比对,若测量数据集空间大于当前级别的高速缓存空间,则将当前子线程的测量数据驱逐至下一级高速缓存中。否则,测量数据集空间与上一级高速缓存空间进行比对,直至测量数据集空间的全部测量数据仅存储至一级高速缓存空间或主存空间,得到第一内存空间。
值得说明的是,线程数组中每个线程将待测试数据集空间memsize从最高级高速缓存开始,与各级高速缓存空间进行比对。若memsize大于某一级高速缓存的空间,则将当前线程的测量数据驱逐至下一级高速缓存或主存中;否则,继续与上一级高速缓存空间进行比对,直至测量数据集最终存在且仅存在某一级高速缓存或主存中。
在其中一个实施例中,多核处理器根据基准测试参数修改第一内存空间中每一个子线程对应的核心中数据的初始化数据状态,得到测量数据集空间中数据的一致性状态。
值得说明的是,线程数组中每一个线程根据预设的参数分别修改线程存储的数据的一致性状态,并根据基准测试参数执行数据准备过程。对每个线程,先使用str汇编指令使除该线程对应计算核心以外的其他计算核心中的对应数据失效,再使用dc civac汇编指令使该线程对应计算核心中的数据初始化为失效状态,而后根据预设的参数通过读写指令调整数据的一致性状态。其中,一致性状态可以是独占状态,也可以是修改状态。另外,如果预设的数据一致性状态为MODE_ SHARED,则先将数据转换为独占状态,再通过其他线程的访问将数据调整为共享状态。
由此可见,在测量前,每个线程会根据预设的参数修改其存储的数据的一致性状态,并将待测试数据集空间与各级高速缓存空间比对,根据对比结果进行数据驱逐,直至测量数据最终存在且仅存在某一级高速缓存或主存中。通过精确的数据准备过程控制测量通信带宽期间被访问数据的缓存一致性状态和存储层次,在多核处理器复杂的通信模式下,可以精准获取细粒度通信带宽,以此为基础,提高程序并行效能以及内存并发访问速率。
在其中一个实施例中,根据所述第一内存空间获取主线程读取每一个子线程对应核心中大小为所述测量数据集空间的第二内存,在所述第二内存中,主线程通过PMCCNTR_EL0获取多核处理器的核间数据传输的耗时,根据所述耗时与所述多核处理器的主频对所述主线程与每一个所述子线程之间的通信带宽进行迭代运算,得到主线程对应的核心与所述线程数组中每一个子线程对应的所述待测通信计算核心之间的带宽测量结果集合,取所述带宽测量结果集合的最大值为信带宽测量结果。
值得说明的是,主线程读取每个子线程对应核心中大小为memsize的连续内存,通过PMCCNTR_EL0获取多核处理器的核间数据传输的耗时addr,根据所述耗时addr与多核处理器主频计算出主线程与子线程之间的带宽测量结果tmp。根据全局变量确定的迭代次数,获取带宽测量结果tmp的最大值为主线程与子线程对应的计算核心之间的通信带宽测量结果。
另外,测试中采用多线程编程实现处理器计算核心之间的数据移动。每个线程都被绑定到对其应的计算核心,从而确保每个线程分配的内存页面总是属于对应的计算核心。以一组通信核心x、y为例,线程x将数据放置在其对应计算核心(核心x)的特定内存位置;线程y(绑定在核心y上)读取数据,从而测量核心x与核心y之间的通信带宽。当线程x、y为同一线程时,测量的就是访问计算核心本地的带宽。基准测试使用汇编指令支持显式地无混淆地读取数据,同时基于NEON向量支持实现了对带宽的充分利用。在测量时,对于ARMv8多核处理器,基准测试通过读取硬件计数器 Performance Monitors Cycle CountRegister,即 PMCCNTR_EL0 来获得CPU时钟级别的程序运行时间,达到精确计时功能。
应该理解的是,虽然图1-图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-图2中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在其中一个实施例中,如图2所示,启动面向多核处理器的核间通信带宽测量系统,开启ARMv8多核处理器的核间数据通信与带宽测量。
第一步:解析基准测试参数文件和系统参数文件,得到基准测试参数结构体和cpu参数结构体,并初始化环境参数结构体;
第二步:初始化测试结构体,创建测试线程。根据测试参数和系统参数初始化测试全局数据结构体和线程数据结构体,创建所有测试线程。其中,全局数据结构体变量为mdp;
第三步:测量带宽。主线程访问各个线程对应的计算核心上的数据集进行带宽测量;
第四步,结构可视化。使用gnuplot绘图工具可视化测量结果。
在一个实施例中,如图4所示,提供了一种面向多核处理器的核间通信带宽测量系统,包括:基准参数获取模块402、第一内存空间分配模块404和测量模块406,其中:
基准参数获取模块402,用于获取基准测试参数,并赋值全局数据结构体。基准测试参数包括:测试线程数量、测量数据集空间以及待测通信计算核心。
第一内存空间分配模块404,用于通过系统文件获取缓存大小,根据缓存大小、测试线程数量以及全局数据结构体创建线程数组,线程数组中每一个子线程将测量数据集空间与每一级高速缓存空间由高到低进行逐级比对,得到比对结果,根据比对结果对测量数据集空间进行数据驱逐,得到第一内存空间。
测量模块406,用于根据第一内存空间获取主线程对应的核心与线程数组中每一个子线程对应的待测通信计算核心之间的通信带宽测量结果。
关于面向多核处理器的核间通信带宽测量系统的具体限定可以参见上文中对于面向多核处理器的核间通信带宽测量方法的限定,在此不再赘述。上述面向多核处理器的核间通信带宽测量系统中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种面向多核处理器的核间通信带宽测量方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
获取基准测试参数,并赋值全局数据结构体。基准测试参数包括:测试线程数量、测量数据集空间以及待测通信计算核心。
通过系统文件获取缓存大小,根据缓存大小、测试线程数量以及全局数据结构体创建线程数组,线程数组中每一个子线程将测量数据集空间与每一级高速缓存空间由高至低进行逐级比对,得到比对结果,根据比对结果对测量数据集空间进行数据驱逐,得到第一内存空间。
根据第一内存空间获取主线程对应的核心与线程数组中每一个子线程对应的待测通信计算核心之间的通信带宽测量结果。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:通过系统文件获取缓存大小,根据缓存大小分配临时内存空间,并根据测试线程数量与全局数据结构体创建线程数组。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:线程数组中每一个子线程将测量数据集空间中由高级到低级的高速缓存逐一与每一级高速缓存空间进行降序比对,若测量数据集空间大于当前级别的高速缓存空间,则将当前子线程的测量数据驱逐至下一级高速缓存中。否则,测量数据集空间与上一级高速缓存空间进行比对,直至测量数据集空间的全部测量数据仅存储至一级高速缓存空间或主存空间,得到第一内存空间。
本领域技术人员可以理解,图4-图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (8)

1.一种面向多核处理器的核间通信带宽测量方法,其特征在于,应用于多核处理器,所述方法包括:
获取基准测试参数,并赋值全局数据结构体;所述基准测试参数包括:测试线程数量、测量数据集空间以及待测通信计算核心;
通过系统文件获取缓存大小,根据所述缓存大小、所述测试线程数量以及所述全局数据结构体创建线程数组,所述线程数组中每一个子线程将所述测量数据集空间与每一级高速缓存空间由高至低进行逐级比对,得到比对结果,根据所述比对结果对所述测量数据集空间进行数据驱逐,得到第一内存空间;
所述线程数组中每一个子线程将所述测量数据集空间中由高级到低级的高速缓存逐一与每一级高速缓存空间进行降序比对,若所述测量数据集空间大于当前级别的高速缓存空间,则将当前子线程的测量数据驱逐至下一级高速缓存中;否则,所述测量数据集空间与上一级高速缓存空间进行比对,直至所述测量数据集空间的全部测量数据仅存储至一级高速缓存空间或主存空间,得到第一内存空间;
根据所述第一内存空间获取主线程对应的核心与所述线程数组中每一个子线程对应的所述待测通信计算核心之间的通信带宽测量结果。
2.根据权利要求1所述的方法,其特征在于,获取基准测试参数,并赋值全局数据结构体,包括:
基准测试程序通过theinfo函数解析基准测试参数文件获取基准测试参数,并从哈希表中获取相关值赋值全局数据结构体。
3.根据权利要求2所述的方法,其特征在于,通过系统文件获取缓存大小,根据所述缓存大小、所述测试线程数量以及所述全局数据结构体创建线程数组,包括:
通过系统文件获取缓存大小,根据所述缓存大小分配临时内存空间,并根据所述测试线程数量与所述全局数据结构体创建线程数组。
4.根据权利要求3所述的方法,其特征在于,在根据所述第一内存空间获取主线程对应的核心与所述线程数组中每一个子线程对应的所述待测通信计算核心之间的通信带宽测量结果的步骤之前,还包括:
所述多核处理器根据所述基准测试参数修改所述第一内存空间中每一个子线程对应的核心中数据的初始化数据状态,得到所述测量数据集空间中数据的一致性状态。
5.根据权利要求4所述的方法,其特征在于,根据所述第一内存空间获取主线程对应的核心与所述线程数组中每一个子线程对应的所述待测通信计算核心之间的通信带宽测量结果,包括:
根据所述第一内存空间获取主线程读取每一个子线程对应核心中大小为所述测量数据集空间的第二内存,在所述第二内存中,主线程通过PMCCNTR_EL0获取多核处理器的核间数据传输的耗时,根据所述耗时与所述多核处理器的主频对所述主线程与每一个所述子线程之间的通信带宽进行迭代运算,得到主线程对应的核心与所述线程数组中每一个子线程对应的所述待测通信计算核心之间的带宽测量结果集合,取所述带宽测量结果集合的最大值为信带宽测量结果。
6.根据权利要求4至5任一项所述的方法,其特征在于,所述多核处理器根据所述基准测试参数改所述第一内存空间中每一个子线程对应的核心中数据的所述初始化数据状态,得到所述测量数据集空间中数据的一致性状态,包括:
所述多核处理器根据所述基准测试参数对每一个子线程使用str汇编指令控制除当前子线程对应的计算核心之外的其余计算核心中的数据失效,得到所述当前子线程对应的计算核心的第一有效数据;
通过dc civac汇编指令初始化所述第一有效数据的状态为失效状态,根据系统预设的参数通过读写指令修改所述第一内存空间中数据的失效状态,得到所述测量数据集空间中数据的一致性状态。
7.一种面向多核处理器的核间通信带宽测量系统,其特征在于,所述面向多核处理器的核间通信带宽测量系统装载在多核处理器上,通过基准测试程序测量多核处理器的核间通信带宽数据,将所述核间通信带宽数据以及测试过程发送至可视化模块,测量多核处理器的多级缓存系统的核间通信带宽数据,所述系统包括:
基准参数获取模块,用于获取基准测试参数,并赋值全局数据结构体;所述基准测试参数包括:测试线程数量、测量数据集空间以及待测通信计算核心;
第一内存空间分配模块,用于通过系统文件获取缓存大小,根据所述缓存大小、所述测试线程数量以及所述全局数据结构体创建线程数组,所述线程数组中每一个子线程将所述测量数据集空间与每一级高速缓存空间由高到低进行逐级比对,得到比对结果,根据比对结果对所述测量数据集空间进行数据驱逐,得到第一内存空间;所述线程数组中每一个子线程将所述测量数据集空间中由高级到低级的高速缓存逐一与每一级高速缓存空间进行降序比对,若所述测量数据集空间大于当前级别的高速缓存空间,则将当前子线程的测量数据驱逐至下一级高速缓存中;否则,所述测量数据集空间与上一级高速缓存空间进行比对,直至所述测量数据集空间的全部测量数据仅存储至一级高速缓存空间或主存空间,得到第一内存空间;
测量模块,用于根据所述第一内存空间获取主线程对应的核心与所述线程数组中每一个子线程对应的所述待测通信计算核心之间的通信带宽测量结果。
8.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1-6任一项所述方法的步骤。
CN202410113049.1A 2024-01-26 2024-01-26 面向多核处理器的核间通信带宽测量方法、系统及设备 Active CN117640471B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410113049.1A CN117640471B (zh) 2024-01-26 2024-01-26 面向多核处理器的核间通信带宽测量方法、系统及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410113049.1A CN117640471B (zh) 2024-01-26 2024-01-26 面向多核处理器的核间通信带宽测量方法、系统及设备

Publications (2)

Publication Number Publication Date
CN117640471A CN117640471A (zh) 2024-03-01
CN117640471B true CN117640471B (zh) 2024-04-09

Family

ID=90016746

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410113049.1A Active CN117640471B (zh) 2024-01-26 2024-01-26 面向多核处理器的核间通信带宽测量方法、系统及设备

Country Status (1)

Country Link
CN (1) CN117640471B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7882307B1 (en) * 2006-04-14 2011-02-01 Tilera Corporation Managing cache memory in a parallel processing environment
WO2017085454A1 (en) * 2015-11-20 2017-05-26 Pontus Networks 1 Ltd. Fuzzy caching mechanism for thread execution layouts
CN107980118A (zh) * 2015-06-10 2018-05-01 无比视视觉技术有限公司 使用多线程处理的多核处理器设备
CN110865968A (zh) * 2019-04-17 2020-03-06 成都海光集成电路设计有限公司 多核处理装置及其内核之间数据传输方法
WO2020190796A1 (en) * 2019-03-15 2020-09-24 Intel Corporation Systems and methods for cache optimization
CN111739577A (zh) * 2020-07-20 2020-10-02 成都智明达电子股份有限公司 一种基于dsp的高效的ddr测试方法
EP4064048A1 (en) * 2021-03-27 2022-09-28 Intel Corporation Memory bandwidth control in a core
CN115701589A (zh) * 2021-08-02 2023-02-10 辉达公司 用于片上系统的可编程视觉加速器的内置自测试
CN116719771A (zh) * 2023-05-17 2023-09-08 惠州华阳通用电子有限公司 一种核间通信调度方法、系统及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10853219B2 (en) * 2019-04-30 2020-12-01 Intel Corporation Real-time input/output bandwidth estimation

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7882307B1 (en) * 2006-04-14 2011-02-01 Tilera Corporation Managing cache memory in a parallel processing environment
CN107980118A (zh) * 2015-06-10 2018-05-01 无比视视觉技术有限公司 使用多线程处理的多核处理器设备
WO2017085454A1 (en) * 2015-11-20 2017-05-26 Pontus Networks 1 Ltd. Fuzzy caching mechanism for thread execution layouts
WO2020190796A1 (en) * 2019-03-15 2020-09-24 Intel Corporation Systems and methods for cache optimization
CN110865968A (zh) * 2019-04-17 2020-03-06 成都海光集成电路设计有限公司 多核处理装置及其内核之间数据传输方法
CN111739577A (zh) * 2020-07-20 2020-10-02 成都智明达电子股份有限公司 一种基于dsp的高效的ddr测试方法
EP4064048A1 (en) * 2021-03-27 2022-09-28 Intel Corporation Memory bandwidth control in a core
CN115701589A (zh) * 2021-08-02 2023-02-10 辉达公司 用于片上系统的可编程视觉加速器的内置自测试
CN116719771A (zh) * 2023-05-17 2023-09-08 惠州华阳通用电子有限公司 一种核间通信调度方法、系统及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Performance Analysis of Various Multi-and Many-Core Systems Centered on Memory;Seungwoo Rho 等;《2019 IEEE 4th International Workshops on Foundations and Applications of Self* Systems (FAS*W)》;20190808;第194-199页 *
片上双核数据并行采集及核间通信研究;侯志伟;安丽霞;包理群;王海涌;;计算机工程;20150515(第05期);全文 *

Also Published As

Publication number Publication date
CN117640471A (zh) 2024-03-01

Similar Documents

Publication Publication Date Title
US6467075B1 (en) Resolution of dynamic memory allocation/deallocation and pointers
US8156385B2 (en) Systems and methods for backward-compatible constant-time exception-protection memory
Ji et al. RSVM: a region-based software virtual memory for GPU
Diener et al. Kernel-based thread and data mapping for improved memory affinity
US10599638B2 (en) System and method for identifying maximal independent sets in parallel
CN117640471B (zh) 面向多核处理器的核间通信带宽测量方法、系统及设备
KR20180022538A (ko) 저장 장치를 사전 조정하는 방법 및 시스템
US10379827B2 (en) Automatic identification and generation of non-temporal store and load operations in a dynamic optimization environment
Punniyamurthy et al. Tafe: Thread address footprint estimation for capturing data/thread locality in gpu systems
Lee et al. Lightweight memory tracing for hot data identification
Ernst et al. Analytical performance estimation during code generation on modern GPUs
US20040088682A1 (en) Method, program product, and apparatus for cache entry tracking, collision detection, and address reasignment in processor testcases
Ma et al. GPU parallelization of unstructured/hybrid grid ALE multigrid unsteady solver for moving body problems
Brett et al. Chip: A profiler to measure the effect of cache contention on scalability
US20130117512A1 (en) Program converting apparatus, program converting method, and medium
CN116245054A (zh) 验证方法、验证装置、电子设备和计算机可读存储介质
CN113986775A (zh) 一种risc-v cpu验证中页表项生成方法、系统及装置
Chakraborty et al. Integrating software caches with scratch pad memory
Lefoul et al. Simulator-based framework towards improved cache predictability for multi-core avionic systems
Feljan et al. The impact of intra-core and inter-core task communication on architectural analysis of multicore embedded systems
Siddique et al. Lmstr: exploring shared hardware controlled scratchpad memory for multicores
Dai et al. Effective file data-block placement for different types of page cache on hybrid main memory architectures
Hu et al. Exploring architectural implications to boost performance for in-nvm b+-tree
Livingston et al. Energy avoiding matrix multiply
Peter et al. Using architecture simulation tool for memory subsystem evaluation in multi-core systems

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant