Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rocmPackages.rocprofiler: fix rocprof and rocprofv2 #262798

Merged
merged 1 commit into from
Oct 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pkgs/development/rocm-modules/5/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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)
Original file line number Diff line number Diff line change
@@ -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'"
80 changes: 54 additions & 26 deletions pkgs/development/rocm-modules/5/rocprofiler/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,49 @@
, stdenv
, fetchFromGitHub
, rocmUpdateScript
, symlinkJoin
, substituteAll
, cmake
, clang
, clr
, rocm-core
, rocm-thunk
, rocm-device-libs
, roctracer
, rocdbgapi
, rocm-smi
, hsa-amd-aqlprofile-bin
, numactl
, libpciaccess
, 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";

Expand All @@ -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
Expand All @@ -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>
Expand All @@ -79,16 +102,21 @@ stdenv.mkDerivation (finalAttrs: {
postPatch = ''
patchShebangs .
Madouura marked this conversation as resolved.
Show resolved Hide resolved

# 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 {
Expand Down