Skip to content

Commit 8ea5880

Browse files
authored
Merge pull request #157 from scivision/select-precision
Select precision
2 parents 3e0da65 + 60639e7 commit 8ea5880

21 files changed

Lines changed: 792 additions & 512 deletions

File tree

.github/workflows/cmake.yml

Lines changed: 82 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,19 @@ jobs:
4444
fail-fast: false
4545
steps:
4646

47-
- name: Checkout ScaLAPACK
48-
uses: actions/checkout@v4
47+
- &checkout
48+
name: Checkout ScaLAPACK
49+
uses: actions/checkout@v6
4950

50-
- name: Setup MPI
51+
- &setup-mpi
52+
name: Setup MPI
5153
# uses: mpi4py/setup-mpi@v1
5254
run: |
5355
sudo apt -y update
5456
sudo apt -y install openmpi-bin libopenmpi-dev
5557
56-
- name: Install BLAS and LAPACK
58+
- &setup-num
59+
name: Install BLAS and LAPACK
5760
run: sudo apt -y install libblas-dev liblapack-dev
5861

5962
- name: Setup CMake
@@ -72,24 +75,91 @@ jobs:
7275
-DSCALAPACK_BUILD_TESTS=ON \
7376
-DMPIEXEC_PREFLAGS=${{env.MPIEXEC_PREFLAGS}}
7477
75-
- name: Build
78+
- &cmake-build
79+
name: Build
7680
run: >
7781
cmake --build build
7882
79-
- name: Test
80-
# CMake<3.20 does not have -B option
81-
working-directory: ${{github.workspace}}/build
83+
- &cmake-test
84+
name: Test
8285
run: >
83-
ctest --output-on-failure -j $(nproc)
86+
ctest --test-dir build --output-on-failure -j $(nproc)
8487
85-
- name: Install
88+
- &cmake-install
89+
name: Install
8690
run: cmake --install build --prefix scalapack_install
8791

92+
select-precision:
93+
name: >
94+
Precision
95+
${{ matrix.single && 'single' || '' }}
96+
${{ matrix.double && 'double' || '' }}
97+
${{ matrix.complex && 'complex' || '' }}
98+
${{ matrix.complex16 && 'complex16' || '' }}
99+
runs-on: ubuntu-latest
100+
strategy:
101+
matrix:
102+
include:
103+
- single: true
104+
double: false
105+
complex: false
106+
complex16: false
107+
- single: false
108+
double: true
109+
complex: false
110+
complex16: false
111+
- single: false
112+
double: false
113+
complex: true
114+
complex16: false
115+
- single: false
116+
double: false
117+
complex: false
118+
complex16: true
119+
- single: true
120+
double: false
121+
complex: true
122+
complex16: false
123+
- single: false
124+
double: true
125+
complex: false
126+
complex16: true
127+
- single: true
128+
double: true
129+
complex: false
130+
complex16: false
131+
fail-fast: true
132+
133+
steps:
134+
135+
- *checkout
136+
- *setup-mpi
137+
- *setup-num
138+
139+
- name: CMake configuration
140+
# TODO: Use cmake presets for newer versions
141+
# TODO: Simplify the defaults to not require configuration
142+
run: >
143+
cmake -B build \
144+
-G Ninja \
145+
-DBUILD_SHARED_LIBS=ON \
146+
-DSCALAPACK_BUILD_TESTS=ON \
147+
-DMPIEXEC_PREFLAGS=${{env.MPIEXEC_PREFLAGS}} \
148+
-DBUILD_SINGLE:BOOL=${{ matrix.single }} \
149+
-DBUILD_DOUBLE:BOOL=${{ matrix.double }} \
150+
-DBUILD_COMPLEX:BOOL=${{ matrix.complex }} \
151+
-DBUILD_COMPLEX16:BOOL=${{ matrix.complex16 }}
152+
153+
- *cmake-build
154+
155+
- *cmake-test
156+
157+
- *cmake-install
158+
88159
freebsd:
89160
runs-on: ubuntu-latest
90161
steps:
91-
- name: Repository checkout
92-
uses: actions/checkout@v4
162+
- *checkout
93163
- uses: cross-platform-actions/action@v0.29.0
94164
with:
95165
operating_system: 'freebsd'

