Structure Simulator Toolkit(SST)之 Link
发布网友
发布时间:2024-09-17 05:17
我来回答
共1个回答
热心网友
时间:2024-11-02 19:20
SST中的link,作为组件间信息传递的关键部件,其核心作用与systemc和gem5中的port类似,都是构建仿真系统的基础。link的主要功能包括延迟设置与数据收发,它通过与另一组件的link成员变量link_pair相连接,实现数据的流动处理。在SST中,link包含一个名为send_queue的ActivityQueue *类型数据成员,它作为消息传递的载体,将event传递至通信的另一端,event作为消息数据的基类,提供操作方法handler。在实际实现中,通过持有通信另一方的指针,组件间的数据从一个component传递到另一个component,实现了模块间的数据流动。
在连接两个组件时,通过将组件通信双方的link数据成员相互绑定来实现连接。在SST开始仿真之前,解析配置文件中的连接关系,生成link的联系图,并生成link对象。在prepareLinks过程中,通过LinkPair生成一对相互指向的link,并插入到linkMap中。随后,在component的实例化阶段,通过调用BaseComponent::configureLink,根据指定的link名字在linkmap中查找特定的link,并将其赋值给当前component的对应link成员变量。值得注意的是,在configureLink的参数中还有一个function handler参数,该参数在将赋值给link.deliveru_info,并在link::send_impl中赋值给待发送的消息载体event.delivery_info,实际上,这个delivery_info就是消息传递的核心函数,在event被触发时得到执行。
消息在link上传递是通过系统中每个组件持有的link成员变量实现的,通过调用link的send和recv系列api实现消息的传递。在发送消息时,调用link::send_impl进行发送,send_impl参数为event作为基类,承载消息处理handler。在具体的消息实现中,通常以event为基类派生子类类型,并在子类中添加消息传递的实际数据成员。例如,以example0中的event为例,展示消息如何在link上传递。
在link创建流程方面,首先在python中配置仿真系统组件和参数,通过python中link对象的connect函数连接不同component的link。以example0.py为例,python脚本中的自检基本都是来自于sst包,sst包并非直接定义在python文件中,而是通过c文件实现,并通过api注册到python运行环境中的,具体在pymodel.cc::SSTPythonModelDefinition::initModel()中构建sst对象。link对象创建过程涉及c文件中的实现,如sst-core\src\sst\core\model\python\pymodel_link.cc/.h,其中定义了python Link对象的关键属性和构造方法。在python配置文件中定义link=sst.Link("component_link")时,完成python对象构造后,调用linkInit函数初始化python对象。linkMethod指明了link对象的方法实现,在声明python对象后,通过对象调用connect方法,映射到linkMethod的linkConnect c++函数,执行相关操作。这实现了python对象与c对象的深度融合和共享,使得在python脚本中定义系统架构功能得以实现。
参考文献:
1. Understanding Simulation Infrastructure in SST (wangziqi2013.github.io)
2. Extending Python with C or C++ — Python 3.11.1 documentation
3. Python/C API Reference Manual — Python 3.11.1 documentation
4. Defining Extension Types: Tutorial — Python 3.11.1 documentation