nvmain源码阅读记录1

事件队列1

在每个NVMObject中,有eventQueue和globalEventQueue

在nvmain_mem.cc的初始化init函数中,设置globalEventQueue和eventQueue

        SetGlobalEventQueue( m_nvmainGlobalEventQueue );
        SetEventQueue( m_nvmainEventQueue );

此外,二者均在SetParent函数中获得parent的queue(NVMObject.cpp)

void NVMObject::SetParent( NVMObject *p )
{
    NVMObject_hook *hook = new NVMObject_hook( p );

    parent = hook;
    SetEventQueue( p->GetEventQueue( ) );
    SetGlobalEventQueue( p->GetGlobalEventQueue( ) );
    SetStats( p->GetStats( ) );
    SetTagGenerator( p->GetTagGenerator( ) );
}

在nvmain_mem.cc中,gem5函数调用的均为globalEventQueue(如在nvmain_mem.cc的函数process,recvTimingReq,tick中等)

/* Setup child and parent modules. */
        AddChild( m_nvmainPtr );
        m_nvmainPtr->SetParent( this );
        m_nvmainGlobalEventQueue->AddSystem( m_nvmainPtr, m_nvmainConfig );
        m_nvmainPtr->SetConfig( m_nvmainConfig );

m_nvmainPtr为

m_nvmainPtr = new NVM::NVMain( );

即它的child是nvmain,后续都从nvmain开始;nvmain设置parent时,获取了parent的globalEventQueue和eventQueue;在AddSystem时,将parent的EventQueue设置为了这个globalEventQueue的EventQueue;所以nvmain_mem.cc中的globalEventQueue的eventQueues中就包含了nvmain_mem的EventQueue

void GlobalEventQueue::AddSystem( NVMain *subSystem, Config *config )
{
    double subSystemFrequency = config->GetEnergy( "CLK" ) * 1000000.0;
    EventQueue *queue = subSystem->GetEventQueue( );

    assert( subSystemFrequency <= frequency );

    /* 
     *  The CLK value in the config file is the frequency this subsystem should run at.
     *  We aren't doing and checks here to make sure the input side (i.e. CPUFreq) is
     *  corrent since we don't know what it should be.
     */
    eventQueues.insert( std::pair<EventQueue*, double>(queue, subSystemFrequency) );
    queue->SetFrequency( subSystemFrequency );

    std::cout << "NVMain: GlobalEventQueue: Added a memory subsystem running at "
              << config->GetEnergy( "CLK" ) << "MHz. My frequency is "
              << (frequency / 1000000.0) << "MHz." << std::endl;
}

eventQueues在nvmain_mem.cc中对globalEventQueue进行操作时会被调用

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值