BLACS/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
add_subdirectory(SRC)
2-
if(${SCALAPACK_BUILD_TESTS})
2+
if(SCALAPACK_BUILD_TESTS)
33
add_subdirectory(TESTING)
44
endif()

BLACS/SRC/CMakeLists.txt

Lines changed: 41 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
# --------------------------
22
# The communication routines
33
# --------------------------
4-
set (comm
5-
igesd2d_.c sgesd2d_.c dgesd2d_.c cgesd2d_.c zgesd2d_.c
6-
itrsd2d_.c strsd2d_.c dtrsd2d_.c ctrsd2d_.c ztrsd2d_.c
7-
igerv2d_.c sgerv2d_.c dgerv2d_.c cgerv2d_.c zgerv2d_.c
8-
itrrv2d_.c strrv2d_.c dtrrv2d_.c ctrrv2d_.c ztrrv2d_.c
9-
igebs2d_.c sgebs2d_.c dgebs2d_.c cgebs2d_.c zgebs2d_.c
10-
igebr2d_.c sgebr2d_.c dgebr2d_.c cgebr2d_.c zgebr2d_.c
11-
itrbs2d_.c strbs2d_.c dtrbs2d_.c ctrbs2d_.c ztrbs2d_.c
12-
itrbr2d_.c strbr2d_.c dtrbr2d_.c ctrbr2d_.c ztrbr2d_.c
13-
igsum2d_.c sgsum2d_.c dgsum2d_.c cgsum2d_.c zgsum2d_.c
14-
igamx2d_.c sgamx2d_.c dgamx2d_.c cgamx2d_.c zgamx2d_.c
15-
igamn2d_.c sgamn2d_.c dgamn2d_.c cgamn2d_.c zgamn2d_.c)
16-
4+
set(comm
5+
igesd2d_.c itrsd2d_.c igerv2d_.c itrrv2d_.c igebs2d_.c igebr2d_.c itrbs2d_.c itrbr2d_.c igsum2d_.c igamx2d_.c igamn2d_.c
6+
dgsum2d_.c dgamx2d_.c dgamn2d_.c
7+
)
8+
if(BUILD_SINGLE)
9+
list(APPEND comm sgesd2d_.c strsd2d_.c sgerv2d_.c strrv2d_.c sgebs2d_.c sgebr2d_.c strbs2d_.c strbr2d_.c sgsum2d_.c sgamx2d_.c sgamn2d_.c)
10+
endif()
11+
if(BUILD_DOUBLE)
12+
list(APPEND comm dgesd2d_.c dtrsd2d_.c dgerv2d_.c dtrrv2d_.c dgebs2d_.c dgebr2d_.c dtrbs2d_.c dtrbr2d_.c)
13+
endif()
14+
if(BUILD_COMPLEX)
15+
list(APPEND comm cgesd2d_.c ctrsd2d_.c cgerv2d_.c ctrrv2d_.c cgebs2d_.c cgebr2d_.c ctrbs2d_.c ctrbr2d_.c cgsum2d_.c cgamx2d_.c cgamn2d_.c)
16+
endif()
17+
if(BUILD_COMPLEX16)
18+
list(APPEND comm zgesd2d_.c ztrsd2d_.c zgerv2d_.c ztrrv2d_.c zgebs2d_.c zgebr2d_.c ztrbs2d_.c ztrbr2d_.c zgsum2d_.c zgamx2d_.c zgamn2d_.c)
19+
endif()
1720
# --------------------
1821
# The support routines
1922
# --------------------
@@ -39,20 +42,32 @@ set (internal
3942
BI_BuffIsFree.c BI_imvcopy.c BI_smvcopy.c BI_dmvcopy.c
4043
BI_ivmcopy.c BI_svmcopy.c BI_dvmcopy.c
4144
BI_Pack.c BI_Unpack.c BI_GetMpiGeType.c BI_GetMpiTrType.c
42-
BI_ivvsum.c BI_svvsum.c BI_dvvsum.c BI_cvvsum.c BI_zvvsum.c
43-
BI_ivvamx.c BI_svvamx.c BI_dvvamx.c BI_cvvamx.c BI_zvvamx.c
44-
BI_ivvamx2.c BI_svvamx2.c BI_dvvamx2.c BI_cvvamx2.c BI_zvvamx2.c
45-
BI_ivvamn.c BI_svvamn.c BI_dvvamn.c BI_cvvamn.c BI_zvvamn.c
46-
BI_ivvamn2.c BI_svvamn2.c BI_dvvamn2.c BI_cvvamn2.c BI_zvvamn2.c
47-
BI_iMPI_amx.c BI_sMPI_amx.c BI_dMPI_amx.c BI_cMPI_amx.c
48-
BI_zMPI_amx.c BI_iMPI_amx2.c BI_sMPI_amx2.c BI_dMPI_amx2.c
49-
BI_cMPI_amx2.c BI_zMPI_amx2.c BI_iMPI_amn.c BI_sMPI_amn.c
50-
BI_dMPI_amn.c BI_cMPI_amn.c BI_zMPI_amn.c BI_iMPI_amn2.c
51-
BI_sMPI_amn2.c BI_dMPI_amn2.c BI_cMPI_amn2.c BI_zMPI_amn2.c
52-
BI_cMPI_sum.c BI_zMPI_sum.c BI_ContxtNum.c BI_GlobalVars.c
53-
BI_TransUserComm.c )
54-
45+
BI_ivvsum.c BI_ivvamx.c BI_ivvamx2.c BI_ivvamn.c BI_ivvamn2.c
46+
BI_iMPI_amx.c BI_iMPI_amx2.c BI_iMPI_amn.c BI_iMPI_amn2.c
47+
BI_ContxtNum.c BI_GlobalVars.c BI_TransUserComm.c
48+
BI_dvvsum.c BI_dvvamx.c BI_dvvamx2.c BI_dvvamn.c BI_dvvamn2.c
49+
BI_dMPI_amx.c BI_dMPI_amx2.c BI_dMPI_amn.c BI_dMPI_amn2.c
50+
)
5551

