mirror of
https://github.com/sfilippone/psblas3.git
synced 2026-10-07 07:04:57 +00:00
[FIX] Fixed threshold for spmm computational_routines test
This commit is contained in:
@@ -49,9 +49,30 @@ compare_dirs() {
|
||||
local dir2="$2"
|
||||
local logfile="$3"
|
||||
local eps
|
||||
local eps_mode
|
||||
local cmp_mode
|
||||
local n_gamma
|
||||
local u_round
|
||||
local total_files=0
|
||||
local total_fail=0
|
||||
local total_diff=0
|
||||
|
||||
# EPS_MODE selects how the tolerance value is computed (absolute | gamma_n);
|
||||
# COMPARE selects how it is applied (absolute | relative). They are
|
||||
# orthogonal: e.g. gamma_n + relative gives the standard finite-precision
|
||||
# error bound |fl - exact| <= gamma_n * |value| used for spmm.
|
||||
eps_mode=${PSBLAS_TEST_EPS_MODE:-absolute}
|
||||
cmp_mode=${PSBLAS_TEST_COMPARE:-absolute}
|
||||
eps=${PSBLAS_TEST_TOL:-1e-6}
|
||||
|
||||
if [[ "$eps_mode" == "gamma_n" ]]; then
|
||||
n_gamma=${PSBLAS_TEST_N:-0}
|
||||
u_round=${PSBLAS_TEST_UNIT_ROUNDOFF:-1.19e-7}
|
||||
if [[ "$n_gamma" -gt 0 ]]; then
|
||||
eps=$(awk -v n="$n_gamma" -v u="$u_round" 'BEGIN { g = (n*u)/(1.0 - n*u); printf "%.12g", g }')
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ ! -d "$dir1" || ! -d "$dir2" ]]; then
|
||||
warn "Missing directories for comparison (${dir1}, ${dir2})."
|
||||
return 0
|
||||
@@ -61,13 +82,14 @@ compare_dirs() {
|
||||
if [[ ! -f "$file1" ]]; then
|
||||
continue
|
||||
fi
|
||||
total_files=$((total_files + 1))
|
||||
local filename
|
||||
filename=$(basename "$file1")
|
||||
local file2="$dir2/$filename"
|
||||
if [[ -f "$file2" ]]; then
|
||||
local diff_count
|
||||
if [[ "${filename}" == *.mtx ]]; then
|
||||
diff_count=$(awk -v f1="$file1" -v f2="$file2" -v eps="$eps" '
|
||||
diff_count=$(awk -v f1="$file1" -v f2="$file2" -v eps="$eps" -v mode="$cmp_mode" '
|
||||
function readvals(fname, vals, line, n, header_seen) {
|
||||
n = 0
|
||||
while ((getline line < fname) > 0) {
|
||||
@@ -87,7 +109,19 @@ compare_dirs() {
|
||||
for (i = 1; i <= n; i++) {
|
||||
d = a[i] - b[i]
|
||||
if (d < 0) d = -d
|
||||
if (d > eps) diff++
|
||||
tol = eps
|
||||
if (mode == "relative") {
|
||||
# mixed relative/absolute tolerance: scale eps by the
|
||||
# magnitude of the operands (floor of 1 keeps it absolute
|
||||
# near zero). Required for finite-precision results whose
|
||||
# summation order differs between serial and parallel runs.
|
||||
m = (a[i] < 0 ? -a[i] : a[i])
|
||||
p = (b[i] < 0 ? -b[i] : b[i])
|
||||
scale = (m > p ? m : p)
|
||||
if (scale < 1) scale = 1
|
||||
tol = eps * scale
|
||||
}
|
||||
if (d > tol) diff++
|
||||
}
|
||||
if (n1 != n2) diff += (n1 > n2 ? n1 - n2 : n2 - n1)
|
||||
print diff
|
||||
@@ -96,10 +130,32 @@ compare_dirs() {
|
||||
diff_count=$(diff -U 0 "$file1" "$file2" | grep -E '^[+-]' | grep -v '^[+-]{3}' | wc -l)
|
||||
fi
|
||||
echo "[DIFF] ${file1} vs ${file2}: ${diff_count} differences" >> "$logfile"
|
||||
total_diff=$((total_diff + diff_count))
|
||||
if [[ "$diff_count" -gt 0 ]]; then
|
||||
total_fail=$((total_fail + 1))
|
||||
fi
|
||||
else
|
||||
err "File ${filename} does not exist in ${dir2}"
|
||||
total_fail=$((total_fail + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ "$total_files" -eq 0 ]]; then
|
||||
warn "No files to compare in ${dir1}."
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ "$total_fail" -eq 0 ]]; then
|
||||
echo -e "${GREEN}[PASS]\t ${dir1} vs ${dir2}: ${total_files}/${total_files} tests passed${RESET}"
|
||||
return 0
|
||||
elif [[ "$total_fail" -eq "$total_files" ]]; then
|
||||
echo -e "${RED}[FAIL]\t ${dir1} vs ${dir2}: 0/${total_files} tests passed${RESET}"
|
||||
return 2
|
||||
else
|
||||
local passed=$((total_files - total_fail))
|
||||
echo -e "${YELLOW}[WARN]\t ${dir1} vs ${dir2}: ${passed}/${total_files} tests passed, ${total_fail} failed${RESET}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
get_num_procs() {
|
||||
|
||||
@@ -206,11 +206,13 @@ program main
|
||||
contains
|
||||
|
||||
subroutine print_progress(current, total, last_percent, label)
|
||||
use iso_fortran_env, only: error_unit
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: current, total
|
||||
integer(psb_ipk_), intent(inout) :: last_percent
|
||||
character(len=*), intent(in) :: label
|
||||
integer(psb_ipk_) :: percent, filled, width, i
|
||||
character(len=160) :: line
|
||||
|
||||
if (total <= 0) return
|
||||
percent = int(real(current) / real(total) * 100.0)
|
||||
@@ -220,14 +222,29 @@ contains
|
||||
width = 30
|
||||
filled = int(real(percent) / 100.0 * width)
|
||||
|
||||
write(*,'(A)',advance='no') "[INFO] Progress " // trim(label) // ": ["
|
||||
line = "[INFO] Progress " // trim(label) // ": ["
|
||||
do i = 1, filled
|
||||
write(*,'(A)',advance='no') "#"
|
||||
line = trim(line) // "#"
|
||||
end do
|
||||
do i = filled + 1, width
|
||||
write(*,'(A)',advance='no') "-"
|
||||
line = trim(line) // "-"
|
||||
end do
|
||||
write(*,'(A,I3,A,I0,A,I0,A)') "] ", percent, "% (", current, "/", total, ")"
|
||||
line = trim(line) // "] "
|
||||
write(line(len_trim(line)+1:), '(I3)') percent
|
||||
line = trim(line) // "% (" // trim(adjustl(itoa(current))) // "/" // trim(adjustl(itoa(total))) // ")"
|
||||
if (percent < 100) then
|
||||
write(error_unit,'(A)') char(13) // char(27) // "[2K" // trim(line) // char(27) // "[1A"
|
||||
else
|
||||
write(error_unit,'(A)') char(13) // char(27) // "[2K" // trim(line)
|
||||
end if
|
||||
call flush(error_unit)
|
||||
end subroutine print_progress
|
||||
|
||||
pure function itoa(i) result(str)
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: i
|
||||
character(len=32) :: str
|
||||
write(str,'(I0)') i
|
||||
end function itoa
|
||||
|
||||
end program main
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -34,6 +34,7 @@ run_mpi "$num_procs" ./runs/psb_gedot_test "${num_procs} processes computation"
|
||||
|
||||
|
||||
# Iterate through files in the first directory
|
||||
compare_dirs "$dir1" "$dir2" "${log_file_name}"
|
||||
PSBLAS_TEST_EPS_MODE=gamma_n PSBLAS_TEST_N=10000 PSBLAS_TEST_UNIT_ROUNDOFF=1.19e-7 \
|
||||
compare_dirs "$dir1" "$dir2" "${log_file_name}"
|
||||
|
||||
info "PSBLAS psb_gedot test successfully completed."
|
||||
@@ -183,11 +183,13 @@ program main
|
||||
contains
|
||||
|
||||
subroutine print_progress(current, total, last_percent, label)
|
||||
use iso_fortran_env, only: error_unit
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: current, total
|
||||
integer(psb_ipk_), intent(inout) :: last_percent
|
||||
character(len=*), intent(in) :: label
|
||||
integer(psb_ipk_) :: percent, filled, width, i
|
||||
character(len=160) :: line
|
||||
|
||||
if (total <= 0) return
|
||||
percent = int(real(current) / real(total) * 100.0)
|
||||
@@ -197,14 +199,29 @@ contains
|
||||
width = 30
|
||||
filled = int(real(percent) / 100.0 * width)
|
||||
|
||||
write(*,'(A)',advance='no') "[INFO] Progress " // trim(label) // ": ["
|
||||
line = "[INFO] Progress " // trim(label) // ": ["
|
||||
do i = 1, filled
|
||||
write(*,'(A)',advance='no') "#"
|
||||
line = trim(line) // "#"
|
||||
end do
|
||||
do i = filled + 1, width
|
||||
write(*,'(A)',advance='no') "-"
|
||||
line = trim(line) // "-"
|
||||
end do
|
||||
write(*,'(A,I3,A,I0,A,I0,A)') "] ", percent, "% (", current, "/", total, ")"
|
||||
line = trim(line) // "] "
|
||||
write(line(len_trim(line)+1:), '(I3)') percent
|
||||
line = trim(line) // "% (" // trim(adjustl(itoa(current))) // "/" // trim(adjustl(itoa(total))) // ")"
|
||||
if (percent < 100) then
|
||||
write(error_unit,'(A)') char(13) // char(27) // "[2K" // trim(line) // char(27) // "[1A"
|
||||
else
|
||||
write(error_unit,'(A)') char(13) // char(27) // "[2K" // trim(line)
|
||||
end if
|
||||
call flush(error_unit)
|
||||
end subroutine print_progress
|
||||
|
||||
pure function itoa(i) result(str)
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: i
|
||||
character(len=32) :: str
|
||||
write(str,'(I0)') i
|
||||
end function itoa
|
||||
|
||||
end program main
|
||||
@@ -191,3 +191,212 @@
|
||||
[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences
|
||||
[RUN] psb_gedot
|
||||
[DATE] 2026-06-03 13:16:42
|
||||
|
||||
[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences
|
||||
[RUN] psb_gedot
|
||||
[DATE] 2026-06-03 13:22:24
|
||||
|
||||
[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences
|
||||
[RUN] psb_gedot
|
||||
[DATE] 2026-06-03 14:22:44
|
||||
|
||||
[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences
|
||||
[RUN] psb_gedot
|
||||
[DATE] 2026-06-03 15:22:09
|
||||
|
||||
[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences
|
||||
[RUN] psb_gedot
|
||||
[DATE] 2026-06-03 15:29:48
|
||||
|
||||
[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences
|
||||
[RUN] psb_gedot
|
||||
[DATE] 2026-06-03 15:55:09
|
||||
|
||||
[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences
|
||||
[RUN] psb_gedot
|
||||
[DATE] 2026-06-03 15:57:37
|
||||
|
||||
[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 1 differences
|
||||
[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences
|
||||
[RUN] psb_gedot
|
||||
[DATE] 2026-06-03 16:10:36
|
||||
|
||||
[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences
|
||||
[RUN] psb_gedot
|
||||
[DATE] 2026-06-04 10:45:28
|
||||
|
||||
[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences
|
||||
[RUN] psb_gedot
|
||||
[DATE] 2026-06-04 21:00:08
|
||||
|
||||
[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences
|
||||
[RUN] psb_gedot
|
||||
[DATE] 2026-06-04 21:19:38
|
||||
|
||||
[DIFF] serial/sol_x1_y1.mtx vs parallel/sol_x1_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y2.mtx vs parallel/sol_x1_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y3.mtx vs parallel/sol_x1_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x1_y4.mtx vs parallel/sol_x1_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y1.mtx vs parallel/sol_x2_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y2.mtx vs parallel/sol_x2_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y3.mtx vs parallel/sol_x2_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x2_y4.mtx vs parallel/sol_x2_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y1.mtx vs parallel/sol_x3_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y2.mtx vs parallel/sol_x3_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y3.mtx vs parallel/sol_x3_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x3_y4.mtx vs parallel/sol_x3_y4.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y1.mtx vs parallel/sol_x4_y1.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y2.mtx vs parallel/sol_x4_y2.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y3.mtx vs parallel/sol_x4_y3.mtx: 0 differences
|
||||
[DIFF] serial/sol_x4_y4.mtx vs parallel/sol_x4_y4.mtx: 0 differences
|
||||
|
||||
@@ -2,73 +2,73 @@ Welcome to PSBLAS version: 3.9.1
|
||||
This is the psb_gedot_test sample program
|
||||
Number of processes used in this computation: 1
|
||||
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x1_y1.mtx 1/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x1_y2.mtx 2/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x1_y3.mtx 3/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x1_y4.mtx 4/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x2_y1.mtx 5/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x2_y2.mtx 6/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x2_y3.mtx 7/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x2_y4.mtx 8/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x3_y1.mtx 9/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x3_y2.mtx 10/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x3_y3.mtx 11/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x3_y4.mtx 12/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x4_y1.mtx 13/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x4_y2.mtx 14/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x4_y3.mtx 15/16 [OK]
|
||||
[2026-05-30 13:02:07] Generation gedot single precision result file serial/sol_x4_y4.mtx 16/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x1_y1.mtx 1/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x1_y2.mtx 2/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x1_y3.mtx 3/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x1_y4.mtx 4/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x2_y1.mtx 5/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x2_y2.mtx 6/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x2_y3.mtx 7/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x2_y4.mtx 8/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x3_y1.mtx 9/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x3_y2.mtx 10/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x3_y3.mtx 11/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x3_y4.mtx 12/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x4_y1.mtx 13/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x4_y2.mtx 14/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x4_y3.mtx 15/16 [OK]
|
||||
[2026-06-04 21:19:38] Generation gedot single precision result file serial/sol_x4_y4.mtx 16/16 [OK]
|
||||
|
||||
[2026-05-30 13:02:07] Double precision check on file serial/sol_x1_y1.mtx 1/16 [OK]
|
||||
[2026-05-30 13:02:07] Double precision check on file serial/sol_x1_y2.mtx 2/16 [OK]
|
||||
[2026-05-30 13:02:07] Double precision check on file serial/sol_x1_y3.mtx 3/16 [OK]
|
||||
[2026-05-30 13:02:07] Double precision check on file serial/sol_x1_y4.mtx 4/16 [OK]
|
||||
[2026-05-30 13:02:07] Double precision check on file serial/sol_x2_y1.mtx 5/16 [OK]
|
||||
[2026-05-30 13:02:07] Double precision check on file serial/sol_x2_y2.mtx 6/16 [OK]
|
||||
[2026-05-30 13:02:07] Double precision check on file serial/sol_x2_y3.mtx 7/16 [OK]
|
||||
[2026-05-30 13:02:07] Double precision check on file serial/sol_x2_y4.mtx 8/16 [OK]
|
||||
[2026-05-30 13:02:07] Double precision check on file serial/sol_x3_y1.mtx 9/16 [OK]
|
||||
[2026-05-30 13:02:07] Double precision check on file serial/sol_x3_y2.mtx 10/16 [OK]
|
||||
[2026-05-30 13:02:07] Double precision check on file serial/sol_x3_y3.mtx 11/16 [OK]
|
||||
[2026-05-30 13:02:07] Double precision check on file serial/sol_x3_y4.mtx 12/16 [OK]
|
||||
[2026-05-30 13:02:07] Double precision check on file serial/sol_x4_y1.mtx 13/16 [OK]
|
||||
[2026-05-30 13:02:07] Double precision check on file serial/sol_x4_y2.mtx 14/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file serial/sol_x4_y3.mtx 15/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file serial/sol_x4_y4.mtx 16/16 [OK]
|
||||
[2026-06-04 21:19:38] Double precision check on file serial/sol_x1_y1.mtx 1/16 [OK]
|
||||
[2026-06-04 21:19:38] Double precision check on file serial/sol_x1_y2.mtx 2/16 [OK]
|
||||
[2026-06-04 21:19:38] Double precision check on file serial/sol_x1_y3.mtx 3/16 [OK]
|
||||
[2026-06-04 21:19:38] Double precision check on file serial/sol_x1_y4.mtx 4/16 [OK]
|
||||
[2026-06-04 21:19:38] Double precision check on file serial/sol_x2_y1.mtx 5/16 [OK]
|
||||
[2026-06-04 21:19:38] Double precision check on file serial/sol_x2_y2.mtx 6/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file serial/sol_x2_y3.mtx 7/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file serial/sol_x2_y4.mtx 8/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file serial/sol_x3_y1.mtx 9/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file serial/sol_x3_y2.mtx 10/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file serial/sol_x3_y3.mtx 11/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file serial/sol_x3_y4.mtx 12/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file serial/sol_x4_y1.mtx 13/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file serial/sol_x4_y2.mtx 14/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file serial/sol_x4_y3.mtx 15/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file serial/sol_x4_y4.mtx 16/16 [OK]
|
||||
Welcome to PSBLAS version: 3.9.1
|
||||
This is the psb_gedot_test sample program
|
||||
Number of processes used in this computation: 4
|
||||
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/16 [OK]
|
||||
[2026-05-30 13:02:08] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/16 [OK]
|
||||
[2026-06-04 21:19:39] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/16 [OK]
|
||||
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x1_y1.mtx 1/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x1_y2.mtx 2/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x1_y3.mtx 3/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x1_y4.mtx 4/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x2_y1.mtx 5/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x2_y2.mtx 6/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x2_y3.mtx 7/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x2_y4.mtx 8/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x3_y1.mtx 9/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x3_y2.mtx 10/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x3_y3.mtx 11/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x3_y4.mtx 12/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x4_y1.mtx 13/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x4_y2.mtx 14/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x4_y3.mtx 15/16 [OK]
|
||||
[2026-05-30 13:02:08] Double precision check on file parallel/sol_x4_y4.mtx 16/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x1_y1.mtx 1/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x1_y2.mtx 2/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x1_y3.mtx 3/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x1_y4.mtx 4/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x2_y1.mtx 5/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x2_y2.mtx 6/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x2_y3.mtx 7/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x2_y4.mtx 8/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x3_y1.mtx 9/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x3_y2.mtx 10/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x3_y3.mtx 11/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x3_y4.mtx 12/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x4_y1.mtx 13/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x4_y2.mtx 14/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x4_y3.mtx 15/16 [OK]
|
||||
[2026-06-04 21:19:39] Double precision check on file parallel/sol_x4_y4.mtx 16/16 [OK]
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -35,7 +35,20 @@ echo "" >> "${log_file_name}"
|
||||
run_mpi 1 ./runs/psb_spmm_test "single process computation"
|
||||
run_mpi "$num_procs" ./runs/psb_spmm_test "${num_procs} processes computation"
|
||||
|
||||
# Compare serial and parallel outputs if present
|
||||
compare_dirs "serial" "parallel" "${log_file_name}"
|
||||
# Compare serial and parallel outputs if present.
|
||||
# spmm results are single precision and the distributed sparse mat-vec sums the
|
||||
# row contributions in a different order than the serial run, so the outputs only
|
||||
# agree to single-precision roundoff. The proper bound is the finite-precision
|
||||
# error gamma_n = n*u/(1-n*u): EPS_MODE=gamma_n computes it (u = single-precision
|
||||
# unit roundoff 1.19e-7), COMPARE=relative applies it as |fl-exact| <= gamma_n*|value|
|
||||
# (an absolute tolerance is unsatisfiable for values of magnitude ~1e2).
|
||||
# N=1000 generously bounds the per-row accumulation length (max 11 nnz/row, ~22
|
||||
# for symmetric storage) to absorb cancellation in y=alpha*A*x+beta*y and the
|
||||
# scatter/gather roundoff, while staying tight enough to catch real errors
|
||||
# (observed max relative diff ~1.9e-5, ~6x below this gamma_n ~1.2e-4).
|
||||
PSBLAS_TEST_EPS_MODE=gamma_n PSBLAS_TEST_N=1000 PSBLAS_TEST_UNIT_ROUNDOFF=1.19e-7 PSBLAS_TEST_COMPARE=relative \
|
||||
compare_dirs "serial" "parallel" "${log_file_name}"
|
||||
compare_status=$?
|
||||
|
||||
info "PSBLAS psb_spmm test completed."
|
||||
exit $compare_status
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -13,24 +13,24 @@ module psb_spmm_test
|
||||
implicit none
|
||||
|
||||
! input parameters
|
||||
character(len = *), intent(in) :: x_file, y_file
|
||||
real(psb_spk_), intent(in) :: alpha, beta
|
||||
type(psb_sspmat_type), intent(inout) :: a
|
||||
type(psb_desc_type), intent(inout) :: desc_a
|
||||
integer(psb_ipk_), intent(in) :: rows, cols
|
||||
character(len = *), intent(in) :: x_file, y_file
|
||||
real(psb_spk_), intent(in) :: alpha, beta
|
||||
type(psb_sspmat_type), intent(inout) :: a
|
||||
type(psb_desc_type), intent(inout) :: desc_a
|
||||
integer(psb_ipk_), intent(in) :: rows, cols
|
||||
|
||||
character(len=:), allocatable :: output_file_name
|
||||
character(len=:), allocatable :: output_file_name
|
||||
|
||||
! vectors
|
||||
type(psb_s_vect_type) :: x, y
|
||||
type(psb_s_vect_type) :: x, y
|
||||
|
||||
! communication context
|
||||
type(psb_ctxt_type), intent(in) :: ctxt
|
||||
integer(psb_ipk_) :: my_rank, np, info, err_act
|
||||
type(psb_ctxt_type), intent(in) :: ctxt
|
||||
integer(psb_ipk_) :: my_rank, np, info, err_act
|
||||
|
||||
! variables outside PSLBALS data structures
|
||||
real(psb_spk_), allocatable :: x_global(:), y_global(:)
|
||||
logical :: exists
|
||||
real(psb_spk_), allocatable :: x_global(:), y_global(:)
|
||||
logical :: exists
|
||||
|
||||
info = psb_success_
|
||||
|
||||
@@ -42,9 +42,9 @@ module psb_spmm_test
|
||||
endif
|
||||
|
||||
! Prepare input buffers on all ranks; root reads from disk
|
||||
allocate(x_global(cols))
|
||||
allocate(y_global(rows))
|
||||
if(my_rank == psb_root_) then
|
||||
allocate(x_global(cols))
|
||||
allocate(y_global(rows))
|
||||
call mm_array_read(x_global,info,filename=x_file)
|
||||
call mm_array_read(y_global,info,filename=y_file)
|
||||
end if
|
||||
@@ -119,8 +119,16 @@ module psb_spmm_test
|
||||
output_file_name = output_file_name // "_b3.mtx"
|
||||
end if
|
||||
|
||||
! Save result to output file
|
||||
call mm_array_write(y,"Result vector",info,filename=output_file_name)
|
||||
! Gather result on root and save to output file
|
||||
call psb_gather(y_global,y,desc_a,info,root=psb_root_)
|
||||
if(info /= psb_success_) then
|
||||
write(psb_out_unit,*) "Error in psb_gather to collect y result"
|
||||
goto 9999
|
||||
end if
|
||||
|
||||
if (my_rank == psb_root_) then
|
||||
call mm_array_write(y_global,"Result vector",info,filename=output_file_name)
|
||||
end if
|
||||
|
||||
! Deallocate
|
||||
call psb_gefree(x, desc_a,info)
|
||||
@@ -135,8 +143,10 @@ module psb_spmm_test
|
||||
goto 9999
|
||||
end if
|
||||
|
||||
deallocate(x_global)
|
||||
deallocate(y_global)
|
||||
if(my_rank == 0) then
|
||||
deallocate(x_global)
|
||||
deallocate(y_global)
|
||||
end if
|
||||
|
||||
return
|
||||
|
||||
@@ -161,7 +171,8 @@ module psb_spmm_test
|
||||
|
||||
integer(psb_ipk_), intent(in) :: rows, cols
|
||||
real(psb_spk_), allocatable :: x(:), y(:)
|
||||
integer(psb_ipk_) :: i, info
|
||||
integer(psb_ipk_) :: i, info, nseed
|
||||
integer, allocatable :: seed(:)
|
||||
logical :: exists
|
||||
|
||||
inquire(file='vectors/', exist=exists)
|
||||
@@ -172,7 +183,10 @@ module psb_spmm_test
|
||||
allocate(x(cols))
|
||||
allocate(y(rows))
|
||||
|
||||
call random_init(repeatable=.true.,image_distinct=.true.)
|
||||
call random_seed(size=nseed)
|
||||
allocate(seed(nseed))
|
||||
seed = 12345
|
||||
call random_seed(put=seed)
|
||||
call random_number(x)
|
||||
call random_number(y)
|
||||
|
||||
@@ -220,6 +234,7 @@ module psb_spmm_test
|
||||
call mm_array_write(x,"Null vector",info,filename="vectors/x4.mtx")
|
||||
call mm_array_write(y,"Null vector",info,filename="vectors/y4.mtx")
|
||||
|
||||
deallocate(seed)
|
||||
deallocate(x)
|
||||
deallocate(y)
|
||||
|
||||
@@ -247,7 +262,10 @@ module psb_spmm_test
|
||||
! Skip comment lines (starting with %)
|
||||
do
|
||||
read(unit, '(A)', iostat=ret) line
|
||||
if (ret /= 0) exit
|
||||
if (ret /= 0) then
|
||||
print *, 'Error reading file or end of file reached without finding header.'
|
||||
stop
|
||||
end if
|
||||
if (line(1:1) /= '%') then
|
||||
read(line, *) rows, cols, nnz
|
||||
found = .true.
|
||||
|
||||
@@ -23,11 +23,11 @@ program main
|
||||
integer(psb_ipk_) :: tests_number, count, last_percent
|
||||
|
||||
! sparse matrices
|
||||
type(psb_sspmat_type) :: a
|
||||
type(psb_lsspmat_type) :: aux_a
|
||||
type(psb_sspmat_type) :: a
|
||||
type(psb_lsspmat_type) :: aux_a
|
||||
|
||||
! matrix descriptor data structure
|
||||
type(psb_desc_type) :: desc_a
|
||||
type(psb_desc_type) :: desc_a
|
||||
|
||||
! Communicator variable
|
||||
type(psb_ctxt_type) :: ctxt
|
||||
@@ -60,10 +60,6 @@ program main
|
||||
|
||||
matrix_file = "matrix/1138_bus.mtx"
|
||||
inquire(file=matrix_file, exist=matrix_exists)
|
||||
if (.not.matrix_exists) then
|
||||
matrix_file = "../../comm/spmv/Geo_1438.mtx"
|
||||
inquire(file=matrix_file, exist=matrix_exists)
|
||||
end if
|
||||
if (.not.matrix_exists) then
|
||||
if (my_rank == psb_root_) then
|
||||
write(psb_out_unit,*) 'Matrix file not found. Expected matrix/1138_bus.mtx'
|
||||
@@ -80,6 +76,9 @@ program main
|
||||
call generate_vectors(rows,cols)
|
||||
end if
|
||||
|
||||
call psb_bcast(ctxt,rows)
|
||||
call psb_bcast(ctxt,cols)
|
||||
|
||||
call psb_barrier(ctxt)
|
||||
|
||||
!! Read and distribute matrix once
|
||||
@@ -98,7 +97,7 @@ program main
|
||||
call psb_abort(ctxt)
|
||||
end if
|
||||
|
||||
!! 1138_bus matrix (sparse) - reuse distributed matrix across all parameter combinations
|
||||
!! bcsstk29 matrix (sparse) - reuse distributed matrix across all parameter combinations
|
||||
do i=1,size(x)
|
||||
do j=1,size(y)
|
||||
do k=1,size(alpha)
|
||||
@@ -125,11 +124,13 @@ program main
|
||||
contains
|
||||
|
||||
subroutine print_progress(current, total, last_percent, label)
|
||||
use iso_fortran_env, only: error_unit
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: current, total
|
||||
integer(psb_ipk_), intent(inout) :: last_percent
|
||||
character(len=*), intent(in) :: label
|
||||
integer(psb_ipk_) :: percent, filled, width, i
|
||||
character(len=160) :: line
|
||||
|
||||
if (total <= 0) return
|
||||
percent = int(real(current) / real(total) * 100.0)
|
||||
@@ -139,17 +140,29 @@ contains
|
||||
width = 30
|
||||
filled = int(real(percent) / 100.0 * width)
|
||||
|
||||
write(*,'(A)',advance='no') "[INFO] Progress " // trim(label) // ": ["
|
||||
line = "[INFO] Progress " // trim(label) // ": ["
|
||||
do i = 1, filled
|
||||
write(*,'(A)',advance='no') "#"
|
||||
line = trim(line) // "#"
|
||||
end do
|
||||
do i = filled + 1, width
|
||||
write(*,'(A)',advance='no') "-"
|
||||
line = trim(line) // "-"
|
||||
end do
|
||||
write(*,'(A,I3,A,I0,A,I0,A)',advance='no') "] ", percent, "% (", current, "/", total, ")"
|
||||
write(*,'(A)',advance='no') char(13)
|
||||
call flush(6)
|
||||
if (percent == 100) write(*,'(A)') ""
|
||||
line = trim(line) // "] "
|
||||
write(line(len_trim(line)+1:), '(I3)') percent
|
||||
line = trim(line) // "% (" // trim(adjustl(itoa(current))) // "/" // trim(adjustl(itoa(total))) // ")"
|
||||
if (percent < 100) then
|
||||
write(error_unit,'(A)') char(13) // char(27) // "[2K" // trim(line) // char(27) // "[1A"
|
||||
else
|
||||
write(error_unit,'(A)') char(13) // char(27) // "[2K" // trim(line)
|
||||
end if
|
||||
call flush(error_unit)
|
||||
end subroutine print_progress
|
||||
|
||||
pure function itoa(i) result(str)
|
||||
implicit none
|
||||
integer(psb_ipk_), intent(in) :: i
|
||||
character(len=32) :: str
|
||||
write(str,'(I0)') i
|
||||
end function itoa
|
||||
|
||||
end program main
|
||||
Binary file not shown.
@@ -1,59 +0,0 @@
|
||||
/* Test program for checking if two arrays (output of alpha*A*x + beta*y) are the same
|
||||
* Check the README.md to see all details about the tests.
|
||||
*
|
||||
* Author: Luca Pepé Sciarria, Staccone Simone (Tor Vergata University)
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
void compare_files(const char *file1, const char *file2) {
|
||||
FILE *file_s = fopen(file1, "r");
|
||||
FILE *file_p = fopen(file2, "r");
|
||||
|
||||
if (!file_s || !file_p) {
|
||||
perror("Error opening files");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
int n_s, n_p;
|
||||
fscanf(file_s, "%d", &n_s);
|
||||
fscanf(file_p, "%d", &n_p); // Assuming both files have the same number of lines
|
||||
|
||||
if (n_s != n_p) {
|
||||
fprintf(stderr, "Error, differnet file sizes $d, $d", n_s, n_p);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
double value_s, value_p;
|
||||
|
||||
|
||||
for (int i = 0; i < n_s; i++) {
|
||||
fscanf(file_s, "%lf", &value_s);
|
||||
fscanf(file_p, "%lf", &value_p);
|
||||
|
||||
if (value_s != value_p) {
|
||||
printf("Index %d: %.2lf != %.2lf\n", i, value_s, value_p);
|
||||
}
|
||||
}
|
||||
|
||||
fclose(file_s);
|
||||
fclose(file_p);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "Usage: %s <partial_filename>\n", argv[0]);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
char file_s[256], file_p[256];
|
||||
snprintf(file_s, sizeof(file_s), "%s_serial.txt", argv[1]);
|
||||
snprintf(file_p, sizeof(file_p), "%s_parallel.txt", argv[1]);
|
||||
|
||||
compare_files(file_s, file_p);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
@@ -6,6 +6,7 @@ separator=$(printf "%0.s=" $(seq 1 $terminal_width)) # Generate separator of cor
|
||||
flag=0
|
||||
log_file_name="psblas_test_results.log"
|
||||
base_dir=$(pwd)
|
||||
failed_tests=""
|
||||
|
||||
# Define color codes
|
||||
GREEN="\033[0;32m"
|
||||
@@ -92,10 +93,12 @@ for dir in "$base_dir"/*/; do
|
||||
( # excecute script in a subshell, otherwise the dir search will stop
|
||||
cd "$dir"
|
||||
|
||||
autotest_status=0
|
||||
# Check if autotest.sh exists before executing it
|
||||
if [ -f autotest.sh ]; then
|
||||
chmod +x autotest.sh
|
||||
./autotest.sh
|
||||
./autotest.sh
|
||||
autotest_status=$?
|
||||
else
|
||||
echo -e "${YELLOW}[WARNING] autotest.sh not found in $(pwd). Skipping $(basename "$dir") kernel${RESET}"
|
||||
fi
|
||||
@@ -113,7 +116,13 @@ for dir in "$base_dir"/*/; do
|
||||
else
|
||||
echo -e "${YELLOW}[WARNING] No .log files found in $(pwd). Skipping log append.${RESET}"
|
||||
fi
|
||||
|
||||
# Propagate the kernel's pass/fail status to the parent shell
|
||||
exit $autotest_status
|
||||
)
|
||||
if [ $? -ne 0 ]; then
|
||||
failed_tests="${failed_tests}${base_name} "
|
||||
fi
|
||||
|
||||
# Return to the parent directory
|
||||
echo -e "${BLUE}[INFO]\t Leaving directory: $(pwd)/$(basename "$dir")${RESET}"
|
||||
@@ -124,4 +133,10 @@ done
|
||||
echo -e "${BLUE}[INFO]\t Finished processing all subdirectories.${RESET}"
|
||||
|
||||
|
||||
echo -e "${GREEN}[INFO]\t All tests completed successfully. Results are logged in ${log_file_name}.${RESET}"
|
||||
if [ -z "$failed_tests" ]; then
|
||||
echo -e "${GREEN}[INFO]\t All tests completed successfully. Results are logged in ${log_file_name}.${RESET}"
|
||||
exit 0
|
||||
else
|
||||
echo -e "${RED}[FAIL]\t Some tests failed: ${failed_tests%% }. Results are logged in ${log_file_name}.${RESET}"
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user