2017 작성한 자료 옮김.
2년 전에 비해 리눅스에 대한 이해가 조금 올라간 상태에서 다시 gem5 설치법을 구현하고자 함
HPCA 유튜브 강연을 토대로 정리함
https://www.youtube.com/watch?v=5UT41VsGTsg
1. 다운로드하여 원하는 아키텍처에 대해 빌드
$ sudo apt-get install g++ python scons swig zlib1g-dev m4 python-dev
$ git clone https://gem5.googlesource.com/public/gem5
$ cd gem5
$git checkout hpca
$ scons build/X86/gem5.opt -j5
scons는 make와같은 다른종류의 컴파일 시스템
X86은 원하는 아키텍처로서 build_opt 폴더안에 사용가능한 아키텍처가 있음
2. 파일 수행하기
심플스칼라의 ./sim-outorder 와 같이 시뮬레이터 프로그램은 build/X86/gem5.opt 이다.
뒤에는 config파일이 붙는다.
예)
./build/X86/gem5.opt config/myscripts/simple.py
SE모드는 OS(linux)의 시스템콜을 부른다. (No OS runs는 무슨 뜻이지...)
3. 캐쉬 추가하기
http://learning.gem5.org/book/part1/cache_config.html
캐쉬 수정은 src/mem/cache/Cache.py 이다.
configration script도 수정해야한다.
4. 결과물
ls m5out 하면,
config.ini : SimObjects에 사용된 파라메터들을 모두 보여주고 뭐를 시뮬레이트 했는지 나옴
config.json : 위와 같음. 다만 json 형식
stats.txt : 시뮬레이션결과. 상세한 시뮬레이션 결과물을 보여줌
src/python/m5/simulate.py
cd src/hpca
컴파일 후 실행파일 돌리는 단순 예제
1) c코드를 작성하고나서 컴파일하여 바이너리파일 생성
gcc -static tests/test-progs/hello/src/hello.c -o tests/test-progs/hello/bin/x86/linux/hello
2) 실행테스트
./tests/test-progs/hello/bin/x86/linux/hello
3) 에뮬레이션모드로 해당 파일 수행
build/X86/gem5.opt configs/example/se.py -c tests/test-progs/hello/bin/x86/linux/hello
실행확인
실전 예제
시뮬레이션 단위인 SimObject에 대해 자세히 알아봐야 함
1) Python class 생성 (클래스는 여기서 관리하는듯...)
2) C++로 구조 구현 (로직은 여기서 하는듯...?)
3) SimObject와 C++파일을 등록
4) gem5 재빌드
5) config script 생성
1~3 ) 구현
src/ ~ 에 서
object.py 파일을 생성한다
class 선언하고 타입, 헤더를 정의한다.( 헤더는 header.hh)
class HelloObject(SimObject):
type = 'HelloObject' <-이건 C++ 클래스 이름이란다
object.hh 생성
헤더는 동일하게 클래스 선언하고 상속 넣어주고......포함관계가 상당히 복잡하네
object.cc 생성
HelloObjectParams::create() //반드시 선언하란다
Python(.py)가 C++ object를 생성하는 과정
Sconscript 생성
아래 내용이 포함됨
Import(*) //걍 포함
SimObject('object.py') // 파이썬파일이 Simobject를 포함한다고 얘기해줌.
Source ('object.cc') // Scons가 g++이용해서 어떤파일 컴파일할지 알려줌
4 ) 재빌드
다시 기본경로로 돌아가서 빌드한다.
> scons build/X86/gem5.opt
5 ) config파일 생성
vi configs/~~.py
import m5
from m5.objects import *
작성 예시
root = Root()
root.full_system = false
root.hello_kgb = HelloObject()
m5.instantiate()
print "Beginning "
exit_event = m5.simulate()
./build/X86/gem5.opt configs/~~.py
'Some tips' 카테고리의 다른 글
[Powershell] 하위 특정 폴더 삭제 & 각 상위 폴더로 일괄 이동시키기 (2) | 2021.03.03 |
---|---|
인터넷 느림, ping 기본 검사방법 메모 (0) | 2021.01.14 |
su , bash Permission Denied (0) | 2020.12.28 |
GEM5 FS mode 구동 (0) | 2020.12.28 |
Sniper Simulator 설치 (0) | 2020.12.28 |