summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorTorsten Keßler2022-12-08 19:41:32 +0100
committerTorsten Keßler2022-12-08 19:41:32 +0100
commitf9130776d0ce19d8d150bfdfa52323faa67a0e71 (patch)
treefdbfff1de06cff1b84ea00ee5b85bfb670b257a5
parent8e2622cccdb627e07984f538add77a01785458bb (diff)
downloadaur-f9130776d0ce19d8d150bfdfa52323faa67a0e71.tar.gz
upgpkg: rocsparse 5.4.0-1
Update to 5.4.0 release with: * Simple test case to be run after package installation that checks if the package is correctly configured; * patch to remove git from dependencies: It's only needed for testing but is globally loaded by the project's CMakeLists.txt; * update checksum.
-rw-r--r--.SRCINFO11
-rw-r--r--PKGBUILD22
-rw-r--r--rocsparse-no-git.patch12
-rw-r--r--test.cpp100
-rwxr-xr-xtest.sh5
5 files changed, 137 insertions, 13 deletions
diff --git a/.SRCINFO b/.SRCINFO
index e490485b7219..e1a1bfd8f8e7 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,16 +1,17 @@
pkgbase = rocsparse
pkgdesc = BLAS for sparse computation on top of ROCm
- pkgver = 5.3.0
+ pkgver = 5.4.0
pkgrel = 1
url = https://rocsparse.readthedocs.io/en/master/
arch = x86_64
license = MIT
- makedepends = cmake
- makedepends = git
+ makedepends = rocm-cmake
makedepends = gcc-fortran
depends = hip
depends = rocprim
- source = rocsparse-5.3.0.tar.gz::https://github.com/ROCmSoftwarePlatform/rocSPARSE/archive/rocm-5.3.0.tar.gz
- sha256sums = 521ca0e7b52f26edbff8507eb1479dc26019f456756d884d7b8b192c3ea518e8
+ source = rocsparse-5.4.0.tar.gz::https://github.com/ROCmSoftwarePlatform/rocSPARSE/archive/rocm-5.4.0.tar.gz
+ source = rocsparse-no-git.patch
+ sha256sums = c8f0e920a8ec15b9ae40564c68191363356cc4d793c16247bb6e11ef5293ed11
+ sha256sums = bc3cda8fb3e3aad14a2130d9cde7a8c521c2c35448ed69f0873111571d654ad2
pkgname = rocsparse
diff --git a/PKGBUILD b/PKGBUILD
index 32bb8f380757..e174a0592ddd 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,31 +1,37 @@
# Maintainer: Torsten Keßler <t dot kessler at posteo dot de>
# Contributor: Markus Näther <naetherm@informatik.uni-freiburg.de>
pkgname=rocsparse
-pkgver=5.3.0
+pkgver=5.4.0
pkgrel=1
pkgdesc='BLAS for sparse computation on top of ROCm'
arch=('x86_64')
url='https://rocsparse.readthedocs.io/en/master/'
license=('MIT')
depends=('hip' 'rocprim')
-makedepends=('cmake' 'git' 'gcc-fortran')
+makedepends=('rocm-cmake' 'gcc-fortran')
_git='https://github.com/ROCmSoftwarePlatform/rocSPARSE'
-source=("$pkgname-$pkgver.tar.gz::$_git/archive/rocm-$pkgver.tar.gz")
-sha256sums=('521ca0e7b52f26edbff8507eb1479dc26019f456756d884d7b8b192c3ea518e8')
+source=("$pkgname-$pkgver.tar.gz::$_git/archive/rocm-$pkgver.tar.gz"
+ "rocsparse-no-git.patch")
+sha256sums=('c8f0e920a8ec15b9ae40564c68191363356cc4d793c16247bb6e11ef5293ed11'
+ 'bc3cda8fb3e3aad14a2130d9cde7a8c521c2c35448ed69f0873111571d654ad2')
_dirname="$(basename "$_git")-$(basename "${source[0]}" ".tar.gz")"
+prepare() {
+ cd "$_dirname"
+ patch -Np1 -i "$srcdir/rocsparse-no-git.patch"
+}
+
build() {
# -fcf-protection is not supported by HIP, see
- # https://docs.amd.com/bundle/ROCm-Compiler-Reference-Guide-v5.3/page/Appendix_A.html
+ # https://docs.amd.com/bundle/ROCm-Compiler-Reference-Guide-v5.4/page/Appendix_A.html
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 \
- -Drocprim_DIR=/opt/rocm/rocprim/rocprim/lib/cmake/rocprim \
- -DBUILD_CLIENTS_SAMPLES=OFF
+ -DCMAKE_INSTALL_PREFIX=/opt/rocm
cmake --build build
}
diff --git a/rocsparse-no-git.patch b/rocsparse-no-git.patch
new file mode 100644
index 000000000000..af0594b8a3fb
--- /dev/null
+++ b/rocsparse-no-git.patch
@@ -0,0 +1,12 @@
+--- rocSPARSE-rocm-5.4.0/cmake/Dependencies.cmake.bak 2022-12-08 11:37:01.176015424 +0100
++++ rocSPARSE-rocm-5.4.0/cmake/Dependencies.cmake 2022-12-08 11:37:20.093958536 +0100
+@@ -23,9 +23,6 @@
+
+ # Dependencies
+
+-# Git
+-find_package(Git REQUIRED)
+-
+ # Workaround until hcc & hip cmake modules fixes symlink logic in their config files.
+ # (Thanks to rocBLAS devs for finding workaround for this problem!)
+ list(APPEND CMAKE_PREFIX_PATH /opt/rocm /opt/rocm/hip)
diff --git a/test.cpp b/test.cpp
new file mode 100644
index 000000000000..d7bba2070259
--- /dev/null
+++ b/test.cpp
@@ -0,0 +1,100 @@
+#include <rocsparse/rocsparse.h>
+#include <hip/hip_runtime.h>
+#include <iostream>
+#include <vector>
+#include <random>
+#include <algorithm>
+
+int main()
+{
+ using rint = rocsparse_int;
+ rint n = 1024;
+
+ std::random_device rd;
+ std::mt19937 gen(rd());
+ std::uniform_real_distribution<float> dist(-1.0, 1.0);
+
+ auto myrand = [&]() -> float {return dist(gen);};
+
+ std::vector<float> xin(n);
+ std::generate(xin.begin(), xin.end(), myrand);
+
+ rocsparse_handle handle;
+ rocsparse_create_handle(&handle);
+
+ std::vector<rint> row_ptr(n + 1);
+ std::vector<rint> col(3 * n);
+ std::vector<float> data(3 * n);
+
+ //Second order finite differences matrix in 1D
+ row_ptr[0] = 0;
+ for(size_t i = 0; i < n; i++){
+ rint off = row_ptr[i];
+ if(i > 0){
+ col[off] = i - 1;
+ data[off++] = -1.0f;
+ }
+ col[off] = i;
+ data[off++] = 2.0f;
+ if(i < n - 1){
+ col[off] = i + 1;
+ data[off++] = -1.0f;
+ }
+ row_ptr[i + 1] = off;
+ }
+
+ rint *rp;
+ rint *c;
+ float *d;
+
+ float *x;
+ float *y;
+ hipMalloc((void **)&rp, sizeof *rp * (n + 1));
+ hipMalloc((void **)&c, sizeof *c * 3 * n);
+ hipMalloc((void **)&d, sizeof *d * 3 * n);
+
+ hipMalloc((void **)&x, sizeof *x * n);
+ hipMalloc((void **)&y, sizeof *y * n);
+
+ hipMemcpy(rp, row_ptr.data(), sizeof *rp * (n + 1), hipMemcpyHostToDevice);
+ hipMemcpy(c, col.data(), sizeof *c * 3 * n, hipMemcpyHostToDevice);
+ hipMemcpy(d, data.data(), sizeof *d * 3 * n, hipMemcpyHostToDevice);
+
+ hipMemcpy(x, xin.data(), sizeof *x * n, hipMemcpyHostToDevice);
+
+ float alpha = 14.124f;
+ float beta = 0.0f;
+
+ rocsparse_mat_descr descr;
+ rocsparse_create_mat_descr(&descr);
+
+ rocsparse_scsrmv(handle, rocsparse_operation_none,
+ n, n, 3 * n - 2, &alpha, descr, d, rp, c, nullptr,
+ x, &beta, y);
+
+ std::vector<float> yout(n);
+ hipMemcpy(yout.data(), y, sizeof *y * n, hipMemcpyDeviceToHost);
+
+ float tol = 0.0001f;
+ for(rint i = 0; i < n; i++){
+ for(rint jj = row_ptr[i]; jj < row_ptr[i + 1]; jj++){
+ rint j = col[jj];
+ yout[i] -= alpha * data[jj] * xin[j];
+ }
+ if(std::abs(yout[i]) > tol){
+ std::cout << "Entry " << i << " is not computed correctly.\n";
+ std::cout << "Expected 0 but got " << yout[i] << std::endl;
+ return 1;
+ }
+ }
+
+ std::cout << "TESTS PASSED!" << std::endl;
+
+ rocsparse_destroy_handle(handle);
+ rocsparse_destroy_mat_descr(descr);
+ hipFree(rp);
+ hipFree(c);
+ hipFree(d);
+ hipFree(x);
+ hipFree(y);
+}
diff --git a/test.sh b/test.sh
new file mode 100755
index 000000000000..6032006c5291
--- /dev/null
+++ b/test.sh
@@ -0,0 +1,5 @@
+#! /usr/bin/env sh
+
+OUT=$(mktemp -d)
+/opt/rocm/bin/hipcc -o "$OUT"/test test.cpp -lrocsparse
+"$OUT"/test