diff options
| author | Ayub Gubran <[email protected]> | 2011-10-19 14:15:38 -0800 |
|---|---|---|
| committer | Andrew Boktor <[email protected]> | 2014-08-14 13:18:23 -0700 |
| commit | 03f2cd62985a4398cb6afe5066bbc92de272262a (patch) | |
| tree | f70630a306f1bb90d6fb5cfffe4d74a1c6fa2ca4 | |
| parent | 258ad919a4d584a665c1b1d40d7c5e00831d7288 (diff) | |
My last work added to the branch, wokring on the functional simulator in cudasim.
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 10695]
| -rw-r--r-- | decuda_to_ptxplus/makefile | 3 | ||||
| -rw-r--r-- | libcuda/Makefile | 5 | ||||
| -rw-r--r-- | setup_enviroment | 4 | ||||
| -rw-r--r-- | src/Makefile | 377 | ||||
| -rw-r--r-- | src/cuda-sim/Makefile | 21 | ||||
| -rw-r--r-- | src/cuda-sim/cuda-sim.cc | 384 | ||||
| -rw-r--r-- | src/stream_manager.cc | 3 |
7 files changed, 542 insertions, 255 deletions
diff --git a/decuda_to_ptxplus/makefile b/decuda_to_ptxplus/makefile index ddc9c76..b07d87b 100644 --- a/decuda_to_ptxplus/makefile +++ b/decuda_to_ptxplus/makefile @@ -84,6 +84,9 @@ decudaInst.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h decudaInst.o: /usr/include/bits/select.h /usr/include/bits/sigset.h decudaInst.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h decudaInst.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +decudaInst.o: /usr/include/stdio.h /usr/include/libio.h +decudaInst.o: /usr/include/_G_config.h /usr/include/wchar.h +decudaInst.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h decudaInstList.o: decudaInstList.h decudaInst.h stringList.h decudaInstList.o: /usr/include/assert.h /usr/include/features.h decudaInstList.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h diff --git a/libcuda/Makefile b/libcuda/Makefile index 8ba09f3..cb04730 100644 --- a/libcuda/Makefile +++ b/libcuda/Makefile @@ -138,6 +138,7 @@ clean: ../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/stdio_lim.h ../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/sys_errlist.h ../build/release/libcuda/cuda_runtime_api.o: /usr/include/string.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/xlocale.h ../build/release/libcuda/cuda_runtime_api.o: /usr/include/assert.h ../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/gpu-sim.h ../build/release/libcuda/cuda_runtime_api.o: ../src/abstract_hardware_model.h @@ -146,6 +147,10 @@ clean: ../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/shader.h ../build/release/libcuda/cuda_runtime_api.o: /usr/include/math.h ../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/huge_val.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/huge_valf.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/huge_vall.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/inf.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/nan.h ../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/mathdef.h ../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/mathcalls.h ../build/release/libcuda/cuda_runtime_api.o: ../src/cuda-sim/ptx.tab.h diff --git a/setup_enviroment b/setup_enviroment index 526322d..a90f9e0 100644 --- a/setup_enviroment +++ b/setup_enviroment @@ -10,13 +10,13 @@ export QTINC=/usr/include export BOOST_ROOT=/usr/include/boost export BOOST_LIB=/usr/lib64 export BOOST_VER= -export NVOPENCL_LIBDIR=/usr/lib64 +#export NVOPENCL_LIBDIR=/usr/lib64 # change this to point to your installation of the NVIDIA compute SDK export NVIDIA_COMPUTE_SDK_LOCATION=~/NVIDIA_GPU_Computing_SDK # change the following to point to your installation of CUDA Toolkit -export CUDA_INSTALL_PATH=/usr/local/cuda +export CUDA_INSTALL_PATH=/home/ayub/cuda # setting LD_LIBRARY_PATH as follows enables GPGPU-Sim to be invoked by # native CUDA and OpenCL applications. GPGPU-Sim is dynamically linked diff --git a/src/Makefile b/src/Makefile index 40d7a89..effd073 100644 --- a/src/Makefile +++ b/src/Makefile @@ -73,185 +73,198 @@ option_parser.$(OEXT): option_parser.h # DO NOT DELETE -../build/debug/abstract_hardware_model.o: abstract_hardware_model.h -../build/debug/abstract_hardware_model.o: cuda-sim/memory.h -../build/debug/abstract_hardware_model.o: abstract_hardware_model.h -../build/debug/abstract_hardware_model.o: /usr/include/assert.h -../build/debug/abstract_hardware_model.o: /usr/include/features.h -../build/debug/abstract_hardware_model.o: /usr/include/sys/cdefs.h -../build/debug/abstract_hardware_model.o: /usr/include/bits/wordsize.h -../build/debug/abstract_hardware_model.o: /usr/include/gnu/stubs.h -../build/debug/abstract_hardware_model.o: /usr/include/gnu/stubs-64.h -../build/debug/abstract_hardware_model.o: /usr/include/string.h -../build/debug/abstract_hardware_model.o: /usr/include/stdio.h -../build/debug/abstract_hardware_model.o: /usr/include/bits/types.h -../build/debug/abstract_hardware_model.o: /usr/include/bits/typesizes.h -../build/debug/abstract_hardware_model.o: /usr/include/libio.h -../build/debug/abstract_hardware_model.o: /usr/include/_G_config.h -../build/debug/abstract_hardware_model.o: /usr/include/wchar.h -../build/debug/abstract_hardware_model.o: /usr/include/bits/stdio_lim.h -../build/debug/abstract_hardware_model.o: /usr/include/bits/sys_errlist.h -../build/debug/abstract_hardware_model.o: /usr/include/stdlib.h -../build/debug/abstract_hardware_model.o: /usr/include/sys/types.h -../build/debug/abstract_hardware_model.o: /usr/include/time.h -../build/debug/abstract_hardware_model.o: /usr/include/endian.h -../build/debug/abstract_hardware_model.o: /usr/include/bits/endian.h -../build/debug/abstract_hardware_model.o: /usr/include/bits/byteswap.h -../build/debug/abstract_hardware_model.o: /usr/include/sys/select.h -../build/debug/abstract_hardware_model.o: /usr/include/bits/select.h -../build/debug/abstract_hardware_model.o: /usr/include/bits/sigset.h -../build/debug/abstract_hardware_model.o: /usr/include/bits/time.h -../build/debug/abstract_hardware_model.o: /usr/include/sys/sysmacros.h -../build/debug/abstract_hardware_model.o: /usr/include/bits/pthreadtypes.h -../build/debug/abstract_hardware_model.o: /usr/include/alloca.h -../build/debug/abstract_hardware_model.o: option_parser.h cuda-sim/ptx_ir.h -../build/debug/abstract_hardware_model.o: cuda-sim/ptx.tab.h -../build/debug/abstract_hardware_model.o: cuda-sim/ptx_sim.h -../build/debug/abstract_hardware_model.o: cuda-sim/dram_callback.h -../build/debug/abstract_hardware_model.o: tr1_hash_map.h cuda-sim/opcodes.h -../build/debug/abstract_hardware_model.o: cuda-sim/opcodes.def -../build/debug/abstract_hardware_model.o: cuda-sim/memory.h option_parser.h -../build/debug/abstract_hardware_model.o: cuda-sim/ptx-stats.h -../build/debug/debug.o: debug.h abstract_hardware_model.h gpgpu-sim/shader.h -../build/debug/debug.o: /usr/include/stdio.h /usr/include/features.h -../build/debug/debug.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h -../build/debug/debug.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h -../build/debug/debug.o: /usr/include/bits/types.h -../build/debug/debug.o: /usr/include/bits/typesizes.h /usr/include/libio.h -../build/debug/debug.o: /usr/include/_G_config.h /usr/include/wchar.h -../build/debug/debug.o: /usr/include/bits/stdio_lim.h -../build/debug/debug.o: /usr/include/bits/sys_errlist.h /usr/include/stdlib.h -../build/debug/debug.o: /usr/include/sys/types.h /usr/include/time.h -../build/debug/debug.o: /usr/include/endian.h /usr/include/bits/endian.h -../build/debug/debug.o: /usr/include/bits/byteswap.h -../build/debug/debug.o: /usr/include/sys/select.h /usr/include/bits/select.h -../build/debug/debug.o: /usr/include/bits/sigset.h /usr/include/bits/time.h -../build/debug/debug.o: /usr/include/sys/sysmacros.h -../build/debug/debug.o: /usr/include/bits/pthreadtypes.h -../build/debug/debug.o: /usr/include/alloca.h /usr/include/math.h -../build/debug/debug.o: /usr/include/bits/huge_val.h -../build/debug/debug.o: /usr/include/bits/mathdef.h -../build/debug/debug.o: /usr/include/bits/mathcalls.h /usr/include/assert.h -../build/debug/debug.o: cuda-sim/ptx.tab.h cuda-sim/dram_callback.h -../build/debug/debug.o: gpgpu-sim/delayqueue.h intersim/statwraper.h -../build/debug/debug.o: gpgpu-sim/gpu-misc.h gpgpu-sim/stack.h -../build/debug/debug.o: abstract_hardware_model.h gpgpu-sim/dram.h -../build/debug/debug.o: /usr/include/zlib.h /usr/include/zconf.h -../build/debug/debug.o: /usr/include/unistd.h /usr/include/bits/posix_opt.h -../build/debug/debug.o: /usr/include/bits/confname.h /usr/include/getopt.h -../build/debug/debug.o: gpgpu-sim/scoreboard.h gpgpu-sim/mem_fetch.h -../build/debug/debug.o: gpgpu-sim/addrdec.h option_parser.h gpgpu-sim/stats.h -../build/debug/debug.o: gpgpu-sim/gpu-cache.h tr1_hash_map.h -../build/debug/debug.o: gpgpu-sim/gpu-sim.h gpgpu-sim/shader.h -../build/debug/debug.o: cuda-sim/ptx_sim.h cuda-sim/dram_callback.h -../build/debug/debug.o: cuda-sim/opcodes.h cuda-sim/opcodes.def -../build/debug/debug.o: cuda-sim/memory.h cuda-sim/cuda-sim.h -../build/debug/debug.o: cuda-sim/ptx_ir.h cuda-sim/ptx.tab.h -../build/debug/debug.o: cuda-sim/ptx_sim.h /usr/include/string.h -../build/debug/gpgpusim_entrypoint.o: gpgpusim_entrypoint.h -../build/debug/gpgpusim_entrypoint.o: abstract_hardware_model.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/time.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/bits/types.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/features.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/sys/cdefs.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/bits/wordsize.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/gnu/stubs.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/gnu/stubs-64.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/bits/typesizes.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/stdio.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/libio.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/_G_config.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/wchar.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/bits/stdio_lim.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/bits/sys_errlist.h -../build/debug/gpgpusim_entrypoint.o: option_parser.h /usr/include/stdlib.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/sys/types.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/endian.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/bits/endian.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/bits/byteswap.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/sys/select.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/bits/select.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/bits/sigset.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/bits/time.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/sys/sysmacros.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/bits/pthreadtypes.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/alloca.h -../build/debug/gpgpusim_entrypoint.o: cuda-sim/cuda-sim.h -../build/debug/gpgpusim_entrypoint.o: abstract_hardware_model.h -../build/debug/gpgpusim_entrypoint.o: cuda-sim/dram_callback.h -../build/debug/gpgpusim_entrypoint.o: cuda-sim/ptx_ir.h /usr/include/assert.h -../build/debug/gpgpusim_entrypoint.o: cuda-sim/ptx.tab.h cuda-sim/ptx_sim.h -../build/debug/gpgpusim_entrypoint.o: tr1_hash_map.h cuda-sim/opcodes.h -../build/debug/gpgpusim_entrypoint.o: cuda-sim/opcodes.def cuda-sim/memory.h -../build/debug/gpgpusim_entrypoint.o: option_parser.h cuda-sim/ptx_parser.h -../build/debug/gpgpusim_entrypoint.o: gpgpu-sim/gpu-sim.h gpgpu-sim/addrdec.h -../build/debug/gpgpusim_entrypoint.o: gpgpu-sim/shader.h -../build/debug/gpgpusim_entrypoint.o: gpgpu-sim/icnt_wrapper.h -../build/debug/gpgpusim_entrypoint.o: stream_manager.h /usr/include/pthread.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/sched.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/bits/sched.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/signal.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/bits/setjmp.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/semaphore.h -../build/debug/gpgpusim_entrypoint.o: /usr/include/bits/semaphore.h -../build/debug/option_parser.o: /usr/include/stdio.h /usr/include/features.h -../build/debug/option_parser.o: /usr/include/sys/cdefs.h -../build/debug/option_parser.o: /usr/include/bits/wordsize.h -../build/debug/option_parser.o: /usr/include/gnu/stubs.h -../build/debug/option_parser.o: /usr/include/gnu/stubs-64.h -../build/debug/option_parser.o: /usr/include/bits/types.h -../build/debug/option_parser.o: /usr/include/bits/typesizes.h -../build/debug/option_parser.o: /usr/include/libio.h /usr/include/_G_config.h -../build/debug/option_parser.o: /usr/include/wchar.h -../build/debug/option_parser.o: /usr/include/bits/stdio_lim.h -../build/debug/option_parser.o: /usr/include/bits/sys_errlist.h -../build/debug/option_parser.o: /usr/include/stdlib.h -../build/debug/option_parser.o: /usr/include/sys/types.h /usr/include/time.h -../build/debug/option_parser.o: /usr/include/endian.h -../build/debug/option_parser.o: /usr/include/bits/endian.h -../build/debug/option_parser.o: /usr/include/bits/byteswap.h -../build/debug/option_parser.o: /usr/include/sys/select.h -../build/debug/option_parser.o: /usr/include/bits/select.h -../build/debug/option_parser.o: /usr/include/bits/sigset.h -../build/debug/option_parser.o: /usr/include/bits/time.h -../build/debug/option_parser.o: /usr/include/sys/sysmacros.h -../build/debug/option_parser.o: /usr/include/bits/pthreadtypes.h -../build/debug/option_parser.o: /usr/include/alloca.h /usr/include/assert.h -../build/debug/option_parser.o: /usr/include/string.h option_parser.h -../build/debug/stream_manager.o: stream_manager.h abstract_hardware_model.h -../build/debug/stream_manager.o: /usr/include/pthread.h -../build/debug/stream_manager.o: /usr/include/features.h -../build/debug/stream_manager.o: /usr/include/sys/cdefs.h -../build/debug/stream_manager.o: /usr/include/bits/wordsize.h -../build/debug/stream_manager.o: /usr/include/gnu/stubs.h -../build/debug/stream_manager.o: /usr/include/gnu/stubs-64.h -../build/debug/stream_manager.o: /usr/include/endian.h -../build/debug/stream_manager.o: /usr/include/bits/endian.h -../build/debug/stream_manager.o: /usr/include/bits/byteswap.h -../build/debug/stream_manager.o: /usr/include/sched.h -../build/debug/stream_manager.o: /usr/include/bits/types.h -../build/debug/stream_manager.o: /usr/include/bits/typesizes.h -../build/debug/stream_manager.o: /usr/include/time.h -../build/debug/stream_manager.o: /usr/include/bits/sched.h -../build/debug/stream_manager.o: /usr/include/signal.h -../build/debug/stream_manager.o: /usr/include/bits/sigset.h -../build/debug/stream_manager.o: /usr/include/bits/pthreadtypes.h -../build/debug/stream_manager.o: /usr/include/bits/setjmp.h -../build/debug/stream_manager.o: gpgpusim_entrypoint.h cuda-sim/cuda-sim.h -../build/debug/stream_manager.o: abstract_hardware_model.h -../build/debug/stream_manager.o: cuda-sim/dram_callback.h -../build/debug/stream_manager.o: /usr/include/stdlib.h -../build/debug/stream_manager.o: /usr/include/sys/types.h -../build/debug/stream_manager.o: /usr/include/sys/select.h -../build/debug/stream_manager.o: /usr/include/bits/select.h -../build/debug/stream_manager.o: /usr/include/bits/time.h -../build/debug/stream_manager.o: /usr/include/sys/sysmacros.h -../build/debug/stream_manager.o: /usr/include/alloca.h gpgpu-sim/gpu-sim.h -../build/debug/stream_manager.o: gpgpu-sim/addrdec.h /usr/include/stdio.h -../build/debug/stream_manager.o: /usr/include/libio.h -../build/debug/stream_manager.o: /usr/include/_G_config.h -../build/debug/stream_manager.o: /usr/include/wchar.h -../build/debug/stream_manager.o: /usr/include/bits/stdio_lim.h -../build/debug/stream_manager.o: /usr/include/bits/sys_errlist.h -../build/debug/stream_manager.o: /usr/include/assert.h option_parser.h -../build/debug/stream_manager.o: gpgpu-sim/shader.h +../build/release/abstract_hardware_model.o: abstract_hardware_model.h +../build/release/abstract_hardware_model.o: cuda-sim/memory.h +../build/release/abstract_hardware_model.o: abstract_hardware_model.h +../build/release/abstract_hardware_model.o: /usr/include/assert.h +../build/release/abstract_hardware_model.o: /usr/include/features.h +../build/release/abstract_hardware_model.o: /usr/include/sys/cdefs.h +../build/release/abstract_hardware_model.o: /usr/include/bits/wordsize.h +../build/release/abstract_hardware_model.o: /usr/include/gnu/stubs.h +../build/release/abstract_hardware_model.o: /usr/include/gnu/stubs-64.h +../build/release/abstract_hardware_model.o: /usr/include/string.h +../build/release/abstract_hardware_model.o: /usr/include/xlocale.h +../build/release/abstract_hardware_model.o: /usr/include/stdio.h +../build/release/abstract_hardware_model.o: /usr/include/bits/types.h +../build/release/abstract_hardware_model.o: /usr/include/bits/typesizes.h +../build/release/abstract_hardware_model.o: /usr/include/libio.h +../build/release/abstract_hardware_model.o: /usr/include/_G_config.h +../build/release/abstract_hardware_model.o: /usr/include/wchar.h +../build/release/abstract_hardware_model.o: /usr/include/bits/stdio_lim.h +../build/release/abstract_hardware_model.o: /usr/include/bits/sys_errlist.h +../build/release/abstract_hardware_model.o: /usr/include/stdlib.h +../build/release/abstract_hardware_model.o: /usr/include/sys/types.h +../build/release/abstract_hardware_model.o: /usr/include/time.h +../build/release/abstract_hardware_model.o: /usr/include/endian.h +../build/release/abstract_hardware_model.o: /usr/include/bits/endian.h +../build/release/abstract_hardware_model.o: /usr/include/bits/byteswap.h +../build/release/abstract_hardware_model.o: /usr/include/sys/select.h +../build/release/abstract_hardware_model.o: /usr/include/bits/select.h +../build/release/abstract_hardware_model.o: /usr/include/bits/sigset.h +../build/release/abstract_hardware_model.o: /usr/include/bits/time.h +../build/release/abstract_hardware_model.o: /usr/include/sys/sysmacros.h +../build/release/abstract_hardware_model.o: /usr/include/bits/pthreadtypes.h +../build/release/abstract_hardware_model.o: /usr/include/alloca.h +../build/release/abstract_hardware_model.o: option_parser.h cuda-sim/ptx_ir.h +../build/release/abstract_hardware_model.o: cuda-sim/ptx.tab.h +../build/release/abstract_hardware_model.o: cuda-sim/ptx_sim.h tr1_hash_map.h +../build/release/abstract_hardware_model.o: cuda-sim/opcodes.h +../build/release/abstract_hardware_model.o: cuda-sim/opcodes.def +../build/release/abstract_hardware_model.o: cuda-sim/memory.h option_parser.h +../build/release/abstract_hardware_model.o: cuda-sim/ptx-stats.h +../build/release/debug.o: debug.h abstract_hardware_model.h +../build/release/debug.o: gpgpu-sim/shader.h /usr/include/stdio.h +../build/release/debug.o: /usr/include/features.h /usr/include/sys/cdefs.h +../build/release/debug.o: /usr/include/bits/wordsize.h +../build/release/debug.o: /usr/include/gnu/stubs.h +../build/release/debug.o: /usr/include/gnu/stubs-64.h +../build/release/debug.o: /usr/include/bits/types.h +../build/release/debug.o: /usr/include/bits/typesizes.h /usr/include/libio.h +../build/release/debug.o: /usr/include/_G_config.h /usr/include/wchar.h +../build/release/debug.o: /usr/include/bits/stdio_lim.h +../build/release/debug.o: /usr/include/bits/sys_errlist.h +../build/release/debug.o: /usr/include/stdlib.h /usr/include/sys/types.h +../build/release/debug.o: /usr/include/time.h /usr/include/endian.h +../build/release/debug.o: /usr/include/bits/endian.h +../build/release/debug.o: /usr/include/bits/byteswap.h +../build/release/debug.o: /usr/include/sys/select.h +../build/release/debug.o: /usr/include/bits/select.h +../build/release/debug.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +../build/release/debug.o: /usr/include/sys/sysmacros.h +../build/release/debug.o: /usr/include/bits/pthreadtypes.h +../build/release/debug.o: /usr/include/alloca.h /usr/include/math.h +../build/release/debug.o: /usr/include/bits/huge_val.h +../build/release/debug.o: /usr/include/bits/huge_valf.h +../build/release/debug.o: /usr/include/bits/huge_vall.h +../build/release/debug.o: /usr/include/bits/inf.h /usr/include/bits/nan.h +../build/release/debug.o: /usr/include/bits/mathdef.h +../build/release/debug.o: /usr/include/bits/mathcalls.h /usr/include/assert.h +../build/release/debug.o: cuda-sim/ptx.tab.h gpgpu-sim/delayqueue.h +../build/release/debug.o: intersim/statwraper.h gpgpu-sim/gpu-misc.h +../build/release/debug.o: gpgpu-sim/stack.h abstract_hardware_model.h +../build/release/debug.o: gpgpu-sim/dram.h /usr/include/zlib.h +../build/release/debug.o: /usr/include/zconf.h /usr/include/unistd.h +../build/release/debug.o: /usr/include/bits/posix_opt.h +../build/release/debug.o: /usr/include/bits/confname.h /usr/include/getopt.h +../build/release/debug.o: gpgpu-sim/scoreboard.h gpgpu-sim/mem_fetch.h +../build/release/debug.o: gpgpu-sim/addrdec.h option_parser.h +../build/release/debug.o: gpgpu-sim/stats.h gpgpu-sim/gpu-cache.h +../build/release/debug.o: tr1_hash_map.h gpgpu-sim/gpu-sim.h +../build/release/debug.o: gpgpu-sim/shader.h cuda-sim/ptx_sim.h +../build/release/debug.o: cuda-sim/opcodes.h cuda-sim/opcodes.def +../build/release/debug.o: cuda-sim/memory.h cuda-sim/cuda-sim.h +../build/release/debug.o: cuda-sim/ptx_ir.h cuda-sim/ptx.tab.h +../build/release/debug.o: cuda-sim/ptx_sim.h /usr/include/string.h +../build/release/debug.o: /usr/include/xlocale.h +../build/release/gpgpusim_entrypoint.o: gpgpusim_entrypoint.h +../build/release/gpgpusim_entrypoint.o: abstract_hardware_model.h +../build/release/gpgpusim_entrypoint.o: /usr/include/time.h +../build/release/gpgpusim_entrypoint.o: /usr/include/bits/types.h +../build/release/gpgpusim_entrypoint.o: /usr/include/features.h +../build/release/gpgpusim_entrypoint.o: /usr/include/sys/cdefs.h +../build/release/gpgpusim_entrypoint.o: /usr/include/bits/wordsize.h +../build/release/gpgpusim_entrypoint.o: /usr/include/gnu/stubs.h +../build/release/gpgpusim_entrypoint.o: /usr/include/gnu/stubs-64.h +../build/release/gpgpusim_entrypoint.o: /usr/include/bits/typesizes.h +../build/release/gpgpusim_entrypoint.o: /usr/include/stdio.h +../build/release/gpgpusim_entrypoint.o: /usr/include/libio.h +../build/release/gpgpusim_entrypoint.o: /usr/include/_G_config.h +../build/release/gpgpusim_entrypoint.o: /usr/include/wchar.h +../build/release/gpgpusim_entrypoint.o: /usr/include/bits/stdio_lim.h +../build/release/gpgpusim_entrypoint.o: /usr/include/bits/sys_errlist.h +../build/release/gpgpusim_entrypoint.o: option_parser.h /usr/include/stdlib.h +../build/release/gpgpusim_entrypoint.o: /usr/include/sys/types.h +../build/release/gpgpusim_entrypoint.o: /usr/include/endian.h +../build/release/gpgpusim_entrypoint.o: /usr/include/bits/endian.h +../build/release/gpgpusim_entrypoint.o: /usr/include/bits/byteswap.h +../build/release/gpgpusim_entrypoint.o: /usr/include/sys/select.h +../build/release/gpgpusim_entrypoint.o: /usr/include/bits/select.h +../build/release/gpgpusim_entrypoint.o: /usr/include/bits/sigset.h +../build/release/gpgpusim_entrypoint.o: /usr/include/bits/time.h +../build/release/gpgpusim_entrypoint.o: /usr/include/sys/sysmacros.h +../build/release/gpgpusim_entrypoint.o: /usr/include/bits/pthreadtypes.h +../build/release/gpgpusim_entrypoint.o: /usr/include/alloca.h +../build/release/gpgpusim_entrypoint.o: cuda-sim/cuda-sim.h +../build/release/gpgpusim_entrypoint.o: abstract_hardware_model.h +../build/release/gpgpusim_entrypoint.o: cuda-sim/ptx_ir.h +../build/release/gpgpusim_entrypoint.o: /usr/include/assert.h +../build/release/gpgpusim_entrypoint.o: cuda-sim/ptx.tab.h cuda-sim/ptx_sim.h +../build/release/gpgpusim_entrypoint.o: tr1_hash_map.h cuda-sim/opcodes.h +../build/release/gpgpusim_entrypoint.o: cuda-sim/opcodes.def +../build/release/gpgpusim_entrypoint.o: cuda-sim/memory.h option_parser.h +../build/release/gpgpusim_entrypoint.o: cuda-sim/ptx_parser.h +../build/release/gpgpusim_entrypoint.o: gpgpu-sim/gpu-sim.h +../build/release/gpgpusim_entrypoint.o: gpgpu-sim/addrdec.h +../build/release/gpgpusim_entrypoint.o: gpgpu-sim/shader.h +../build/release/gpgpusim_entrypoint.o: gpgpu-sim/icnt_wrapper.h +../build/release/gpgpusim_entrypoint.o: stream_manager.h +../build/release/gpgpusim_entrypoint.o: /usr/include/pthread.h +../build/release/gpgpusim_entrypoint.o: /usr/include/sched.h +../build/release/gpgpusim_entrypoint.o: /usr/include/bits/sched.h +../build/release/gpgpusim_entrypoint.o: /usr/include/signal.h +../build/release/gpgpusim_entrypoint.o: /usr/include/bits/setjmp.h +../build/release/gpgpusim_entrypoint.o: /usr/include/semaphore.h +../build/release/gpgpusim_entrypoint.o: /usr/include/bits/semaphore.h +../build/release/option_parser.o: /usr/include/stdio.h +../build/release/option_parser.o: /usr/include/features.h +../build/release/option_parser.o: /usr/include/sys/cdefs.h +../build/release/option_parser.o: /usr/include/bits/wordsize.h +../build/release/option_parser.o: /usr/include/gnu/stubs.h +../build/release/option_parser.o: /usr/include/gnu/stubs-64.h +../build/release/option_parser.o: /usr/include/bits/types.h +../build/release/option_parser.o: /usr/include/bits/typesizes.h +../build/release/option_parser.o: /usr/include/libio.h +../build/release/option_parser.o: /usr/include/_G_config.h +../build/release/option_parser.o: /usr/include/wchar.h +../build/release/option_parser.o: /usr/include/bits/stdio_lim.h +../build/release/option_parser.o: /usr/include/bits/sys_errlist.h +../build/release/option_parser.o: /usr/include/stdlib.h +../build/release/option_parser.o: /usr/include/sys/types.h +../build/release/option_parser.o: /usr/include/time.h /usr/include/endian.h +../build/release/option_parser.o: /usr/include/bits/endian.h +../build/release/option_parser.o: /usr/include/bits/byteswap.h +../build/release/option_parser.o: /usr/include/sys/select.h +../build/release/option_parser.o: /usr/include/bits/select.h +../build/release/option_parser.o: /usr/include/bits/sigset.h +../build/release/option_parser.o: /usr/include/bits/time.h +../build/release/option_parser.o: /usr/include/sys/sysmacros.h +../build/release/option_parser.o: /usr/include/bits/pthreadtypes.h +../build/release/option_parser.o: /usr/include/alloca.h /usr/include/assert.h +../build/release/option_parser.o: /usr/include/string.h +../build/release/option_parser.o: /usr/include/xlocale.h option_parser.h +../build/release/stream_manager.o: stream_manager.h abstract_hardware_model.h +../build/release/stream_manager.o: /usr/include/pthread.h +../build/release/stream_manager.o: /usr/include/features.h +../build/release/stream_manager.o: /usr/include/sys/cdefs.h +../build/release/stream_manager.o: /usr/include/bits/wordsize.h +../build/release/stream_manager.o: /usr/include/gnu/stubs.h +../build/release/stream_manager.o: /usr/include/gnu/stubs-64.h +../build/release/stream_manager.o: /usr/include/endian.h +../build/release/stream_manager.o: /usr/include/bits/endian.h +../build/release/stream_manager.o: /usr/include/bits/byteswap.h +../build/release/stream_manager.o: /usr/include/sched.h +../build/release/stream_manager.o: /usr/include/bits/types.h +../build/release/stream_manager.o: /usr/include/bits/typesizes.h +../build/release/stream_manager.o: /usr/include/time.h +../build/release/stream_manager.o: /usr/include/bits/sched.h +../build/release/stream_manager.o: /usr/include/signal.h +../build/release/stream_manager.o: /usr/include/bits/sigset.h +../build/release/stream_manager.o: /usr/include/bits/pthreadtypes.h +../build/release/stream_manager.o: /usr/include/bits/setjmp.h +../build/release/stream_manager.o: gpgpusim_entrypoint.h cuda-sim/cuda-sim.h +../build/release/stream_manager.o: abstract_hardware_model.h +../build/release/stream_manager.o: /usr/include/stdlib.h +../build/release/stream_manager.o: /usr/include/sys/types.h +../build/release/stream_manager.o: /usr/include/sys/select.h +../build/release/stream_manager.o: /usr/include/bits/select.h +../build/release/stream_manager.o: /usr/include/bits/time.h +../build/release/stream_manager.o: /usr/include/sys/sysmacros.h +../build/release/stream_manager.o: /usr/include/alloca.h gpgpu-sim/gpu-sim.h +../build/release/stream_manager.o: gpgpu-sim/addrdec.h /usr/include/stdio.h +../build/release/stream_manager.o: /usr/include/libio.h +../build/release/stream_manager.o: /usr/include/_G_config.h +../build/release/stream_manager.o: /usr/include/wchar.h +../build/release/stream_manager.o: /usr/include/bits/stdio_lim.h +../build/release/stream_manager.o: /usr/include/bits/sys_errlist.h +../build/release/stream_manager.o: /usr/include/assert.h option_parser.h +../build/release/stream_manager.o: gpgpu-sim/shader.h diff --git a/src/cuda-sim/Makefile b/src/cuda-sim/Makefile index d47f99c..939aa89 100644 --- a/src/cuda-sim/Makefile +++ b/src/cuda-sim/Makefile @@ -177,6 +177,7 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c ../../build/release/cuda-sim/cuda_device_printf.o: opcodes.h opcodes.def ../../build/release/cuda-sim/cuda_device_printf.o: memory.h ../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/string.h +../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/xlocale.h ../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/stdio.h ../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/libio.h ../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/_G_config.h @@ -211,6 +212,7 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c ../../build/release/cuda-sim/cuda-sim.o: ../tr1_hash_map.h opcodes.h ../../build/release/cuda-sim/cuda-sim.o: opcodes.def memory.h ../../build/release/cuda-sim/cuda-sim.o: /usr/include/string.h +../../build/release/cuda-sim/cuda-sim.o: /usr/include/xlocale.h ../../build/release/cuda-sim/cuda-sim.o: /usr/include/stdio.h ../../build/release/cuda-sim/cuda-sim.o: /usr/include/libio.h ../../build/release/cuda-sim/cuda-sim.o: /usr/include/_G_config.h @@ -225,6 +227,10 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c ../../build/release/cuda-sim/cuda-sim.o: ../gpgpu-sim/shader.h ../../build/release/cuda-sim/cuda-sim.o: /usr/include/math.h ../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/huge_val.h +../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/huge_valf.h +../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/huge_vall.h +../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/inf.h +../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/nan.h ../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/mathdef.h ../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/mathcalls.h ../../build/release/cuda-sim/cuda-sim.o: ../cuda-sim/ptx.tab.h @@ -272,6 +278,7 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c ../../build/release/cuda-sim/instructions.o: ../tr1_hash_map.h opcodes.h ../../build/release/cuda-sim/instructions.o: opcodes.def memory.h ../../build/release/cuda-sim/instructions.o: /usr/include/string.h +../../build/release/cuda-sim/instructions.o: /usr/include/xlocale.h ../../build/release/cuda-sim/instructions.o: /usr/include/stdio.h ../../build/release/cuda-sim/instructions.o: /usr/include/libio.h ../../build/release/cuda-sim/instructions.o: /usr/include/_G_config.h @@ -281,6 +288,10 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c ../../build/release/cuda-sim/instructions.o: ../option_parser.h ../../build/release/cuda-sim/instructions.o: /usr/include/math.h ../../build/release/cuda-sim/instructions.o: /usr/include/bits/huge_val.h +../../build/release/cuda-sim/instructions.o: /usr/include/bits/huge_valf.h +../../build/release/cuda-sim/instructions.o: /usr/include/bits/huge_vall.h +../../build/release/cuda-sim/instructions.o: /usr/include/bits/inf.h +../../build/release/cuda-sim/instructions.o: /usr/include/bits/nan.h ../../build/release/cuda-sim/instructions.o: /usr/include/bits/mathdef.h ../../build/release/cuda-sim/instructions.o: /usr/include/bits/mathcalls.h ../../build/release/cuda-sim/instructions.o: /usr/include/fenv.h @@ -315,6 +326,7 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c ../../build/release/cuda-sim/memory.o: /usr/include/gnu/stubs.h ../../build/release/cuda-sim/memory.o: /usr/include/gnu/stubs-64.h ../../build/release/cuda-sim/memory.o: /usr/include/string.h +../../build/release/cuda-sim/memory.o: /usr/include/xlocale.h ../../build/release/cuda-sim/memory.o: /usr/include/stdio.h ../../build/release/cuda-sim/memory.o: /usr/include/bits/types.h ../../build/release/cuda-sim/memory.o: /usr/include/bits/typesizes.h @@ -363,6 +375,7 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c ../../build/release/cuda-sim/ptx_ir.o: ../tr1_hash_map.h opcodes.h ../../build/release/cuda-sim/ptx_ir.o: opcodes.def memory.h ../../build/release/cuda-sim/ptx_ir.o: /usr/include/string.h +../../build/release/cuda-sim/ptx_ir.o: /usr/include/xlocale.h ../../build/release/cuda-sim/ptx_ir.o: /usr/include/stdio.h ../../build/release/cuda-sim/ptx_ir.o: /usr/include/libio.h ../../build/release/cuda-sim/ptx_ir.o: /usr/include/_G_config.h @@ -397,6 +410,7 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c ../../build/release/cuda-sim/ptx_loader.o: ../tr1_hash_map.h opcodes.h ../../build/release/cuda-sim/ptx_loader.o: opcodes.def memory.h ../../build/release/cuda-sim/ptx_loader.o: /usr/include/string.h +../../build/release/cuda-sim/ptx_loader.o: /usr/include/xlocale.h ../../build/release/cuda-sim/ptx_loader.o: /usr/include/stdio.h ../../build/release/cuda-sim/ptx_loader.o: /usr/include/libio.h ../../build/release/cuda-sim/ptx_loader.o: /usr/include/_G_config.h @@ -436,6 +450,7 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c ../../build/release/cuda-sim/ptx_parser.o: ../tr1_hash_map.h opcodes.h ../../build/release/cuda-sim/ptx_parser.o: opcodes.def memory.h ../../build/release/cuda-sim/ptx_parser.o: /usr/include/string.h +../../build/release/cuda-sim/ptx_parser.o: /usr/include/xlocale.h ../../build/release/cuda-sim/ptx_parser.o: /usr/include/stdio.h ../../build/release/cuda-sim/ptx_parser.o: /usr/include/libio.h ../../build/release/cuda-sim/ptx_parser.o: /usr/include/_G_config.h @@ -469,6 +484,7 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c ../../build/release/cuda-sim/ptx_sim.o: /usr/include/assert.h opcodes.h ../../build/release/cuda-sim/ptx_sim.o: opcodes.def memory.h ../../build/release/cuda-sim/ptx_sim.o: /usr/include/string.h +../../build/release/cuda-sim/ptx_sim.o: /usr/include/xlocale.h ../../build/release/cuda-sim/ptx_sim.o: /usr/include/stdio.h ../../build/release/cuda-sim/ptx_sim.o: /usr/include/libio.h ../../build/release/cuda-sim/ptx_sim.o: /usr/include/_G_config.h @@ -481,6 +497,10 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c ../../build/release/cuda-sim/ptx_sim.o: ../gpgpu-sim/shader.h ../../build/release/cuda-sim/ptx_sim.o: /usr/include/math.h ../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/huge_val.h +../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/huge_valf.h +../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/huge_vall.h +../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/inf.h +../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/nan.h ../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/mathdef.h ../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/mathcalls.h ../../build/release/cuda-sim/ptx_sim.o: ../cuda-sim/ptx.tab.h @@ -527,6 +547,7 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c ../../build/release/cuda-sim/ptx-stats.o: ../tr1_hash_map.h opcodes.h ../../build/release/cuda-sim/ptx-stats.o: opcodes.def memory.h ../../build/release/cuda-sim/ptx-stats.o: /usr/include/string.h +../../build/release/cuda-sim/ptx-stats.o: /usr/include/xlocale.h ../../build/release/cuda-sim/ptx-stats.o: /usr/include/stdio.h ../../build/release/cuda-sim/ptx-stats.o: /usr/include/libio.h ../../build/release/cuda-sim/ptx-stats.o: /usr/include/_G_config.h diff --git a/src/cuda-sim/cuda-sim.cc b/src/cuda-sim/cuda-sim.cc index e3e0245..027c1de 100644 --- a/src/cuda-sim/cuda-sim.cc +++ b/src/cuda-sim/cuda-sim.cc @@ -849,12 +849,14 @@ static unsigned get_tex_datasize( const ptx_instruction *pI, ptx_thread_info *th void ptx_thread_info::ptx_exec_inst( warp_inst_t &inst, unsigned lane_id ) { + bool skip = false; int op_classification = 0; addr_t pc = next_instr(); assert( pc == inst.pc ); // make sure timing model and functional model are in sync const ptx_instruction *pI = m_func_info->get_instruction(pc); set_npc( pc + pI->inst_size() ); + try { @@ -866,12 +868,16 @@ void ptx_thread_info::ptx_exec_inst( warp_inst_t &inst, unsigned lane_id ) printf("attempted to execute instruction on a thread that is already done.\n"); assert(0); } + if ( g_debug_execution >= 6 || m_gpu->get_config().get_ptx_inst_debug_to_file()) { if ( (g_debug_thread_uid==0) || (get_uid() == (unsigned)g_debug_thread_uid) ) { - clear_modifiedregs(); + + clear_modifiedregs(); enable_debug_trace(); } } + + if( pI->has_pred() ) { const operand_info &pred = pI->get_pred(); ptx_reg_t pred_value = get_operand_value(pred, pred, PRED_TYPE, this, 0); @@ -881,6 +887,7 @@ void ptx_thread_info::ptx_exec_inst( warp_inst_t &inst, unsigned lane_id ) skip = !pred_lookup(pI->get_pred_mod(), pred_value.pred & 0x000F); } } + if( skip ) { inst.set_not_active(lane_id); } else { @@ -899,11 +906,13 @@ void ptx_thread_info::ptx_exec_inst( warp_inst_t &inst, unsigned lane_id ) } delete pJ; pI = pI_saved; - + // Run exit instruction if exit option included if(pI->is_exit()) exit_impl(pI,this); } + + const gpgpu_functional_sim_config &config = m_gpu->get_config(); @@ -932,7 +941,7 @@ void ptx_thread_info::ptx_exec_inst( warp_inst_t &inst, unsigned lane_id ) m_last_set_operand_value.u64 ); fflush(stdout); } - + addr_t insn_memaddr = 0xFEEBDAED; memory_space_t insn_space = undefined_space; _memory_op_t insn_memory_op = no_memory_op; @@ -944,7 +953,8 @@ void ptx_thread_info::ptx_exec_inst( warp_inst_t &inst, unsigned lane_id ) insn_data_size = datatype2size(to_type); insn_memory_op = pI->has_memory_read() ? memory_load : memory_store; } - + + if ( pI->get_opcode() == ATOM_OP ) { insn_memaddr = last_eaddr(); insn_space = last_space(); @@ -1005,7 +1015,7 @@ void ptx_thread_info::ptx_exec_inst( warp_inst_t &inst, unsigned lane_id ) g_ptx_sim_num_insn, ctaid.x,ctaid.y,ctaid.z,tid.x,tid.y,tid.z ); fflush(stdout); } - + // "Return values" if(!skip) { inst.space = insn_space; @@ -1019,6 +1029,7 @@ void ptx_thread_info::ptx_exec_inst( warp_inst_t &inst, unsigned lane_id ) printf("GPGPU-Sim PTX: '%s'\n", pI->get_source() ); abort(); } + } void set_param_gpgpu_num_shaders(int num_shaders) @@ -1369,97 +1380,310 @@ ptx_cta_info *g_func_cta_info = NULL; #define MAX(a,b) (((a)>(b))?(a):(b)) +/* +This function simulates the CUDA code functionally, it takes a kernel_info_t parameter +which holds the data for the CUDA kernel to be executed +*/ + + void gpgpu_cuda_ptx_sim_main_func( kernel_info_t &kernel ) { printf("GPGPU-Sim: Performing Functional Simulation...\n"); + + - time_t end_time, elapsed_time, days, hrs, minutes, sec; - function_info *finfo = kernel.entry(); + //storing kernel function information?? what it has + function_info *functionInfo = kernel.entry(); + + //defining a shared memory space for across the kernel blocks (size as param?) memory_space *shared_mem = new memory_space_impl<16*1024>("shared",4); - std::map<unsigned,memory_space*> lm_lookup; + //this table is to be used to store local memories for each thread indexed by their Idx + std::map<unsigned,memory_space*> localMemoriesTable; + //a global variable holds information on a block? if ( g_func_cta_info == NULL ) g_func_cta_info = new ptx_cta_info(0); + + //the main simulation loop, works through all the CTAs defined in the given kernel while( !kernel.no_more_ctas_to_run() ) { - std::list<ptx_thread_info *> active_threads; - std::list<ptx_thread_info *> blocked_threads; - dim3 ctaid3d = kernel.get_next_cta_id(); + + + //holds the warps to be executed in the current CTA + std::vector<std::vector<ptx_thread_info*>> ctaWarpsList; + std::vector<std::stack<active_mask_t>> ctaWarpBranchDivergenceMaskStacksList; + std::vector<std::stack<address_type>> ctaRpcsStackList; + //g_func_cta_info->num_threads(); + //int numberOfWarps = ceil(g_func_cta_info->num_threads()/warpSize); + + + //getting the current CTA id from the kernel grid of CTAs + dim3 CTA_Id3d = kernel.get_next_cta_id(); kernel.increment_cta_id(); + + //here we check if there is any threads are still running from previous CTA, and also reset variables + g_func_cta_info->check_cta_thread_status_and_reset(); + + //the loop initialize a local memory for each thread in the current CTA + //and add threads to liveThreads list so they will be executed in the next loop + std::vector<ptx_thread_info*> newWarp; + + //ctaLiveThreads used to track the number of threads executing and used to terminate a CTA execution when all the threads have executed successfully + int ctaLiveThreads=0; + extern gpgpu_sim *g_the_gpu; + + while( kernel.more_threads_in_cta() ) { + - g_func_cta_info->check_cta_thread_status_and_reset(); - while( kernel.more_threads_in_cta() ) { - memory_space *local_mem = NULL; - ptx_thread_info *thd = new ptx_thread_info(kernel); - dim3 tid3d = kernel.get_next_thread_id_3d(); - unsigned lm_idx = kernel.get_next_thread_id(); - kernel.increment_thread_id(); - std::map<unsigned,memory_space*>::iterator lm=lm_lookup.find(lm_idx); - if ( lm == lm_lookup.end() ) { - char buf[1024]; - snprintf(buf,1024,"local_(%u,%u,%u)", tid3d.x, tid3d.y, tid3d.z ); - local_mem = new memory_space_impl<32>(buf,32); - lm_lookup[lm_idx] = local_mem; - } else { - local_mem = lm->second; - } + memory_space *threadLocalMemory = NULL; + ptx_thread_info *newThread = new ptx_thread_info(kernel); + dim3 newThreadId3 = kernel.get_next_thread_id_3d(); + unsigned newThreadIdx = kernel.get_next_thread_id(); + kernel.increment_thread_id(); - thd->set_info(finfo); - thd->set_nctaid(ctaid3d); - thd->set_ntid(kernel.get_cta_dim()); - thd->set_ctaid(ctaid3d); - thd->set_tid(tid3d); - thd->set_valid(); - thd->m_shared_mem = shared_mem; - thd->m_local_mem = local_mem; - thd->m_cta_info = g_func_cta_info; - g_func_cta_info->add_thread(thd); - active_threads.push_back(thd); - } + //adding new thread local memory to the list of local memories table + std::map<unsigned,memory_space*>::iterator localMemoryPlace=localMemoriesTable.find(newThreadIdx); + if ( localMemoryPlace == localMemoriesTable.end() ) { + char buf[1024]; + snprintf(buf,1024,"local_(%u,%u,%u)", newThreadId3.x, newThreadId3.y, newThreadId3.z ); + threadLocalMemory = new memory_space_impl<32>(buf,32); + localMemoriesTable[newThreadIdx] = threadLocalMemory; + } else { + threadLocalMemory = localMemoryPlace->second; + } + //new thread initialization + newThread->init( g_the_gpu, NULL, NULL, NULL, NULL, NULL ); + newThread->set_info(functionInfo); + newThread->set_nctaid(CTA_Id3d); + newThread->set_ntid(kernel.get_cta_dim()); + newThread->set_ctaid(CTA_Id3d); + newThread->set_tid(newThreadId3); + newThread->set_valid(); + newThread->m_shared_mem = shared_mem; + newThread->m_local_mem = threadLocalMemory; + newThread->m_cta_info = g_func_cta_info; + g_func_cta_info->add_thread(newThread); + + //adding the new thread to the CTA warp threads list so will be executed next loop + newWarp.push_back(newThread); + if(newWarp.size()==MAX_WARP_SIZE) + { + ctaWarpsList.push_back(newWarp); + + active_mask_t bools; + + + for(int i=0;i<newWarp.size();i++) + { + bools[i]= true; + } + + std::stack<active_mask_t> boolStack; + boolStack.push(bools); + + ctaWarpBranchDivergenceMaskStacksList.push_back(boolStack); + + std::stack<address_type> rpcStack; + rpcStack.push(-1); + ctaRpcsStackList.push_back(rpcStack); + + ctaLiveThreads+=newWarp.size(); + + newWarp.clear(); + } - while ( !(active_threads.empty() && blocked_threads.empty()) ) { - // while there are still threads left to execute in this CTA - ptx_thread_info *thread = NULL; + } - if ( !active_threads.empty() ) { - thread = active_threads.front(); - active_threads.pop_front(); - } else { - active_threads = blocked_threads; - blocked_threads.clear(); - std::list<ptx_thread_info *>::iterator a=active_threads.begin(); - for ( ; a != active_threads.end(); a++ ) { - ptx_thread_info *thd = *a; - thd->clear_barrier(); - } - g_func_cta_info->release_barrier(); - } + if(newWarp.size()!=0) + { + ctaWarpsList.push_back(newWarp); + newWarp.clear(); - while ( thread != NULL ) { - if ( thread->is_at_barrier() ) { - blocked_threads.push_back(thread); - thread = NULL; - break; - } - if ( thread->is_done() ) { - thread->m_cta_info->register_deleted_thread(thread); - delete thread; - thread = NULL; - break; - } - abort(); // need to exec. inst - } + active_mask_t bools; + + for(int i=0;i<newWarp.size();i++) + { + bools[i]= true; + } + std::stack<active_mask_t> boolStack; + boolStack.push(bools); + ctaWarpBranchDivergenceMaskStacksList.push_back(boolStack); + + std::stack<address_type> rpcStack; + rpcStack.push(-1); + ctaRpcsStackList.push_back(rpcStack); + + ctaLiveThreads+=newWarp.size(); } - } + + + + //after this loop the ctaWarps holds a list of warps to be executed + + //This loop will keep executing instructions in liveThreads list until they are all done + while (true) { + + //a pointer used as a temp variable + ptx_thread_info *currentThread = NULL; + + //for each warp + for(int i=0;i<ctaWarpsList.size();i++) + { + //execute the warp threads till a barrier met + + printf("Executing warp %d out of %d and threads count is %d \n",i,ctaWarpsList.size(), ctaLiveThreads); + while(true){ + + //for each warp execute threads until blocked or done + active_mask_t takenBranches; + bool atBarrier =false; + bool stop=false; + + // printf("In warp %d of size %d\n ",i,ctaWarpsList[i].size()); + int threadsDoneInThisWarp =0; + //execute each thread in a warp one instruction at a time + for(int j=0;j<ctaWarpsList[i].size();j++) + { + + currentThread= ctaWarpsList[i][j]; + + //if the thread is done or disabled skip + if(currentThread->is_done() ||ctaWarpBranchDivergenceMaskStacksList[i].top()[j]==0 ) + { + threadsDoneInThisWarp++; + continue; + } + + + currentThread->clear_barrier(); + //execute_thread(currentThread); + // printf(" %d ",j); + + + const warp_inst_t* w = ptx_fetch_inst(currentThread->get_pc()); + warp_inst_t * warpInstruction = new warp_inst_t(); + *warpInstruction = *w; + + + + active_mask_t mask; + mask[0]=1; + + //warpInstruction->set_active(ctaWarpBranchDivergenceMaskStacksList[i].top()); + warpInstruction->set_active(mask); + currentThread->ptx_fetch_inst(*warpInstruction); + //currentThread->get_inst()->print_insn(); + currentThread->ptx_exec_inst(*warpInstruction,0); + + + //check this + if(warpInstruction->isatomic() && !warpInstruction->empty() && (warpInstruction->is_load()|| warpInstruction->is_store())) + warpInstruction->do_atomic(); + + delete warpInstruction; + + if(currentThread->branch_taken()) + { + takenBranches[j] = currentThread->branch_taken(); + // printf("found a branch \n"); + //stop = true; + //abort(); + } + + if(currentThread->is_at_barrier()) + { + printf("found barrier \n"); + atBarrier = true; + } + + if(currentThread->is_done()) + { + //should do the cleaning later + // currentThread->m_cta_info->register_deleted_thread(currentThread); + // delete currentThread; + ctaLiveThreads--; + printf("some one is done\n"); + } + } + // printf("\n"); + + + //detecting branch divergence + bool taken = false; + bool notTaken=false; + + for(int j=0;j<ctaWarpsList[i].size();j++) + { + if(takenBranches[j]==true) + taken=true; + else if(takenBranches[j]==false) + notTaken=true; + } + //if both condition represented then there are a branch divergence + if(taken&& notTaken) + { + printf("Branch here\n"); + abort(); + ctaRpcsStackList[i].push(currentThread->get_rpc()); + ctaRpcsStackList[i].push(currentThread->get_rpc()); + active_mask_t notTakenBranches; + for(int k=0;k<ctaWarpsList.size();k++) + { + notTakenBranches[k] =!takenBranches[k]; + } + ctaWarpBranchDivergenceMaskStacksList[i].push(notTakenBranches); + ctaWarpBranchDivergenceMaskStacksList[i].push(takenBranches); + //continue so we wont delete takenBranhes and no need to check for barriers after as well + continue; + // printf("memory\n"); + } + + //doing branch convergence if it is the time to + else if(ctaRpcsStackList[i].top()==currentThread->get_pc()) + { + ctaRpcsStackList[i].pop(); + ctaWarpBranchDivergenceMaskStacksList[i].pop(); + + } + + if(atBarrier || threadsDoneInThisWarp==ctaWarpsList[i].size()) + break; + + + } + } + + if(ctaLiveThreads==0) + break; + + } + } + + //cleaning need to recheck here add cleaning deleted threads + delete shared_mem; + std::map<unsigned,memory_space*>::iterator i = localMemoriesTable.begin(); + for(; i!= localMemoriesTable.end();i++) + { + delete i->second; + } + //delete localMemoriesTable; + printf( "GPGPU-Sim: Done functional simulation (%u instructions simulated).\n", g_ptx_sim_num_insn ); if ( gpgpu_ptx_instruction_classification ) { StatDisp( g_inst_classification_stat[g_ptx_kernel_count]); StatDisp ( g_inst_op_classification_stat[g_ptx_kernel_count]); } + + //time_t variables used to calculate the total simulation time + //the start time of simulation is hold by the global variable g_simulation_starttime + //g_simulation_starttime is initilized by gpgpu_ptx_sim_init_perf() in gpgpusim_entrypoint.cc upon starting gpgpu-sim + time_t end_time, elapsed_time, days, hrs, minutes, sec; end_time = time((time_t *)NULL); elapsed_time = MAX(end_time - g_simulation_starttime, 1); + + //calculating and printing simulation time in terms of days, hours, minutes and seconds days = elapsed_time/(3600*24); hrs = elapsed_time/3600 - 24*days; minutes = elapsed_time/60 - 60*(hrs + 24*days); @@ -1472,6 +1696,26 @@ void gpgpu_cuda_ptx_sim_main_func( kernel_info_t &kernel ) fflush(stdout); } + +void execute_thread(ptx_thread_info* pThread) +{ +// int i1, i2, i3, i4, o1, o2, o3, o4; +// int vectorin, vectorout; +// unsigned op_type; +// addr_t addr; +// unsigned space; +// int arch_reg[MAX_REG_OPERANDS] = { -1 }; +// unsigned data_size; +// dram_callback_t callback; +// unsigned warp_active_mask = (unsigned)-1; // vote instruction with diverged warps won't execute correctly +// in functional simulation mode +// +// g_func_info->ptx_decode_inst( pThread, &op_type, &i1, &i2, &i3, &i4, &o1, &o2, &o3, &o4, &vectorin, &vectorout, arch_reg ); +// g_func_info->ptx_exec_inst( pThread, &addr, &space, &data_size, &callback, warp_active_mask ); +} +//////////////////////////////////////////////////////////////////// + + unsigned translate_pc_to_ptxlineno(unsigned pc) { // this function assumes that the kernel fits inside a single PTX file diff --git a/src/stream_manager.cc b/src/stream_manager.cc index 85778c9..1673e98 100644 --- a/src/stream_manager.cc +++ b/src/stream_manager.cc @@ -152,7 +152,8 @@ void stream_operation::do_operation( gpgpu_sim *gpu ) case stream_kernel_launch: if( gpu->can_start_kernel() ) { printf("kernel \'%s\' transfer to GPU hardware scheduler\n", m_kernel->name().c_str() ); - if( m_sim_mode ) + // if( m_sim_mode ) + if(true) gpgpu_cuda_ptx_sim_main_func( *m_kernel ); else gpu->launch( m_kernel ); |
