rocmPackages.rocprofiler: fix rocprof and rocprofv2

This commit is contained in:
Madoura 2023-10-22 14:36:00 -05:00
parent 06e0ef4afc
commit 977784c08e
No known key found for this signature in database
GPG key ID: 1B9BB76A2B71922D
4 changed files with 181 additions and 27 deletions

View file

@ -105,8 +105,8 @@ in rec {
# Needs GCC
rocprofiler = callPackage ./rocprofiler {
inherit rocmUpdateScript clr rocm-core rocm-thunk rocm-device-libs roctracer rocdbgapi rocm-smi hsa-amd-aqlprofile-bin;
inherit (llvm) clang;
inherit rocmUpdateScript clr rocm-thunk roctracer rocm-smi hsa-amd-aqlprofile-bin;
};
# Needs GCC

View file

@ -0,0 +1,15 @@
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 8473a42..07ea873 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -112,10 +112,6 @@ function(generate_hsaco TARGET_ID INPUT_FILE OUTPUT_FILE)
DEPENDS ${INPUT_FILE} clang
COMMENT "Building ${OUTPUT_FILE}..."
VERBATIM)
- install(
- FILES ${PROJECT_BINARY_DIR}/${OUTPUT_FILE}
- DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/tests-v1
- COMPONENT tests)
set(HSACO_TARGET_LIST
${HSACO_TARGET_LIST} ${PROJECT_BINARY_DIR}/${OUTPUT_FILE}
PARENT_SCOPE)

View file

