• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Multi2sim、Dramsim鏈接

    來源:懂視網 責編:小采 時間:2020-11-09 07:46:19
    文檔

    Multi2sim、Dramsim鏈接

    Multi2sim、Dramsim鏈接:簡介: 系統結構實驗常用的工具是仿真器simulator。Multi2sim是多核時鐘精確仿真器,支持可變的存儲層次結構,網絡鏈接目前只支持Bus和P2P,但是對于內存的仿真只是簡單返回200cycle延遲,對于研究內存控制器有很大的限制。DRAMsim是內存時鐘精確仿真
    推薦度:
    導讀Multi2sim、Dramsim鏈接:簡介: 系統結構實驗常用的工具是仿真器simulator。Multi2sim是多核時鐘精確仿真器,支持可變的存儲層次結構,網絡鏈接目前只支持Bus和P2P,但是對于內存的仿真只是簡單返回200cycle延遲,對于研究內存控制器有很大的限制。DRAMsim是內存時鐘精確仿真

    簡介: 系統結構實驗常用的工具是仿真器simulator。Multi2sim是多核時鐘精確仿真器,支持可變的存儲層次結構,網絡鏈接目前只支持Bus和P2P,但是對于內存的仿真只是簡單返回200cycle延遲,對于研究內存控制器有很大的限制。DRAMsim是內存時鐘精確仿真器。于

    簡介:

    系統結構實驗常用的工具是仿真器simulator。Multi2sim是多核時鐘精確仿真器,支持可變的存儲層次結構,網絡鏈接目前只支持Bus和P2P,但是對于內存的仿真只是簡單返回200cycle延遲,對于研究內存控制器有很大的限制。DRAMsim是內存時鐘精確仿真器。于是本文的工作是把Multi2sim與DRAMsim相連接實現更強大的功能。


    源碼:

    1、Multi2sim: A CPU-GPU Model for Heterogeneous Computing

    CSDN下載地址:http://download.csdn.net/detail/koala002/3857207

    2、DRAMsim: DRAMSim2 is a cycle accurate model of a DRAM memory controller

    CSDN下載地址:http://download.csdn.net/detail/koala002/3857463


    步驟:

    1、解決C++與C程序鏈接問題

    Multi2sim與DRAMsim接口文件:由于Automake工具族實現對*.c后綴文件使用CC變量編譯器,*.cpp后綴使用CXX變量編譯器,所以更改后綴名為.cpp

    libcachesystem/cachesystem.cpp

    首先在文件開頭包含頭文件,定義內存讀寫處理函數,全局定義一個內存實例指針

    #ifdef MACRO_DRAM_SIM
    #include "../libdram/MemorySystem.h"
    
    class some_object
    {
    	public: 
    	void read_complete(unsigned, uint64_t, uint64_t);
    	void write_complete(unsigned, uint64_t, uint64_t);
    	int add_one_and_run();
    };
    /* callback functors */
    void some_object::read_complete(unsigned id, uint64_t address, uint64_t clock_cycle)
    {
    	//esim_schedule_event(EV_MOESI_FIND_AND_LOCK_FINISH, stack, ccache->lat);
    	//printf("[Callback] read complete: %d 0x%lx cycle=%lu\n", id, address, clock_cycle);
    }
    
    void some_object::write_complete(unsigned id, uint64_t address, uint64_t clock_cycle)
    {
    	//esim_schedule_event(EV_MOESI_FIND_AND_LOCK_FINISH, stack, ccache->lat);
    	//printf("[Callback] write complete: %d 0x%lx cycle=%lu\n", id, address, clock_cycle);
    }
    
    /* FIXME: this may be broken, currently */
    void power_callback(double a, double b, double c, double d)
    {
    	printf("power callback: %0.3f, %0.3f, %0.3f, %0.3f\n",a,b,c,d);
    }
    
    /* init one dramsim instance */
    class MemorySystem* g_dramsim_memory;
    
    #endif
    
    其次,cache_system_init是存儲層次建立函數,申請一個內存實例,并且注冊讀寫函數
    #ifdef MACRO_DRAM_SIM
     /* new one instance */
     g_dramsim_memory= new MemorySystem(0, "ini/DDR2_micron_16M_8b_x8_sg3E.ini",\
     "system.ini", "/home/jyq/multi2sim-3.1.1/src/libdram", "resultsfilename", 1024*500);
     /* create and register our callback functions */
    	Callback_t *read_cb = new Callback(new some_object, &some_object::read_complete);
    	Callback_t *write_cb = new Callback(new some_object, &some_object::write_complete);
     g_dramsim_memory->RegisterCallbacks(read_cb, write_cb, power_callback);
    
    #endif
    

    libcachesystem/moesi.cpp:一致性協議操作,讀寫操作

    首先,頭文件包含,并且注意代碼快兩端加入extern "C",以保證和原來代碼兼容

    #ifdef MACRO_DRAM_SIM
    #include "../libdram/MemorySystem.h"
    extern MemorySystem* g_dramsim_memory;
    #endif
    
    extern "C"{
    #include "cachesystem.h"
    
    其次,moesi_find_and_lock函數是找塊函數,讀寫操作都需要此功能函數。

    如果發現沒有lonet,則為最后一級緩存,那么像內存插入transaction。

    #ifdef MACRO_DRAM_SIM
     /* create a transaction and add it */
    	if(!ccache->lonet){
    	Transaction tr = Transaction(stack->read?DATA_READ:DATA_WRITE,stack->addr, stack);
    	g_dramsim_memory->addTransaction(tr);
    	}
    #endif
    
    原來代碼內存仿真都只是簡單返回200Cycles,所以這里改動如果發現是非內存讀操作才直接加入延遲。否則等待內存操作返回后由讀寫完成注冊函數處理。
    #ifdef MACRO_DRAM_SIM
    	/* Access latency */
    	if(ccache->lonet ){
    	esim_schedule_event(EV_MOESI_FIND_AND_LOCK_FINISH, stack, ccache->lat);
    	}
    #else
    	esim_schedule_event(EV_MOESI_FIND_AND_LOCK_FINISH, stack, ccache->lat);
    #endif

    ibcpuarch/cpuarch.cpp

    void cpu_run():實現時鐘精確仿真,其中子函數cpu_stages()實現的是每周期取指、譯碼、執行、提交、寫回流水線,所以在之后加入內存更新操作,這里注意處理器與內存的頻率倍數。

    #ifdef MACRO_DRAM_SIM
     /* Dramsim stage*/
     extern class MemorySystem* g_dramsim_memory;
     g_dramsim_memory->update();
    #endif

    2、為了代碼最小改動,將DRAMSim編譯成動態鏈接庫,然后在鏈接處與Multi2sim代碼相鏈接即可。

    3、合并代碼過程中,由于C標準允許void*指針賦給其他類型指針,但C++標注不允許,所以在改用g++編譯某些源文件時需要在這些賦值位置強轉類型。

    4、Makefile改寫可以參考automake、configure等資料。

    5、本文只是基本大體改動框架,細節功能實現或者擴展功能還需要更細改寫。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Multi2sim、Dramsim鏈接

    Multi2sim、Dramsim鏈接:簡介: 系統結構實驗常用的工具是仿真器simulator。Multi2sim是多核時鐘精確仿真器,支持可變的存儲層次結構,網絡鏈接目前只支持Bus和P2P,但是對于內存的仿真只是簡單返回200cycle延遲,對于研究內存控制器有很大的限制。DRAMsim是內存時鐘精確仿真
    推薦度:
    標簽: 鏈接 系統 sim
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲AV日韩精品久久久久| 日韩人妻精品一区二区三区视频 | 日韩精品久久无码人妻中文字幕 | 99精品国产一区二区| 国产精品亲子乱子伦xxxx裸| 欧美日韩在线精品一区二区三区激情综合 | 精品久久久久久成人AV| 人妻少妇看A偷人无码精品视频| 国产精品亚洲精品| 色国产精品一区在线观看| 久久夜色精品国产| 真实国产乱子伦精品免费| 国产精品多p对白交换绿帽| 亚洲av永久无码精品国产精品| 久久久久久国产精品美女| 亚洲国产精品自在在线观看| 99国产欧美精品久久久蜜芽| 日韩精品极品视频在线观看免费 | 国产精品久久久天天影视| 国产办公室秘书无码精品99| 国产A∨免费精品视频| 91无码人妻精品一区二区三区L| 亚洲愉拍99热成人精品热久久| 国内精品99亚洲免费高清| 欧美精品一区二区三区视频| 精品无码久久久久久尤物| 亚洲国产精品成人精品无码区 | 99精品人妻无码专区在线视频区| 无码精品视频一区二区三区| 一区二区国产精品 | 午夜亚洲av永久无码精品| 国产亚洲精品影视在线产品| 2021精品国产综合久久| 日韩欧精品无码视频无删节| 国产在线观看一区精品| 国产精品无码v在线观看| 无码日韩人妻精品久久蜜桃| 一本一道精品欧美中文字幕| 一级A毛片免费观看久久精品| 无码人妻精品一区二区三区99不卡| 久久狠狠一本精品综合网|