52+
if(BUILD_SINGLE)
53+
list(APPEND internal
54+
BI_svvsum.c BI_svvamx.c BI_svvamx2.c BI_svvamn.c BI_svvamn2.c
55+
BI_sMPI_amx.c BI_sMPI_amx2.c BI_sMPI_amn.c BI_sMPI_amn2.c
56+
BI_smvcopy.c BI_svmcopy.c
57+
)
58+
endif()
59+
if(BUILD_COMPLEX)
60+
list(APPEND internal
61+
BI_cvvsum.c BI_cvvamx.c BI_cvvamx2.c BI_cvvamn.c BI_cvvamn2.c
62+
BI_cMPI_amx.c BI_cMPI_amx2.c BI_cMPI_amn.c BI_cMPI_amn2.c BI_cMPI_sum.c
63+
)
64+
endif()
65+
if(BUILD_COMPLEX16)
66+
list(APPEND internal
67+
BI_zvvsum.c BI_zvvamx.c BI_zvvamx2.c BI_zvvamn.c BI_zvvamn2.c
68+
BI_zMPI_amx.c BI_zMPI_amx2.c BI_zMPI_amn.c BI_zMPI_amn2.c BI_zMPI_sum.c
69+
)
70+
endif()
5671
#
5772
# Note on CMAKE (from Brad - Kitware)
5873
#
@@ -81,4 +96,3 @@ endforeach()
8196
set(blacs ${srcs} ${srcs_C} ${internal})
8297
#add_library(scalapack ${srcs} ${srcs_C} ${internal})
8398
#scalapack_install_library(scalapack)
84-

