MGPUSim is a high-flexibility, high-performance, high-accuracy GPU simulator. It models GPUs that run the AMD GCN3 instruction sets. One main feature of MGPUSim is the support for multi-GPU simulation (you can still use it for single-GPU architecture research).
- Install the most recent version of Go from golang.org.
- Clone this repository, assuming the path is
[mgpusim_home]
. - Change your current directory to
[mgpusim_home]/samples/fir
. - Compile the simulator with the benchmark with
go build
. The compiler will generate an executed calledfir
(on Linux or Mac OS) orfir.exe
(on Windows) for you. - Run the simulation with
./fir -timing --report-all
to run the simulation. - Check the generated
metrics.csv
file for high-level metrics output.
AMD APP SDK | DNN Mark | HeteroMark | Polybench | Rodinia | SHOC |
---|---|---|---|---|---|
Bitonic Sort | MaxPooling | AES | ATAX | Needleman-Wunsch | BFS |
Fast Walsh Transform | ReLU | FIR | BICG | FFT | |
Floyd-Warshall | KMeans | SPMV | |||
Matrix Multiplication | PageRank | Stencil2D | |||
Matrix Transpose | |||||
NBody | |||||
Simple Covolution |
You can run a simulation with the --report-all
argument to enable all the performance metrics.
- Total execution time
- Total kernel time
- Per-GPU kernel time
- Instruction count on each Compute Unit
- Average request latency on all the cache components
- Number of read-misses, read-mshr-hits, read-hits, write-misses, write-mshr-hits, and write hits on all the cache components
- Number of incoming transactions and outgoing transactions on all the RDMA components.
- Number of transactions on each DRAM controller.
- Create a new repository repo. Typically we create one repo for each project, which may contain multiple experiments.
- Create a folder in your repo for each experiment. Run
go init [git repo path]/[directory_name]
to initialize the folder as a new go module. For example, if your git repository is hosted athttps://gitlab.com/syifan/fancy_project
and your experiment folder is named asexp1
, your module path should begitlab.com/syifan/fancy_project/exp1
. - Copy all the files under the directory
samples/experiment
to your experiment folder. In themain.go
file, change the benchmark and the problem size to run. Or you can use an argument to select which benchmark to run. The filerunner.go
,platform.go
,r9nano.go
, andshaderarray.go
serve as configuration files. So you need to change them according to your need. - It is also possible to modify an existing component or adding a new component. You should copy the folder that includes the component you want to modify to your repo first. Then, modify the configuration scripts to link the system with your new component. You can try to add some print commands to see if your local component is used. Finally, you can start to modify the component code.
- If you find any bug related to the simulator (e.g., simulator is not accurately modeling some behavior or the simulator is not getting the correct emulation result), please raise an issue in the issue tab MGPUSim.
- If you want a new feature (e.g., you need to implement some new instructions or you want to model some new components), please also raise an issue.
- If you want to add a feature or fix a bug, create a merge request using the "Create merge request" button in the corresponding issue. Gitlab will create a branch for you and you can develop your code there. Feel free to commit often and push often as you do not need to be responsible for the coding quality of every commit.
- When you are done with developing, click the "Mark as ready" button in the merge request. Someone will review your code and see if the code can be merged. If nobody responds you in 2 days, please notify us on Slack.
- There is no particular style requirement other than the default Go style requirement. Please run
gofmt
,goimports
, orgoreturns
before making your merge request ready. Also, runninggolangci-lint run
in the root directory will point you out most of the styling errors.
MIT © Project Akita Developers.