diff --git a/.github/workflows/c910v.yml b/.github/workflows/c910v.yml index c5b497316..9981c437b 100644 --- a/.github/workflows/c910v.yml +++ b/.github/workflows/c910v.yml @@ -83,9 +83,39 @@ jobs: - name: test run: | - export PATH=$GITHUB_WORKSPACE/qemu-install/bin/:$PATH - qemu-riscv64 ./utest/openblas_utest - qemu-riscv64 ./utest/openblas_utest_ext + run_with_retry() { + local cmd="$1" + local time_out=10 + local retries=10 + local attempt=0 + + for ((i=1; i<=retries; i++)); do + attempt=$((i)) + if timeout -s 12 --preserve-status $time_out $cmd; then + echo "Command succeeded on attempt $i." + return 0 + else + local exit_code=$? + if [ $exit_code -eq 140 ]; then + echo "Attempt $i timed out (retrying...)" + time_out=$((time_out + 5)) + else + echo "Attempt $i failed with exit code $exit_code. Aborting workflow." + exit $exit_code + fi + fi + done + echo "All $retries attempts failed, giving up." + echo "Final failure was due to timeout." + echo "Aborting workflow." + exit $exit_code + } + export PATH=$GITHUB_WORKSPACE/qemu-install/bin:$PATH + which qemu-riscv64 + export QEMU_BIN=$(which qemu-riscv64) + run_with_retry "$QEMU_BIN ./utest/openblas_utest" + run_with_retry "$QEMU_BIN ./utest/openblas_utest_ext" + OPENBLAS_NUM_THREADS=2 qemu-riscv64 ./ctest/xscblat1 OPENBLAS_NUM_THREADS=2 qemu-riscv64 ./ctest/xdcblat1 OPENBLAS_NUM_THREADS=2 qemu-riscv64 ./ctest/xccblat1 diff --git a/kernel/riscv64/KERNEL.RISCV64_ZVL256B b/kernel/riscv64/KERNEL.RISCV64_ZVL256B index 9915fd949..ba7a52bbf 100644 --- a/kernel/riscv64/KERNEL.RISCV64_ZVL256B +++ b/kernel/riscv64/KERNEL.RISCV64_ZVL256B @@ -201,3 +201,9 @@ endif ifndef ZGEMM_BETA ZGEMM_BETA = ../generic/zgemm_beta.c endif + +ZOMATCOPY_CN = zomatcopy_cn_vector.c +COMATCOPY_CN = zomatcopy_cn_vector.c + +DOMATCOPY_CN = omatcopy_cn_vector.c +SOMATCOPY_CN = omatcopy_cn_vector.c diff --git a/kernel/riscv64/omatcopy_cn_vector.c b/kernel/riscv64/omatcopy_cn_vector.c new file mode 100644 index 000000000..d079310b8 --- /dev/null +++ b/kernel/riscv64/omatcopy_cn_vector.c @@ -0,0 +1,123 @@ +/*************************************************************************** +Copyright (c) 2013, The OpenBLAS Project +All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. +3. Neither the name of the OpenBLAS project nor the names of +its contributors may be used to endorse or promote products +derived from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*****************************************************************************/ + +#include "common.h" +#if !defined(DOUBLE) +#define VSETVL_MAX RISCV_RVV(vsetvlmax_e32m4)() +#define VSETVL(n) RISCV_RVV(vsetvl_e32m4)(n) +#define FLOAT_V_T vfloat32m4_t +#define VLEV_FLOAT RISCV_RVV(vle32_v_f32m4) +#define VSEV_FLOAT RISCV_RVV(vse32_v_f32m4) +#define VFMULVF_FLOAT RISCV_RVV(vfmul_vf_f32m4) +#define VFMVVF_FLOAT RISCV_RVV(vfmv_v_f_f32m4) +#else +#define VSETVL_MAX RISCV_RVV(vsetvlmax_e64m4)() +#define VSETVL(n) RISCV_RVV(vsetvl_e64m4)(n) +#define FLOAT_V_T vfloat64m4_t +#define VLEV_FLOAT RISCV_RVV(vle64_v_f64m4) +#define VSEV_FLOAT RISCV_RVV(vse64_v_f64m4) +#define VFMULVF_FLOAT RISCV_RVV(vfmul_vf_f64m4) +#define VFMVVF_FLOAT RISCV_RVV(vfmv_v_f_f64m4) +#endif + + +int CNAME(BLASLONG rows, BLASLONG cols, FLOAT alpha, FLOAT *a, BLASLONG lda, FLOAT *b, BLASLONG ldb) +{ + BLASLONG i,j; + FLOAT *aptr,*bptr; + size_t vl; + + FLOAT_V_T va, vb,va1,vb1; + if ( rows <= 0 ) return(0); + if ( cols <= 0 ) return(0); + + aptr = a; + bptr = b; + + if ( alpha == 0.0 ) + { + vl = VSETVL_MAX; + va = VFMVVF_FLOAT(0, vl); + for ( i=0; i