Date: Tuesday, December 27, 2022 @ 18:33:51 Author: tpkessler Revision: 1368852
Migrate rocblas from AUR to community Added: rocblas/ rocblas/repos/ rocblas/trunk/ rocblas/trunk/PKGBUILD rocblas/trunk/test.cpp rocblas/trunk/test.sh ----------+ PKGBUILD | 52 +++++++++++++++++++++++++++++++++++++++++++++ test.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ test.sh | 5 ++++ 3 files changed, 127 insertions(+) Added: rocblas/trunk/PKGBUILD =================================================================== --- rocblas/trunk/PKGBUILD (rev 0) +++ rocblas/trunk/PKGBUILD 2022-12-27 18:33:51 UTC (rev 1368852) @@ -0,0 +1,52 @@ +# Maintainer: Torsten Keßler <tpkessler at archlinux dot org> +# Contributor: Markus Näther <[email protected]> +pkgname=rocblas +pkgver=5.4.1 +pkgrel=2 +pkgdesc='Next generation BLAS implementation for ROCm platform' +arch=('x86_64') +url='https://rocblas.readthedocs.io/en/latest' +license=('MIT') +depends=('hip' 'openmp') +makedepends=('rocm-cmake' 'python' 'python-virtualenv' 'python-pyaml' 'python-wheel' + 'perl-file-which' 'python-msgpack' 'msgpack-cxx' 'gcc-fortran') +_rocblas='https://github.com/ROCmSoftwarePlatform/rocBLAS' +_tensile='https://github.com/ROCmSoftwarePlatform/Tensile' +source=("$pkgname-$pkgver.tar.gz::$_rocblas/archive/rocm-$pkgver.tar.gz" + "$pkgname-tensile-$pkgver.tar.gz::$_tensile/archive/refs/tags/rocm-$pkgver.tar.gz") +sha256sums=('2f6d30b025306ba5f378154eb0494ac9260190120d085b67c3f499e7d2b6a70b' + '6bcc08426c14c203c799c93815293c2a17d5b656936536dcece1302d53816cef') +options=(!lto) +_dirname="$(basename "$_rocblas")-$(basename "${source[0]}" ".tar.gz")" +_tensile_dir="$(basename "$_tensile")-$(basename "${source[1]}" ".tar.gz")" + +build() { + # -fcf-protection is not supported by HIP, see + # https://docs.amd.com/bundle/ROCm-Compiler-Reference-Guide-v5.4/page/Appendix_A.html + PATH="/opt/rocm/llvm/bin:/opt/rocm/bin:${PATH}" \ + CXXFLAGS="${CXXFLAGS} -fcf-protection=none" \ + cmake \ + -Wno-dev \ + -B build \ + -S "$_dirname" \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_CXX_COMPILER=/opt/rocm/bin/hipcc \ + -DCMAKE_INSTALL_PREFIX=/opt/rocm \ + -DCMAKE_PREFIX_PATH=/opt/rocm/llvm/lib/cmake/llvm \ + -Damd_comgr_DIR=/opt/rocm/lib/cmake/amd_comgr \ + -DBUILD_WITH_TENSILE=ON \ + -DTensile_LIBRARY_FORMAT=msgpack \ + -DTensile_CODE_OBJECT_VERSION=V3 \ + -DCMAKE_TOOLCHAIN_FILE=toolchain-linux.cmake \ + -DTensile_TEST_LOCAL_PATH="$srcdir/$_tensile_dir" + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + echo "/opt/rocm/$pkgname/lib" > "$pkgname.conf" + install -Dm644 "$pkgname.conf" "$pkgdir/etc/ld.so.conf.d/rocblas.conf" + + install -Dm644 "$_dirname/LICENSE.md" "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} Added: rocblas/trunk/test.cpp =================================================================== --- rocblas/trunk/test.cpp (rev 0) +++ rocblas/trunk/test.cpp 2022-12-27 18:33:51 UTC (rev 1368852) @@ -0,0 +1,70 @@ +#include <rocblas/rocblas.h> +#include <hip/hip_runtime.h> +#include <vector> +#include <random> +#include <algorithm> +#include <cmath> +#include <iostream> + +int main() +{ + size_t n = 128; + size_t size = n * n; + + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_real_distribution<float> dist(-1.0, 1.0); + auto myrand = [&](){return dist(gen);}; + + float *x; + float *y; + float *z; + hipMalloc((void**)&x, sizeof *x * size); + hipMalloc((void**)&y, sizeof *y * size); + hipMalloc((void**)&z, sizeof *z * size); + + std::vector<float> xin(size); + std::vector<float> yin(size); + + std::generate(xin.begin(), xin.end(), myrand); + std::generate(yin.begin(), yin.end(), myrand); + + hipMemcpy(x, xin.data(), sizeof *x * size, hipMemcpyHostToDevice); + hipMemcpy(y, yin.data(), sizeof *x * size, hipMemcpyHostToDevice); + + rocblas_handle handle; + rocblas_create_handle(&handle); + + float alpha = 15.412f; + float beta = 0.0f; + rocblas_sgemm(handle, rocblas_operation_none, rocblas_operation_none, + n, n, n, &alpha, x, n, y, n, &beta, z, n); + + std::vector<float> zout(size); + hipMemcpy(zout.data(), z, sizeof *z * size, hipMemcpyDeviceToHost); + + for(size_t j = 0; j < n; j++){ + for(size_t i = 0; i < n; i++){ + for(size_t k = 0; k < n; k++){ + zout[i + j * n] -= alpha * xin[i + k * n] * yin[k + j * n]; + } + } + } + + float tol = 0.001f; + for(size_t i = 0; i < size; i++){ + if(std::abs(zout[i]) > tol){ + std::cout << "Element mismatch at index " << i << "\n"; + std::cout << "Expected: 0\n"; + std::cout << "Actual : " << zout[i] << "\n"; + return 1; + } + } + + std::cout << "TESTS PASSED!" << std::endl; + + hipFree(x); + hipFree(y); + hipFree(z); + rocblas_destroy_handle(handle); +} Added: rocblas/trunk/test.sh =================================================================== --- rocblas/trunk/test.sh (rev 0) +++ rocblas/trunk/test.sh 2022-12-27 18:33:51 UTC (rev 1368852) @@ -0,0 +1,5 @@ +#! /usr/bin/env sh + +OUT=$(mktemp -d) +/opt/rocm/bin/hipcc -o "$OUT"/test test.cpp -lrocblas +"$OUT"/test Property changes on: rocblas/trunk/test.sh ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property
