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 <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
diff --git a/configs/example/gpufs/hip_cookbook.py b/configs/example/gpufs/hip_cookbook.py
new file mode 100644
index 0000000..cd0e284
--- /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 <app>" % sys.argv[0])
+        sys.exit(1)
+    elif args.kernel is None:
+        print("No kernel path given. Use %s --kernel <vmlinux>" % sys.argv[0])
+        sys.exit(1)
+    elif args.disk_image is None:
+        print("No disk path given. Use %s --disk-image <linux>" % sys.argv[0])
+        sys.exit(1)
+    elif args.gpu_mmio_trace is None:
+        print("No MMIO trace path. Use %s --gpu-mmio-trace <path>"
+                % 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 0000000..3d7cef4
--- /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 <app>" % sys.argv[0])
+        sys.exit(1)
+    elif args.kernel is None:
+        print("No kernel path given. Use %s --kernel <vmlinux>" % sys.argv[0])
+        sys.exit(1)
+    elif args.disk_image is None:
+        print("No disk path given. Use %s --disk-image <linux>" % sys.argv[0])
+        sys.exit(1)
+    elif args.gpu_mmio_trace is None:
+        print("No MMIO trace path. Use %s --gpu-mmio-trace <path>"
+                % 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 0000000..b3a66a7
--- /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 <app>" % sys.argv[0])
+        sys.exit(1)
+    elif args.kernel is None:
+        print("No kernel path given. Use %s --kernel <vmlinux>" % sys.argv[0])
+        sys.exit(1)
+    elif args.disk_image is None:
+        print("No disk path given. Use %s --disk-image <linux>" % sys.argv[0])
+        sys.exit(1)
+    elif args.gpu_mmio_trace is None:
+        print("No MMIO trace path. Use %s --gpu-mmio-trace <path>"
+                % 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 6d16819..baee077 100644
--- a/configs/example/gpufs/vega10_kvm.py
+++ b/configs/example/gpufs/vega10_kvm.py
@@ -39,9 +39,6 @@
 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 @@
     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 @@
     args.script = tempRunscript
     args.dgpu_xor_low_bit = 0
 
-    print(args.disk_image)
-
     # Run gem5
     runfs.runGpuFSSystem(args)