diff --git a/gnu/local.mk b/gnu/local.mk index 928d608357..bf36a90139 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1599,6 +1599,7 @@ dist_patch_DATA = \ %D%/packages/patches/heimdal-CVE-2022-45142.patch \ %D%/packages/patches/helm-fix-gcc-9-build.patch \ %D%/packages/patches/highlight-gui-data-dir.patch \ + %D%/packages/patches/hipblaslt-python-nanobind.patch \ %D%/packages/patches/hplip-usb-timeout.patch \ %D%/packages/patches/http-parser-CVE-2020-8287.patch \ %D%/packages/patches/hubbub-sort-entities.patch \ diff --git a/gnu/packages/patches/hipblaslt-python-nanobind.patch b/gnu/packages/patches/hipblaslt-python-nanobind.patch new file mode 100644 index 0000000000..d332e2c11b --- /dev/null +++ b/gnu/packages/patches/hipblaslt-python-nanobind.patch @@ -0,0 +1,22 @@ +Taken from +https://gitweb.gentoo.org/repo/gentoo.git/tree/sci-libs/hipBLASLt/files/hipBLASLt-7.1.0-rocisa-nanobind.patch?id=77972f6a23d7b2347be2f09f453a1093714d67bf + +diff --git a/tensilelite/rocisa/CMakeLists.txt b/tensilelite/rocisa/CMakeLists.txt +index 3918f18..9c6fcd3 100644 +--- a/tensilelite/rocisa/CMakeLists.txt ++++ b/tensilelite/rocisa/CMakeLists.txt +@@ -17,13 +17,7 @@ target_include_directories(rocisa-cpp + ) + + if(HIPBLASLT_BUNDLE_PYTHON_DEPS) +- include(FetchContent) +- FetchContent_Declare( +- nanobind +- GIT_REPOSITORY https://github.com/wjakob/nanobind.git +- GIT_TAG 9b3afa9dbdc23641daf26fadef7743e7127ff92f # v2.6.1 +- ) +- FetchContent_MakeAvailable(nanobind) ++ find_package(nanobind CONFIG REQUIRED) + + set(ROCISAINST_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/rocisa/src/instruction/instruction.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/rocisa/src/instruction/common.cpp" diff --git a/gnu/packages/rocm-libs.scm b/gnu/packages/rocm-libs.scm index 46fe5fa4eb..c842f170bd 100644 --- a/gnu/packages/rocm-libs.scm +++ b/gnu/packages/rocm-libs.scm @@ -22,20 +22,26 @@ #:use-module (guix git-download) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) + #:use-module (guix utils) #:use-module (gnu packages) #:use-module (gnu packages base) #:use-module (gnu packages boost) #:use-module (gnu packages check) #:use-module (gnu packages cpp) + #:use-module (gnu packages gcc) + #:use-module (gnu packages linux) #:use-module (gnu packages llvm) #:use-module (gnu packages logging) #:use-module (gnu packages maths) #:use-module (gnu packages pretty-print) #:use-module (gnu packages python) + #:use-module (gnu packages python-build) #:use-module (gnu packages python-science) #:use-module (gnu packages python-xyz) #:use-module (gnu packages rocm) - #:use-module (gnu packages serialization)) + #:use-module (gnu packages rocm-tools) + #:use-module (gnu packages serialization) + #:use-module (srfi srfi-1)) ;; The components are tightly integrated and can only be upgraded as a unit. If ;; you want to upgrade ROCm, bump this version number and the version number in @@ -228,7 +234,9 @@ AMD GPU assembly kernels.") (add-after 'unpack 'fix-cmake (lambda _ (substitute* "cmake/dependencies.cmake" - (("find_package\\(Git REQUIRED\\)") ""))))))) + (("find_package\\(Git REQUIRED\\)") "")) + (substitute* "cmake/origami-config.cmake.in" + (("origami::origami") "roc::origami"))))))) (inputs (list rocm-hip-runtime)) (native-inputs (list boost @@ -308,3 +316,116 @@ Tensile library is mainly used as backend library to rocBLAS. Tensile acts as the performance backbone for a wide variety of compute applications running on AMD GPUs.") (license license:expat))) + +(define hipblaslt-supported-targets + (list "gfx1100" + "gfx1101" + "gfx1102" + "gfx1103" + "gfx1150" + "gfx1151" + "gfx1200" + "gfx1201" + "gfx908" + "gfx90a" + "gfx940" + "gfx941" + "gfx942" + "gfx950")) + +(define (hipblaslt-targets targets) + (string-join + (lset-intersection string=? hipblaslt-supported-targets targets) + ";")) + +(define-public hipblaslt + (package + (name "hipblaslt") + (version %rocm-version) + (source + (rocm-library-source + "hipblaslt" + #:patches (search-patches "hipblaslt-python-nanobind.patch"))) + (build-system cmake-build-system) + (arguments + (list + #:tests? #f ; requires GPU + #:build-type "Release" + #:validate-runpath? #f ; Fails with GPU kernel files + #:configure-flags + #~(let ((targets + #$(hipblaslt-targets (current-amd-gpu-targets)))) + (cons* + (string-append "-DCMAKE_CXX_COMPILER=clang++") + (string-append "-DCMAKE_C_COMPILER=clang") + (string-append "-DGPU_TARGETS=" targets) + ;; Unbundle rocroller and mxdatagenerator. + "-DHIPBLASLT_ENABLE_THEROCK=ON" + "-DHIPBLASLT_ENABLE_BLIS=OFF" + (string-append "-DCMAKE_PREFIX_PATH=" + #$(this-package-native-input "python-nanobind") + "/lib/python" + #$(version-major+minor + (package-version python)) + "/site-packages/nanobind/cmake") + "-DHIPBLASLT_BUILD_TESTING=OFF" + "-DHIPBLASLT_ENABLE_ROCROLLER=OFF" + (string-append "-DTENSILELITE_BUILD_PARALLEL_LEVEL=" + (number->string (parallel-job-count))) + (if (string-null? targets) '("-DHIPBLASLT_ENABLE_DEVICE=OFF") + '()))) + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'fix-cmake + (lambda* (#:key parallel-build? #:allow-other-keys) + (substitute* "tensilelite/Makefile" + (("AS :=.*") + "AS := amdclang++\n") + (("LDD :=.*") + "LDD := amdclang++\n")) + (substitute* "cmake/dependencies.cmake" + (("find_package\\(Git REQUIRED\\)") "")) + (substitute* "CMakeLists.txt" + (("add_subdirectory.*origami.*") + "find_package(origami REQUIRED)\n") + ;; Do not enable default GPU targets if empty + (("NOT GPU_TARGETS OR") "")))) + (add-after 'fix-cmake 'setenv + (lambda _ + (setenv "HIP_PATH" #$(this-package-input "rocm-hip-runtime"))))))) + (inputs + (list blis + hipblas-common + lapack + msgpack-cxx + rocm-hip-runtime + rocm-smi + rocm-toolchain + roctracer)) + (native-inputs + (list gfortran + mxdatagenerator + origami + procps + python + python-distro + python-joblib + python-msgpack + python-nanobind + python-orjson + python-packaging + python-pyyaml + python-setuptools + python-simplejson + python-ujson + rocm-cmake + rocm-toolchain + rocroller)) + (properties `((amd-gpu-targets . ,%default-amd-gpu-targets) + (max-silent-time . ,(* 6 3600)))) + (home-page %rocm-libraries-url) + (synopsis "Flexible library for general matrix-matrix operations") + (description "hipBLASLt is a library that provides general +matrix-matrix operations with a flexible API and extends +functionalities beyond a traditional BLAS library.") + (license (list license:expat))))