From 49c6e2fb48c1ac809bfa5672acd0cad22a550323 Mon Sep 17 00:00:00 2001 From: Matthew Poremba Date: Fri, 13 May 2022 10:02:18 -0700 Subject: [PATCH] configs: Add example scripts for HIP apps for GPUFS This adds configuration scripts to run the HIP cookbook, HIP samples, and HIP versions of rodinia 3.0. Cleaned up the other vega10_kvm example script. Change-Id: I26de50426e7e68741b13de0c4b15b08f0789a062 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/59670 Maintainer: Jason Lowe-Power Tested-by: kokoro Reviewed-by: Jason Lowe-Power --- configs/example/gpufs/hip_cookbook.py | 131 ++++++++++++++++++++++++ configs/example/gpufs/hip_rodinia.py | 139 ++++++++++++++++++++++++++ configs/example/gpufs/hip_samples.py | 129 ++++++++++++++++++++++++ configs/example/gpufs/vega10_kvm.py | 6 -- 4 files changed, 399 insertions(+), 6 deletions(-) create mode 100644 configs/example/gpufs/hip_cookbook.py create mode 100644 configs/example/gpufs/hip_rodinia.py create mode 100644 configs/example/gpufs/hip_samples.py diff --git a/configs/example/gpufs/hip_cookbook.py b/configs/example/gpufs/hip_cookbook.py new file mode 100644 index 0000000000..cd0e2845a0 --- /dev/null +++ b/configs/example/gpufs/hip_cookbook.py @@ -0,0 +1,131 @@ +# Copyright (c) 2022 Advanced Micro Devices, Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +import m5 +import runfs +import tempfile +import argparse +import sys +import os + +from amd import AmdGPUOptions +from common import Options +from common import GPUTLBOptions +from ruby import Ruby + +cookbook_runscript = '''\ +export LD_LIBRARY_PATH=/opt/rocm/lib:$LD_LIBRARY_PATH +export HSA_ENABLE_SDMA=0 +dmesg -n3 +dd if=/root/roms/vega10.rom of=/dev/mem bs=1k seek=768 count=128 +if [ ! -f /lib/modules/`uname -r`/updates/dkms/amdgpu.ko ]; then + echo "ERROR: Missing DKMS package for kernel `uname -r`. Exiting gem5." + /sbin/m5 exit +fi +modprobe -v amdgpu ip_block_mask=0xff ppfeaturemask=0 dpm=0 audio=0 +echo "Running {}" +cd /opt/rocm/hip/samples/2_Cookbook/{}/ +make clean +make +/sbin/m5 exit +''' + +def addCookbookOptions(parser): + parser.add_argument("-a", "--app", default=None, + choices=['0_MatrixTranspose', + '1_hipEvent', + '3_shared_memory', + '4_shfl', + '5_2dshfl', + '6_dynamic_shared', + '7_streams', + '8_peer2peer', + '9_unroll', + '10_inline_asm', + '11_texture_driver', + '13_occupancy', + '14_gpu_arch', + '15_static_library'], + help="GPU application to run") + parser.add_argument("-o", "--opts", default="", + help="GPU application arguments") + +if __name__ == "__m5_main__": + parser = argparse.ArgumentParser() + runfs.addRunFSOptions(parser) + Options.addCommonOptions(parser) + AmdGPUOptions.addAmdGPUOptions(parser) + Ruby.define_options(parser) + GPUTLBOptions.tlb_options(parser) + addCookbookOptions(parser) + + # Parse now so we can override options + args = parser.parse_args() + + # Create temp script to run application + if args.app is None: + print("No application given. Use %s -a " % sys.argv[0]) + sys.exit(1) + elif args.kernel is None: + print("No kernel path given. Use %s --kernel " % sys.argv[0]) + sys.exit(1) + elif args.disk_image is None: + print("No disk path given. Use %s --disk-image " % sys.argv[0]) + sys.exit(1) + elif args.gpu_mmio_trace is None: + print("No MMIO trace path. Use %s --gpu-mmio-trace " + % sys.argv[0]) + sys.exit(1) + + _, tempRunscript = tempfile.mkstemp() + with open(tempRunscript, 'w') as b64file: + runscriptStr = cookbook_runscript.format(args.app, args.app) + b64file.write(runscriptStr) + + if args.second_disk == None: + args.second_disk = args.disk_image + + # Defaults for Vega10 + args.ruby = True + args.cpu_type = 'X86KvmCPU' + args.num_cpus = 1 + args.mem_size = '3GB' + args.dgpu = True + args.dgpu_mem_size = '16GB' + args.dgpu_start = '0GB' + args.checkpoint_restore = 0 + args.disjoint = True + args.timing_gpu = True + args.script = tempRunscript + args.dgpu_xor_low_bit = 0 + + print(args.disk_image) + + # Run gem5 + runfs.runGpuFSSystem(args) diff --git a/configs/example/gpufs/hip_rodinia.py b/configs/example/gpufs/hip_rodinia.py new file mode 100644 index 0000000000..3d7cef477f --- /dev/null +++ b/configs/example/gpufs/hip_rodinia.py @@ -0,0 +1,139 @@ +# Copyright (c) 2022 Advanced Micro Devices, Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +import m5 +import runfs +import base64 +import tempfile +import argparse +import sys +import os + +from amd import AmdGPUOptions +from common import Options +from common import GPUTLBOptions +from ruby import Ruby + +rodinia_runscript = '''\ +export LD_LIBRARY_PATH=/opt/rocm/lib:$LD_LIBRARY_PATH +export HSA_ENABLE_SDMA=0 +dmesg -n3 +dd if=/root/roms/vega10.rom of=/dev/mem bs=1k seek=768 count=128 +if [ ! -f /lib/modules/`uname -r`/updates/dkms/amdgpu.ko ]; then + echo "ERROR: Missing DKMS package for kernel `uname -r`. Exiting gem5." + /sbin/m5 exit +fi +modprobe -v amdgpu ip_block_mask=0xff ppfeaturemask=0 dpm=0 audio=0 +echo "Running {}" +cd /home/gem5/HIP-Examples/rodinia_3.0/hip/{}/ +make clean +make +make test +/sbin/m5 exit +''' + +def addRodiniaOptions(parser): + parser.add_argument("-a", "--app", default=None, + choices=['b+tree', + 'backprop', + 'bfs', + 'cfd', + 'dwt2d', + 'gaussian', + 'heartwall', + 'hotspot', + 'hybridsort', + 'kmeans', + 'lavaMD', + 'leukocyte', + 'lud', + 'myocyte', + 'nn', + 'nw', + 'particlefilter', + 'pathfinder', + 'srad', + 'streamcluster'], + help="GPU application to run") + parser.add_argument("-o", "--opts", default="", + help="GPU application arguments") + +if __name__ == "__m5_main__": + parser = argparse.ArgumentParser() + runfs.addRunFSOptions(parser) + Options.addCommonOptions(parser) + AmdGPUOptions.addAmdGPUOptions(parser) + Ruby.define_options(parser) + GPUTLBOptions.tlb_options(parser) + addRodiniaOptions(parser) + + # Parse now so we can override options + args = parser.parse_args() + + # Create temp script to run application + if args.app is None: + print("No application given. Use %s -a " % sys.argv[0]) + sys.exit(1) + elif args.kernel is None: + print("No kernel path given. Use %s --kernel " % sys.argv[0]) + sys.exit(1) + elif args.disk_image is None: + print("No disk path given. Use %s --disk-image " % sys.argv[0]) + sys.exit(1) + elif args.gpu_mmio_trace is None: + print("No MMIO trace path. Use %s --gpu-mmio-trace " + % sys.argv[0]) + sys.exit(1) + + _, tempRunscript = tempfile.mkstemp() + with open(tempRunscript, 'w') as b64file: + runscriptStr = rodinia_runscript.format(args.app, args.app) + b64file.write(runscriptStr) + + if args.second_disk == None: + args.second_disk = args.disk_image + + # Defaults for Vega10 + args.ruby = True + args.cpu_type = 'X86KvmCPU' + args.num_cpus = 1 + args.mem_size = '3GB' + args.dgpu = True + args.dgpu_mem_size = '16GB' + args.dgpu_start = '0GB' + args.checkpoint_restore = 0 + args.disjoint = True + args.timing_gpu = True + args.script = tempRunscript + args.dgpu_xor_low_bit = 0 + + print(args.disk_image) + + # Run gem5 + runfs.runGpuFSSystem(args) diff --git a/configs/example/gpufs/hip_samples.py b/configs/example/gpufs/hip_samples.py new file mode 100644 index 0000000000..b3a66a7717 --- /dev/null +++ b/configs/example/gpufs/hip_samples.py @@ -0,0 +1,129 @@ +# Copyright (c) 2022 Advanced Micro Devices, Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +import m5 +import runfs +import tempfile +import argparse +import sys +import os + +from amd import AmdGPUOptions +from common import Options +from common import GPUTLBOptions +from ruby import Ruby + +samples_runscript = '''\ +export LD_LIBRARY_PATH=/opt/rocm/lib:$LD_LIBRARY_PATH +export HSA_ENABLE_SDMA=0 +dmesg -n3 +dd if=/root/roms/vega10.rom of=/dev/mem bs=1k seek=768 count=128 +if [ ! -f /lib/modules/`uname -r`/updates/dkms/amdgpu.ko ]; then + echo "ERROR: Missing DKMS package for kernel `uname -r`. Exiting gem5." + /sbin/m5 exit +fi +modprobe -v amdgpu ip_block_mask=0xff ppfeaturemask=0 dpm=0 audio=0 +echo "Running {}" +cd /home/gem5/HIP-Examples/HIP-Examples-Applications/{}/ +make clean +make +/sbin/m5 exit +''' + +def addSamplesOptions(parser): + parser.add_argument("-a", "--app", default=None, + choices=['BinomialOption', + 'BitonicSort', + 'FastWalshTransform', + 'FloydWarshall', + 'HelloWorld', + 'Histogram', + 'MatrixMultiplication', + 'PrefixSum', + 'RecursiveGaussian', + 'SimpleConvolution', + 'dct', + 'dwtHaar1D'], + help="GPU application to run") + parser.add_argument("-o", "--opts", default="", + help="GPU application arguments") + +if __name__ == "__m5_main__": + parser = argparse.ArgumentParser() + runfs.addRunFSOptions(parser) + Options.addCommonOptions(parser) + AmdGPUOptions.addAmdGPUOptions(parser) + Ruby.define_options(parser) + GPUTLBOptions.tlb_options(parser) + addSamplesOptions(parser) + + # Parse now so we can override options + args = parser.parse_args() + + # Create temp script to run application + if args.app is None: + print("No application given. Use %s -a " % sys.argv[0]) + sys.exit(1) + elif args.kernel is None: + print("No kernel path given. Use %s --kernel " % sys.argv[0]) + sys.exit(1) + elif args.disk_image is None: + print("No disk path given. Use %s --disk-image " % sys.argv[0]) + sys.exit(1) + elif args.gpu_mmio_trace is None: + print("No MMIO trace path. Use %s --gpu-mmio-trace " + % sys.argv[0]) + sys.exit(1) + + _, tempRunscript = tempfile.mkstemp() + with open(tempRunscript, 'w') as b64file: + runscriptStr = samples_runscript.format(args.app, args.app) + b64file.write(runscriptStr) + + if args.second_disk == None: + args.second_disk = args.disk_image + + # Defaults for Vega10 + args.ruby = True + args.cpu_type = 'X86KvmCPU' + args.num_cpus = 1 + args.mem_size = '3GB' + args.dgpu = True + args.dgpu_mem_size = '16GB' + args.dgpu_start = '0GB' + args.checkpoint_restore = 0 + args.disjoint = True + args.timing_gpu = True + args.script = tempRunscript + args.dgpu_xor_low_bit = 0 + + print(args.disk_image) + + # Run gem5 + runfs.runGpuFSSystem(args) diff --git a/configs/example/gpufs/vega10_kvm.py b/configs/example/gpufs/vega10_kvm.py index 6d16819f81..baee077a0f 100644 --- a/configs/example/gpufs/vega10_kvm.py +++ b/configs/example/gpufs/vega10_kvm.py @@ -39,9 +39,6 @@ from amd import AmdGPUOptions from common import Options from common import GPUTLBOptions from ruby import Ruby -#from VegaConfigs import * - -#from m5.objects import * demo_runscript = '''\ @@ -74,7 +71,6 @@ if __name__ == "__m5_main__": AmdGPUOptions.addAmdGPUOptions(parser) Ruby.define_options(parser) GPUTLBOptions.tlb_options(parser) - #parseVegaOptions(parser) addDemoOptions(parser) # Parse now so we can override options @@ -124,7 +120,5 @@ if __name__ == "__m5_main__": args.script = tempRunscript args.dgpu_xor_low_bit = 0 - print(args.disk_image) - # Run gem5 runfs.runGpuFSSystem(args)