diff options
Diffstat (limited to 'pkgs/development/rocm-modules/6/rocprofiler')
4 files changed, 276 insertions, 0 deletions
diff --git a/pkgs/development/rocm-modules/6/rocprofiler/0000-dont-install-tests-hsaco.patch b/pkgs/development/rocm-modules/6/rocprofiler/0000-dont-install-tests-hsaco.patch new file mode 100644 index 000000000000..70550d0119a9 --- /dev/null +++ b/pkgs/development/rocm-modules/6/rocprofiler/0000-dont-install-tests-hsaco.patch @@ -0,0 +1,15 @@ +diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt +index 46efbd5..ca2cc3b 100644 +--- a/test/CMakeLists.txt ++++ b/test/CMakeLists.txt +@@ -127,10 +127,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) diff --git a/pkgs/development/rocm-modules/6/rocprofiler/0001-fix-shell-scripts.patch b/pkgs/development/rocm-modules/6/rocprofiler/0001-fix-shell-scripts.patch new file mode 100644 index 000000000000..6dfc8e0d6e55 --- /dev/null +++ b/pkgs/development/rocm-modules/6/rocprofiler/0001-fix-shell-scripts.patch @@ -0,0 +1,109 @@ +diff --git a/bin/rocprofv2 b/bin/rocprofv2 +index d0445e7..6079af8 100755 +--- a/bin/rocprofv2 ++++ b/bin/rocprofv2 +@@ -7,7 +7,8 @@ if [ -n "${ROCP_PRELOAD}" ]; then LD_PRELOAD="${ROCP_PRELOAD}"; fi + + 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" "cli") + RUN_FROM_BUILD=0 + if [[ $ROCPROFV2_DIR == *"/build"* ]]; then +@@ -15,7 +16,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 + + # Define color code +@@ -83,7 +84,7 @@ while [ 1 ]; do + exit 1 + fi + elif [[ "$1" == "--list-counters" ]]; then +- export LD_PRELOAD=$LD_PRELOAD:$ROCM_DIR/lib/rocprofiler/librocprofiler_tool.so ++ export LD_PRELOAD=$LD_PRELOAD:$ROC_DIR/lib/rocprofiler/librocprofiler_tool.so + eval $ROCM_DIR/libexec/rocprofiler/ctrl + exit 1 + elif [[ "$1" == "-i" || "$1" == "--input" ]]; then +@@ -221,7 +222,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 +@@ -294,13 +295,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 6b236ed..a9c233c 100755 +--- a/bin/rpl_run.sh ++++ b/bin/rpl_run.sh +@@ -25,16 +25,17 @@ + ROCPROF_ARGS="$*" + 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 + + # check if rocprof is supportd on this gpu arch + V1_SUPPORTED_GPU_ARCHS=("gfx80x","gfx90x","gfx10xx","gfx94x") +@@ -80,7 +81,7 @@ unset ROCP_PROXY_QUEUE + # 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 + +@@ -400,7 +401,7 @@ unset_v1_envs() { + + ################################################################################################ + # 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 +@@ -633,7 +634,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'" diff --git a/pkgs/development/rocm-modules/6/rocprofiler/0002-include-stdint-in-version.patch b/pkgs/development/rocm-modules/6/rocprofiler/0002-include-stdint-in-version.patch new file mode 100644 index 000000000000..4e4aaad463d1 --- /dev/null +++ b/pkgs/development/rocm-modules/6/rocprofiler/0002-include-stdint-in-version.patch @@ -0,0 +1,12 @@ +diff --git a/src/tools/versioning/version.cpp b/src/tools/versioning/version.cpp +index 11bdd00..339743c 100644 +--- a/src/tools/versioning/version.cpp ++++ b/src/tools/versioning/version.cpp +@@ -1,6 +1,7 @@ + #include <rocm-core/rocm_version.h> + #include <iostream> + #include <sstream> ++#include <stdint.h> + + + int main() { diff --git a/pkgs/development/rocm-modules/6/rocprofiler/default.nix b/pkgs/development/rocm-modules/6/rocprofiler/default.nix new file mode 100644 index 000000000000..ca6291992d85 --- /dev/null +++ b/pkgs/development/rocm-modules/6/rocprofiler/default.nix @@ -0,0 +1,140 @@ +{ lib +, 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 ? clr.gpuTargets +}: + +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 = "6.0.2"; + + src = fetchFromGitHub { + owner = "ROCm"; + repo = "rocprofiler"; + rev = "rocm-${finalAttrs.version}"; + hash = "sha256-yzgw9g5cHAZpdbU44+1ScZyUcZ2I4GGfjbm9GSqCClk="; + }; + + 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; + }) + + # Fix for missing uint32_t not defined + ./0002-include-stdint-in-version.patch + ]; + + nativeBuildInputs = [ + cmake + clang + clr + python3Packages.lxml + python3Packages.cppheaderparser + python3Packages.pyyaml + python3Packages.barectf + python3Packages.pandas + ]; + + buildInputs = [ + numactl + libpciaccess + libxml2 + elfutils + mpi + systemd + gtest + ]; + + propagatedBuildInputs = [ rocmtoolkit-merged ]; + + cmakeFlags = [ + "-DCMAKE_MODULE_PATH=${clr}/lib/cmake/hip" + "-DHIP_ROOT_DIR=${clr}" + "-DGPU_TARGETS=${lib.concatStringsSep ";" gpuTargets}" + # Manually define CMAKE_INSTALL_<DIR> + # See: https://github.com/NixOS/nixpkgs/pull/197838 + "-DCMAKE_INSTALL_BINDIR=bin" + "-DCMAKE_INSTALL_LIBDIR=lib" + "-DCMAKE_INSTALL_INCLUDEDIR=include" + ]; + + postPatch = '' + patchShebangs . + + 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" + ''; + + 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 { + name = finalAttrs.pname; + owner = finalAttrs.src.owner; + repo = finalAttrs.src.repo; + }; + + meta = with lib; { + description = "Profiling with perf-counters and derived metrics"; + homepage = "https://github.com/ROCm/rocprofiler"; + license = with licenses; [ mit ]; # mitx11 + maintainers = teams.rocm.members; + platforms = platforms.linux; + broken = versions.minor finalAttrs.version != versions.minor clr.version || versionAtLeast finalAttrs.version "7.0.0"; + }; +}) |