BLACS/TESTING/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
if(NOT (BUILD_SINGLE AND BUILD_DOUBLE AND BUILD_COMPLEX AND BUILD_COMPLEX16))
2+
return()
3+
endif()
4+
15
set(FTestObj
26
blacstest.f btprim.f tools.f)
37

CMakeLists.txt

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,28 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${SCALAPACK_BINARY_DIR}/TESTING)
9494
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${SCALAPACK_BINARY_DIR}/lib)
9595
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${SCALAPACK_BINARY_DIR}/lib)
9696

97+
# --------------------------------------------------
98+
# Precision to build
99+
# By default all precisions are generated
100+
option(BUILD_SINGLE "Build single precision real" ON)
101+
option(BUILD_DOUBLE "Build double precision real" ON)
102+
option(BUILD_COMPLEX "Build single precision complex" ON)
103+
option(BUILD_COMPLEX16 "Build double precision complex" ON)
104+
if(BUILD_COMPLEX)
105+
set(BUILD_SINGLE true CACHE BOOL "Build single precision real" FORCE)
106+
message(STATUS "Building single precision real because single precision complex is enabled")
107+
endif()
108+
if(BUILD_COMPLEX16)
109+
set(BUILD_DOUBLE true CACHE BOOL "Build double precision real" FORCE)
110+
message(STATUS "Building double precision real because double precision complex is enabled")
111+
endif()
112+
113+
message(STATUS "Build single precision real: ${BUILD_SINGLE}")
114+
message(STATUS "Build double precision real: ${BUILD_DOUBLE}")
115+
message(STATUS "Build single precision complex: ${BUILD_COMPLEX}")
116+
message(STATUS "Build double precision complex: ${BUILD_COMPLEX16}")
117+
118+
97119
# --------------------------------------------------
98120
# By default static library
99121
function (invertBoolean varName varValue)
@@ -130,7 +152,7 @@ MESSAGE(STATUS "=========")
130152

131153
# --------------------------------------------------
132154
# Compiler Flags
133-
ADD_DEFINITIONS( "-D${CDEFS}")
155+
add_compile_definitions("${CDEFS}")
134156

135157
# --------------------------------------------------
136158
# ScaLAPACK needs BLAS and LAPACK
@@ -256,7 +278,7 @@ if(TARGET lapack)
256278
endif()
257279

258280
option(SCALAPACK_BUILD_TESTS "Build all tests of the ScaLAPACK library" ON)
259-
if(${SCALAPACK_BUILD_TESTS})
281+
if(SCALAPACK_BUILD_TESTS)
260282
add_subdirectory(TESTING)
261283
endif()
262284

PBLAS/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
add_subdirectory(SRC)
2-
if(${SCALAPACK_BUILD_TESTS})
2+
if(SCALAPACK_BUILD_TESTS AND BUILD_SINGLE)
33
add_subdirectory(TESTING)
44
add_subdirectory(TIMING)
55
endif()

PBLAS/SRC/CMakeLists.txt

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,58 +10,66 @@ set (APPBLAS pilaenv.f)
1010

1111
set (PIBLAS1 picopy_.c)
1212

