Coder Social home page Coder Social logo

zgylzbvm / mgpusim Goto Github PK

View Code? Open in Web Editor NEW

This project forked from beneslami/mgpusim

0.0 0.0 0.0 973 KB

MGPUSim

License: MIT License

Shell 0.08% JavaScript 0.77% C++ 6.76% Python 0.92% C 8.54% Go 80.38% TypeScript 0.73% CSS 0.03% Makefile 0.11% CMake 1.37% Dockerfile 0.18% Vim Script 0.15%

mgpusim's Introduction

MGPUSIM

Go Report Card Test Coverage

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).

Communication

Slack: Slack

Discord: Discord Chat

Getting Started

  • 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 called fir (on Linux or Mac OS) or fir.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.

Benchmark Support

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

Default Performance Metrics Supported

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.

How to Prepare Your Own Experiment

  • 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 at https://gitlab.com/syifan/fancy_project and your experiment folder is named as exp1, your module path should be gitlab.com/syifan/fancy_project/exp1.
  • Copy all the files under the directory samples/experiment to your experiment folder. In the main.go file, change the benchmark and the problem size to run. Or you can use an argument to select which benchmark to run. The file runner.go, platform.go, r9nano.go, and shaderarray.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.

Contributing

  • 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, or goreturns before making your merge request ready. Also, running golangci-lint run in the root directory will point you out most of the styling errors.

License

MIT © Project Akita Developers.

mgpusim's People

Contributors

beneslami avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.