diff options
| author | WilliamMTK <[email protected]> | 2024-12-11 16:52:40 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-12-11 21:52:40 +0000 |
| commit | 752d4e5bf622b0d7c730e3eb2f1b3e3cf91e81fa (patch) | |
| tree | c21658a59c854d8251706796570ce80e34a6ef7b /src/gpgpu-sim/shader.h | |
| parent | 667834cfe5214523edd7769aeab77f91b7137686 (diff) | |
Add SST integration into gpgpusim (#44)
* Add accommodations to run gpgpusim with SST simulation framework through balar
* Output setup_environment options when sourcing
* Add SST directive check when creating sim thread
* Add sst side test for jenkins
* sst-integration: update Jenkinsfile with offical sst-elements repo and fix bugs in pipeline script
* sst-integration: direct jenkins to rebuild gpgpusim before testing for sst
* sst-integration: fix bugs in sst repos config
* sst-integration: let Jenkins rebuilds simulator
Since the simulator needs to be configured with both normal mode and sst mode, need to rebuild make target to clean prior runs.
* sst-integration: Update Jenkinsfile to source env vars when running balar test
* sst-integration: refactor code to remove __SST__ flag
* sst-integration: fix a bug that init cluster twice for sst
* sst-integration: fix a bug of not sending mem packets to SST
* sst-integration: remove sst flags from makefiles and setup_env
* sst-integration: add comments to SST changes
* sst-integration: remove rebuilding simulator in jenkins when testing for SST
* sst-integration: revert simulator build script
* Add a function to support querying function argument info for SST
* sst-integration: add version detection for vanadis binary
* Automated Format
* add version detection support for gcc 10+
* sst-integration: add cudaMallocHost for SST
* sst-integration: fix a compilation bug
* sst-integration: add sst balar unittest CI
* sst-integration: specify GPU_ARCH for CI test
* sst-integration: use bash for github actions
* sst-integration: use https links for sst repos
* sst-integration: add SST dependencies to CI config
* sst-integration: remove sudo
* sst-integration: default to yes for apt install
* sst-integration: add manual trigger for github action
* sst-integration: remove wrong on event
* sst-integration: limit CPU usage for compilation
* sst-integration: fix wrong path
* sst-integration: use personal repo for testing
* sst-integration: remove sst-core source in CI to free space
* sst-integration: SST_Cycle use print stats with stream id
* Automated Format
* sst-integration: check for diskspace and try to clean it
* sst-integration: move out of docker image
* sst-integration: testing for ci path
* sst-integration: fix syntax
* sst-integration: pass env vars
* sst-integration: set env properly
* sst-integration: merge LLVM build and test into same job
* sst-integration: fix step order
* sst-integration: checkout correct branch for env-setup
* sst-integration: remove resourcing gpu apps
* sst-integration: revert back to docker github action
* sst-integration: enable debug trace for sst testing
* sst-integration: resourcing gpu app for env vars
* sst-integration: use GPUAPPS_ROOT for path for gpu app
* sst-integration: use GPUAPPS_ROOT for path for gpu app
* sst-integration: enable parallel ci tests and fix not returning with cudaMallocHostSST
* sst-integration: using debug flag for CI run
* sst-integration: revert debug ci run
* sst-integration: CI skips cuda sdk download and launch multiple jobs
* sst-integration: reenable parallel tests
* sst-integration: reduce concurrent test thread count
* sst-integration: skip long test for github runner
* sst-integration: try running CI with single core
* sst-integrtion: add callback to SST to check thread sync is done in SST_Cycle()
* sst-integration: ignore lookup if already found and add callbacks to SST
* Automated Format
* sst-integration: add support for indirect texture access
* Automated Format
* sste-integration: fix up for PR
* Automated Format
---------
Co-authored-by: purdue-jenkins <[email protected]>
Diffstat (limited to 'src/gpgpu-sim/shader.h')
| -rw-r--r-- | src/gpgpu-sim/shader.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/gpgpu-sim/shader.h b/src/gpgpu-sim/shader.h index e658a14..ee10af6 100644 --- a/src/gpgpu-sim/shader.h +++ b/src/gpgpu-sim/shader.h @@ -2015,6 +2015,7 @@ class shader_core_stats : public shader_core_stats_pod { friend class shader_core_ctx; friend class ldst_unit; friend class simt_core_cluster; + friend class sst_simt_core_cluster; friend class scheduler_unit; friend class TwoLevelScheduler; friend class LooseRoundRobbinScheduler; @@ -2624,6 +2625,7 @@ class simt_core_cluster { void cache_invalidate(); bool icnt_injection_buffer_full(unsigned size, bool write); void icnt_inject_request_packet(class mem_fetch *mf); + void update_icnt_stats(class mem_fetch *mf); // for perfect memory interface bool response_queue_full() { @@ -2685,6 +2687,50 @@ class exec_simt_core_cluster : public simt_core_cluster { virtual void create_shader_core_ctx(); }; +/** + * @brief SST cluster class + * + */ +class sst_simt_core_cluster : public exec_simt_core_cluster { + public: + sst_simt_core_cluster(class gpgpu_sim *gpu, unsigned cluster_id, + const shader_core_config *config, + const memory_config *mem_config, + class shader_core_stats *stats, + class memory_stats_t *mstats) + : exec_simt_core_cluster(gpu, cluster_id, config, mem_config, stats, + mstats) {} + + /** + * @brief Check if SST memory request injection + * buffer is full by using extern + * function is_SST_buffer_full() + * defined in Balar + * + * @param size + * @param write + * @param type + * @return true + * @return false + */ + bool SST_injection_buffer_full(unsigned size, bool write, + mem_access_type type); + + /** + * @brief Send memory request packets to SST + * memory + * + * @param mf + */ + void icnt_inject_request_packet_to_SST(class mem_fetch *mf); + + /** + * @brief Advance ICNT between core and SST + * + */ + void icnt_cycle_SST(); +}; + class shader_memory_interface : public mem_fetch_interface { public: shader_memory_interface(shader_core_ctx *core, simt_core_cluster *cluster) { @@ -2725,6 +2771,61 @@ class perfect_memory_interface : public mem_fetch_interface { simt_core_cluster *m_cluster; }; +/** + * @brief SST memory interface + * + */ +class sst_memory_interface : public mem_fetch_interface { + public: + sst_memory_interface(shader_core_ctx *core, sst_simt_core_cluster *cluster) { + m_core = core; + m_cluster = cluster; + } + /** + * @brief For constant, inst, tex cache access + * + * @param size + * @param write + * @return true + * @return false + */ + virtual bool full(unsigned size, bool write) const { + assert(false && "Use the full() method with access type instead!"); + return true; + } + + /** + * @brief With SST, the core will direct all mem access except for + * constant, tex, and inst reads to SST mem system + * (i.e. not modeling constant mem right now), thus + * requiring the mem_access_type information to be passed in + * + * @param size + * @param write + * @param type + * @return true + * @return false + */ + bool full(unsigned size, bool write, mem_access_type type) const { + return m_cluster->SST_injection_buffer_full(size, write, type); + } + + /** + * @brief Push memory request to SST memory system and + * update stats + * + * @param mf + */ + virtual void push(mem_fetch *mf) { + m_core->inc_simt_to_mem(mf->get_num_flits(true)); + m_cluster->icnt_inject_request_packet_to_SST(mf); + } + + private: + shader_core_ctx *m_core; + sst_simt_core_cluster *m_cluster; +}; + inline int scheduler_unit::get_sid() const { return m_shader->get_sid(); } #endif /* SHADER_H */ |