13-
set (PSBLAS1 psswap_.c psscal_.c pscopy_.c psaxpy_.c psdot_.c psnrm2_.c
13+
set (PSBLAS1 psswap_.c psscal_.c pscopy_.c psaxpy_.c psdot_.c psnrm2_.c
1414
psasum_.c psamax_.c)
1515

16-
set (PCBLAS1 pcswap_.c pcscal_.c pcsscal_.c pccopy_.c pcaxpy_.c pcdotu_.c
16+
set (PCBLAS1 pcswap_.c pcscal_.c pcsscal_.c pccopy_.c pcaxpy_.c pcdotu_.c
1717
pcdotc_.c pscnrm2_.c pscasum_.c pcamax_.c)
1818

19-
set (PDBLAS1 pdswap_.c pdscal_.c pdcopy_.c pdaxpy_.c pddot_.c pdnrm2_.c
19+
set (PDBLAS1 pdswap_.c pdscal_.c pdcopy_.c pdaxpy_.c pddot_.c pdnrm2_.c
2020
pdasum_.c pdamax_.c)
2121

22-
set (PZBLAS1 pzswap_.c pzscal_.c pzdscal_.c pzcopy_.c pzaxpy_.c pzdotu_.c
22+
set (PZBLAS1 pzswap_.c pzscal_.c pzdscal_.c pzcopy_.c pzaxpy_.c pzdotu_.c
2323
pzdotc_.c pdznrm2_.c pdzasum_.c pzamax_.c)
2424

2525
#---------------------------------------------------------------------------
2626
# Level 2 PBLAS.
2727
#---------------------------------------------------------------------------
2828

29-
set (PSBLAS2 psgemv_.c psger_.c pssymv_.c pssyr_.c pssyr2_.c pstrmv_.c
29+
set (PSBLAS2 psgemv_.c psger_.c pssymv_.c pssyr_.c pssyr2_.c pstrmv_.c
3030
pstrsv_.c psagemv_.c psasymv_.c psatrmv_.c)
3131

32-
set (PCBLAS2 pcgemv_.c pcgerc_.c pcgeru_.c pchemv_.c pcher_.c pcher2_.c
32+
set (PCBLAS2 pcgemv_.c pcgerc_.c pcgeru_.c pchemv_.c pcher_.c pcher2_.c
3333
pctrmv_.c pctrsv_.c pcagemv_.c pcahemv_.c pcatrmv_.c)
3434

35-
set (PDBLAS2 pdgemv_.c pdger_.c pdsymv_.c pdsyr_.c pdsyr2_.c pdtrmv_.c
35+
set (PDBLAS2 pdgemv_.c pdger_.c pdsymv_.c pdsyr_.c pdsyr2_.c pdtrmv_.c
3636
pdtrsv_.c pdagemv_.c pdasymv_.c pdatrmv_.c)
3737

38-
set (PZBLAS2 pzgemv_.c pzgerc_.c pzgeru_.c pzhemv_.c pzher_.c pzher2_.c
38+
set (PZBLAS2 pzgemv_.c pzgerc_.c pzgeru_.c pzhemv_.c pzher_.c pzher2_.c
3939
pztrmv_.c pztrsv_.c pzagemv_.c pzahemv_.c pzatrmv_.c)
4040

4141
#---------------------------------------------------------------------------
4242
# Level 3 PBLAS.
4343
#---------------------------------------------------------------------------
4444

45-
set (PSBLAS3 psgeadd_.c psgemm_.c pssymm_.c pssyr2k_.c pssyrk_.c pstradd_.c
45+
set (PSBLAS3 psgeadd_.c psgemm_.c pssymm_.c pssyr2k_.c pssyrk_.c pstradd_.c
4646
pstran_.c pstrmm_.c pstrsm_.c)
4747

48-
set (PCBLAS3 pcgeadd_.c pcgemm_.c pchemm_.c pcher2k_.c pcherk_.c pcsymm_.c
49-
pcsyr2k_.c pcsyrk_.c pctradd_.c pctranc_.c pctranu_.c pctrmm_.c
48+
set (PCBLAS3 pcgeadd_.c pcgemm_.c pchemm_.c pcher2k_.c pcherk_.c pcsymm_.c
49+
pcsyr2k_.c pcsyrk_.c pctradd_.c pctranc_.c pctranu_.c pctrmm_.c
5050
pctrsm_.c)
5151

52-
set (PDBLAS3 pdgeadd_.c pdgemm_.c pdsymm_.c pdsyr2k_.c pdsyrk_.c pdtradd_.c
52+
set (PDBLAS3 pdgeadd_.c pdgemm_.c pdsymm_.c pdsyr2k_.c pdsyrk_.c pdtradd_.c
5353
pdtran_.c pdtrmm_.c pdtrsm_.c)
5454

55-
set (PZBLAS3 pzgeadd_.c pzgemm_.c pzhemm_.c pzher2k_.c pzherk_.c pzsymm_.c
56-
pzsyr2k_.c pzsyrk_.c pztradd_.c pztranc_.c pztranu_.c pztrmm_.c
55+
set (PZBLAS3 pzgeadd_.c pzgemm_.c pzhemm_.c pzher2k_.c pzherk_.c pzsymm_.c
56+
pzsyr2k_.c pzsyrk_.c pztradd_.c pztranc_.c pztranu_.c pztrmm_.c
5757
pztrsm_.c)
5858

5959
#---------------------------------------------------------------------------
6060

61-
set (pblas
62-
${PIBLAS1}
63-
${PSBLAS1} ${PCBLAS1} ${PDBLAS1} ${PZBLAS1}
64-
${PSBLAS2} ${PCBLAS2} ${PDBLAS2} ${PZBLAS2}
65-
${PSBLAS3} ${PCBLAS3} ${PDBLAS3} ${PZBLAS3})
66-
67-
set (pblas-F ${APPBLAS} )
61+
set(pblas ${PIBLAS1})
62+
if(BUILD_SINGLE)
63+
list(APPEND pblas ${PSBLAS1} ${PSBLAS2} ${PSBLAS3})
64+
endif()
65+
if(BUILD_DOUBLE)
66+
list(APPEND pblas ${PDBLAS1} ${PDBLAS2} ${PDBLAS3})
67+
endif()
68+
if(BUILD_COMPLEX)
69+
list(APPEND pblas ${PCBLAS1} ${PCBLAS2} ${PCBLAS3})
70+
endif()
71+
if(BUILD_COMPLEX16)
72+
list(APPEND pblas ${PZBLAS1} ${PZBLAS2} ${PZBLAS3})
73+
endif()
74+
75+
set (pblas-F ${APPBLAS} )

PBLAS/SRC/PBBLAS/CMakeLists.txt

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
1-
set (PBSBLASAUX pbstran.f pbsmatadd.f pbstrsrt.f pbstrget.f
1+
set (PBSBLASAUX pbstran.f pbsmatadd.f pbstrsrt.f pbstrget.f
22
pbstrnv.f pbsvecadd.f pbstrst1.f)
33

4-
set (PBCBLASAUX pbctran.f pbcmatadd.f pbctrsrt.f pbctrget.f
4+
set (PBCBLASAUX pbctran.f pbcmatadd.f pbctrsrt.f pbctrget.f
55
pbctrnv.f pbcvecadd.f pbctrst1.f)
66

7-
set (PBDBLASAUX pbdtran.f pbdmatadd.f pbdtrsrt.f pbdtrget.f
7+
set (PBDBLASAUX pbdtran.f pbdmatadd.f pbdtrsrt.f pbdtrget.f
88
pbdtrnv.f pbdvecadd.f pbdtrst1.f)
99

10-
set (PBZBLASAUX pbztran.f pbzmatadd.f pbztrsrt.f pbztrget.f
10+
set (PBZBLASAUX pbztran.f pbzmatadd.f pbztrsrt.f pbztrget.f
1111
pbztrnv.f pbzvecadd.f pbztrst1.f)
1212

13-
set(pbblas
14-
${PBSBLASAUX} ${PBCBLASAUX} ${PBDBLASAUX} ${PBZBLASAUX})
13+
set(pbblas)
14+
if(BUILD_SINGLE)
15+
list(APPEND pbblas ${PBSBLASAUX})
16+
endif()
17+
if(BUILD_DOUBLE)
18+
list(APPEND pbblas ${PBDBLASAUX})
19+
endif()
20+
if(BUILD_COMPLEX)
21+
list(APPEND pbblas ${PBCBLASAUX})
22+
endif()
23+
if(BUILD_COMPLEX16)
24+
list(APPEND pbblas ${PBZBLASAUX})
25+
endif()

0 commit comments

Comments
 (0)