Hi guys,

My gem5 version is the newest v21.0.
I build gem5 with command “scons build/X86_MSI/gem5.debug --default=X86 
PROTOCOL=MESI_Three_Level SLICC_HTML=True”

And I write a simple multi-thread program.
#define THREAD 16
uint64_t sharei[8*THREAD]; //1 cachelines each thread

void work(void* arg){
    int id = *(int*)arg;
    int i=10000;
    int status=0;
    if(status==0){
        sharei[0]=id;
    while(i-->0){
        ;
    }
    }else{
        printf("transaction conflict go to fallback path!!!!\n");
    }
    printf("id=%d sharei=%ld status:%d\n",id,sharei[0],status);
}
int main(int argc, char *argv[]){
    pthread_t t[THREAD];
    int tid[THREAD];
    for(int i=0;i<THREAD;i++){
        tid[i] = i;
        pthread_create(&t[i],NULL,(void*)&work,(void*)&tid[i]);
    }
    for(int i=0;i<THREAD;i++){
        pthread_join(t[i],NULL);
    }
    return 0;
}

It is ok and correct to run on my computer.

I run this program in gem5 with command “./build/X86_MSI/gem5.debug 
./configs/example/se.py --ruby --cpu-type=TimingSimpleCPU -n 16 -c 
./bench/tx-thread”. 

But gem5 reports a panic 

“panic: Tried to read unmapped address 0x7ffff01bc9d0.
PC: 0x7ffff7dc8bd8, Instr:   MOV_R_M : ld   edi, DS:[rdi + 0x2d0]
Memory Usage: 1049152 KBytes
Program aborted at tick 733465000”

Then I add debug flags “X86,Exec,SimpleCPU,Fetch” to see what’s going on. And 
the before crash debug messages are below:

733464000: system.cpu00: Fetch
733464000: system.cpu00: Fetch: Inst PC:0x7ffff7dc8bd8, Fetch PC:0x7ffff7dc8bd8
733464000: system.cpu00: Translating address 0x7ffff7dc8bd8
733464000: system.cpu00: Sending fetch for addr 0x7ffff7dc8bd8(pa: 0x8ebd8)
733464000: system.cpu00:  -- pkt addr: 0x8ebd8
733464501: system.cpu00.icache_port: Received fetch response 0x8ebd8
733465000: system.cpu00: Complete ICache Fetch for addr 0x8ebd8
733465000: global: MOV_R_M : ld: The address is 0x7ffff01bc9d0
733465000: system.cpu00: T0 : 0x7ffff7dc8bd8 @_end+140737349711768    : mov     
edi, DS:[rdi + 0x2d0]
733465000: system.cpu00: T0 : 0x7ffff7dc8bd8 @_end+140737349711768. 0 :   
MOV_R_M : ld   edi, DS:[rdi + 0x2d0] : MemRead :  A=0x7ffff01bc9d0
733465000: system.cpu00: Fault occured. Handling the fault

I notice that the program running in gem5 executes only 15 “printf("id=%d 
sharei=%ld status:%d\n” which should be 16. 
So I try to add more cpu to gem5 with command “-n 17”. How amazing! It works. 
And I try different thread number and CPU number. When the CPU number is one 
more than thread number, the program will run success. 

I also try to run another multi-thread program from 
“https://www.gem5.org/documentation/learning_gem5/part3/running/“. But the  
trick that add one more cpu does not work in this program. The gem5 reports 
that “fatal: Ruby functional read failed for address 0x160928
Memory Usage: 954460 KBytes"

Anyone know what is going on? Could give me some advice to debug?

Thanks!

_______________________________________________
gem5-users mailing list -- gem5-users@gem5.org
To unsubscribe send an email to gem5-users-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to