@ -0,0 +1,111 @@
diff --git a/bin/rocprofv2 b/bin/rocprofv2
index 92f7489..8839d4d 100755
--- a/bin/rocprofv2
+++ b/bin/rocprofv2
@@ -2,7 +2,8 @@
set -eo pipefail
CURRENT_DIR="$(dirname -- "$0")"
ROCPROFV2_DIR=$(dirname -- $(realpath ${BASH_SOURCE[0]}))
-ROCM_DIR=$(dirname -- "$ROCPROFV2_DIR")
+ROCPROFILER_DIR=$(dirname -- "$ROCPROFV2_DIR")
+ROCM_DIR=@rocmtoolkit_merged@
PLUGIN_LIST=("ctf" "perfetto" "file" "att")
RUN_FROM_BUILD=0
if [[ $ROCPROFV2_DIR == *"/build"* ]]; then
@@ -10,7 +11,7 @@ if [[ $ROCPROFV2_DIR == *"/build"* ]]; then
ROCM_DIR=$ROCPROFV2_DIR
fi
-export ROCPROFILER_METRICS_PATH=$ROCM_DIR/libexec/rocprofiler/counters/derived_counters.xml
+export ROCPROFILER_METRICS_PATH=$ROCPROFILER_DIR/libexec/rocprofiler/counters/derived_counters.xml
export LD_LIBRARY_PATH=$ROCM_DIR/lib:$LD_LIBRARY_PATH
usage() {
@@ -70,8 +71,8 @@ while [ 1 ]; do
exit 1
fi
elif [[ "$1" = "--list-counters" ]]; then
- export LD_PRELOAD=$LD_PRELOAD:$ROCM_DIR/lib/rocprofiler/librocprofiler_tool.so
- eval $ROCM_DIR/libexec/rocprofiler/ctrl
+ export LD_PRELOAD=$LD_PRELOAD:$ROCPROFILER_DIR/lib/rocprofiler/librocprofiler_tool.so
+ eval $ROCPROFILER_DIR/libexec/rocprofiler/ctrl
exit 1
elif [[ "$1" = "-i" || "$1" = "--input" ]]; then
if [ $2 ] && [ -n $2 ] && [ -r $2 ]; then
@@ -171,7 +172,7 @@ while [ 1 ]; do
if [ $RUN_FROM_BUILD == 1 ]; then
ATT_PATH=$ROCM_DIR/plugin/att/att/att.py
else
- ATT_PATH=$ROCM_DIR/libexec/rocprofiler/att/att.py
+ ATT_PATH=$ROCPROFILER_DIR/libexec/rocprofiler/att/att.py
export ROCPROFV2_ATT_LIB_PATH=$ROCM_DIR/lib/hsa-amd-aqlprofile/librocprofv2_att.so
fi
ATT_ARGV=$3
@@ -236,13 +237,13 @@ if [ -n "$PMC_LINES" ] && [ ! -n "$ATT_ARGV" ]; then
export OUTPUT_PATH=$FINAL_PATH
fi
let COUNTER=COUNTER+1
- LD_PRELOAD=$LD_PRELOAD:$ROCM_DIR/lib/rocprofiler/librocprofiler_tool.so $*
+ LD_PRELOAD=$LD_PRELOAD:$ROCPROFILER_DIR/lib/rocprofiler/librocprofiler_tool.so $*
if [ -n "$OUTPUT_PATH" ]; then
echo -e "\nThe output path for the following counters: $OUTPUT_PATH"
fi
done
else
- LD_PRELOAD=$LD_PRELOAD:$ROCM_DIR/lib/rocprofiler/librocprofiler_tool.so $*
+ LD_PRELOAD=$LD_PRELOAD:$ROCPROFILER_DIR/lib/rocprofiler/librocprofiler_tool.so $*
fi
get_pmc_results_txt_path() {
diff --git a/bin/rpl_run.sh b/bin/rpl_run.sh
index c1a3daa..bc868a5 100755
--- a/bin/rpl_run.sh
+++ b/bin/rpl_run.sh
@@ -24,16 +24,17 @@
time_stamp=`date +%y%m%d_%H%M%S`
BIN_DIR=$(dirname $(realpath ${BASH_SOURCE[0]}))
-ROOT_DIR=$(dirname $BIN_DIR)
+ROCPROFILER_DIR=$(dirname $BIN_DIR)
+ROOT_DIR=@rocmtoolkit_merged@
RUN_DIR=`pwd`
TMP_DIR="/tmp"
DATA_DIR="rpl_data_${time_stamp}_$$"
-RPL_PATH=$ROOT_DIR/lib
+RPL_PATH=$ROCPROFILER_DIR/lib
TLIB_PATH=$RPL_PATH/rocprofiler
TTLIB_PATH=$ROOT_DIR/lib/roctracer
ROCM_LIB_PATH=$ROOT_DIR/lib
-PROF_BIN_DIR=$ROOT_DIR/libexec/rocprofiler
+PROF_BIN_DIR=$ROCPROFILER_DIR/libexec/rocprofiler
if [ -z "$ROCP_PYTHON_VERSION" ] ; then
ROCP_PYTHON_VERSION=python3
@@ -73,7 +74,7 @@ export ROCP_METRICS=$TLIB_PATH/metrics.xml
# Disable AQL-profile read API
export AQLPROFILE_READ_API=0
# ROC Profiler package path
-export ROCP_PACKAGE_DIR=$ROOT_DIR
+export ROCP_PACKAGE_DIR=$ROCPROFILER_DIR
# enabled SPM KFD mode
export ROCP_SPM_KFD_MODE=1
@@ -350,7 +351,7 @@ convert_time_val() {
################################################################################################
# main
-echo "RPL: on '$time_stamp' from '$ROOT_DIR' in '$RUN_DIR'"
+echo "RPL: on '$time_stamp' from '$ROCPROFILER_DIR' in '$RUN_DIR'"
# Parsing arguments
if [ -z "$1" ] ; then
usage
@@ -557,7 +558,7 @@ elif [ "$input_type" = "txt" -o "$input_type" = "none" ] ; then
else
echo "<metric></metric>" > $RES_DIR/input.xml
fi
- input_list=`/bin/ls $RES_DIR/input*.xml`
+ input_list=`ls $RES_DIR/input*.xml`
export ROCPROFILER_SESS=$RES_DIR
else
fatal "Bad input file type '$INPUT_FILE'"

View file

@ -2,11 +2,16 @@
, stdenv
, fetchFromGitHub
, rocmUpdateScript
, symlinkJoin
, substituteAll
, cmake
, clang
, clr
, rocm-core
, rocm-thunk
, rocm-device-libs
, roctracer
, rocdbgapi
, rocm-smi
, hsa-amd-aqlprofile-bin
, numactl
@ -14,24 +19,32 @@
, libxml2
, elfutils
, mpi
, systemd
, gtest
, python3Packages
, gpuTargets ? [
"gfx900"
"gfx906"
"gfx908"
"gfx90a"
"gfx940"
"gfx941"
"gfx942"
"gfx1030"
"gfx1100"
"gfx1101"
"gfx1102"
]
, gpuTargets ? clr.gpuTargets
}:
stdenv.mkDerivation (finalAttrs: {
let
rocmtoolkit-merged = symlinkJoin {
name = "rocmtoolkit-merged";
paths = [
rocm-core
rocm-thunk
rocm-device-libs
roctracer
rocdbgapi
rocm-smi
hsa-amd-aqlprofile-bin
clr
];
postBuild = ''
rm -rf $out/nix-support
'';
};
in stdenv.mkDerivation (finalAttrs: {
pname = "rocprofiler";
version = "5.7.1";
@ -42,6 +55,17 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-1s/7C9y+73ADLF/17Vepw0pZNVtYnKoP24GdwKc9X2Y=";
};
patches = [
# These just simply won't build
./0000-dont-install-tests-hsaco.patch
# Fix bad paths
(substituteAll {
src = ./0001-fix-shell-scripts.patch;
rocmtoolkit_merged = rocmtoolkit-merged;
})
];
nativeBuildInputs = [
cmake
clang
@ -53,20 +77,19 @@ stdenv.mkDerivation (finalAttrs: {
];
buildInputs = [
rocm-thunk
rocm-smi
hsa-amd-aqlprofile-bin
numactl
libpciaccess
libxml2
elfutils
mpi
systemd
gtest
];
propagatedBuildInputs = [ rocmtoolkit-merged ];
cmakeFlags = [
"-DCMAKE_MODULE_PATH=${clr}/lib/cmake/hip"
"-DPROF_API_HEADER_PATH=${roctracer.src}/inc/ext"
"-DHIP_ROOT_DIR=${clr}"
"-DGPU_TARGETS=${lib.concatStringsSep ";" gpuTargets}"
# Manually define CMAKE_INSTALL_<DIR>
@ -79,16 +102,21 @@ stdenv.mkDerivation (finalAttrs: {
postPatch = ''
patchShebangs .
# Cannot find ROCm device library, pointless
substituteInPlace CMakeLists.txt \
--replace "add_subdirectory(tests-v2)" "" \
--replace "add_subdirectory(samples)" ""
substituteInPlace tests-v2/featuretests/profiler/CMakeLists.txt \
--replace "--build-id=sha1" "--build-id=sha1 --rocm-path=${clr} --rocm-device-lib-path=${rocm-device-libs}/amdgcn/bitcode"
substituteInPlace test/CMakeLists.txt \
--replace "\''${ROCM_ROOT_DIR}/amdgcn/bitcode" "${rocm-device-libs}/amdgcn/bitcode"
'';
postBuild = ''
# HSACO aren't being built for some reason
substituteInPlace test/cmake_install.cmake \
--replace "file(INSTALL DESTINATION \"\''${CMAKE_INSTALL_PREFIX}/share/rocprofiler/tests-v1\" TYPE FILE FILES \"" "message(\""
postInstall = ''
# Why do these not already have the executable bit set?
chmod +x $out/lib/rocprofiler/librocprof-tool.so
chmod +x $out/share/rocprofiler/tests-v1/test/ocl/SimpleConvolution
# Why do these have the executable bit set?
chmod -x $out/libexec/rocprofiler/counters/basic_counters.xml
chmod -x $out/libexec/rocprofiler/counters/derived_counters.xml
'';
passthru.updateScript = rocmUpdateScript {