Skip to content

Commit 71b1eca

Browse files
authored
Merge pull request #7 from SC-SGS/reduce_data
Reduce data
2 parents 2489b79 + 4063884 commit 71b1eca

File tree

128 files changed

+4092
-3512
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+4092
-3512
lines changed

.jenkins/Jenkinsfile-multigpu-tests

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ pipeline {
5656
\\"state\\": \\"pending\\",
5757
\\"context\\": \\"jenkins-ctest-multigpu\\",
5858
\\"description\\": \\"Jenkins CI Job: jenkins-ctest-multigpu\\",
59-
\\"target_url\\": \\"https://simsgs.informatik.uni-stuttgart.de/jenkins/view/PLSSVM/job/PLSSVM/job/Multibranch-Github/job/${BRANCH_NAME}/$BUILD_NUMBER\\"
59+
\\"target_url\\": \\"https://simsgs.informatik.uni-stuttgart.de/jenkins/view/PLSSVM/job/PLSSVM/job/Github-Multigpu/job/${BRANCH_NAME}/$BUILD_NUMBER\\"
6060
}"
6161
'''
6262
}
@@ -127,7 +127,7 @@ pipeline {
127127
srun -w argon-gtx -N 1 -n 1 -t 01:00:00 -D /scratch/jenkins/plssvm/${BUILD_TAG}/PLSSVM --gres=gpu:2 bash -c "\
128128
module load cuda &&\
129129
cd build/Release &&\
130-
ctest -j4 --no-compress-output -T Test --timeout 600; \
130+
ctest -j4 --no-compress-output -T Test --timeout 1200; \
131131
returncode=$? && \
132132
cp -r Testing /data/argon-fs/sgs/jenkins/workspace/$(basename ${WORKSPACE})/${BUILD_TAG}/Testing &&\
133133
exit $returncode"
@@ -168,7 +168,7 @@ pipeline {
168168
module use /home/breyerml/.modulefiles/ &&\
169169
module load pcsgs05/hipsycl &&\
170170
cd build/Release_hip &&\
171-
ctest -j4 --no-compress-output -T Test --timeout 600; \
171+
ctest -j4 --no-compress-output -T Test --timeout 1200; \
172172
returncode=$? && \
173173
cp -r Testing /data/argon-fs/sgs/jenkins/workspace/$(basename ${WORKSPACE})/${BUILD_TAG}/Testing_hip && \
174174
exit $returncode"
@@ -209,7 +209,7 @@ pipeline {
209209
module use /home/breyerml/.modulefiles/ &&\
210210
module load pcsgs05/dpcpp_rt &&\
211211
cd build/Release_dpcpp &&\
212-
ctest -j4 --no-compress-output -T Test --timeout 600; \
212+
ctest -j4 --no-compress-output -T Test --timeout 1200; \
213213
returncode=$? && \
214214
cp -r Testing /data/argon-fs/sgs/jenkins/workspace/$(basename ${WORKSPACE})/${BUILD_TAG}/Testing_dpcpp &&\
215215
exit $returncode"
@@ -261,7 +261,7 @@ pipeline {
261261
\\"state\\": \\"success\\",
262262
\\"context\\": \\"jenkins-ctest-multigpu\\",
263263
\\"description\\": \\"Jenkins CI Job: jenkins-ctest-multigpu\\",
264-
\\"target_url\\": \\"https://simsgs.informatik.uni-stuttgart.de/jenkins/view/PLSSVM/job/PLSSVM/job/Multibranch-Github/job/${BRANCH_NAME}/$BUILD_NUMBER\\"
264+
\\"target_url\\": \\"https://simsgs.informatik.uni-stuttgart.de/jenkins/view/PLSSVM/job/PLSSVM/job/Github-Multigpu/job/${BRANCH_NAME}/$BUILD_NUMBER\\"
265265
}"
266266
'''
267267
}
@@ -280,7 +280,7 @@ pipeline {
280280
\\"state\\": \\"failure\\",
281281
\\"context\\": \\"jenkins-ctest-multigpu\\",
282282
\\"description\\": \\"Jenkins CI Job: jenkins-ctest-multigpu\\",
283-
\\"target_url\\": \\"https://simsgs.informatik.uni-stuttgart.de/jenkins/view/PLSSVM/job/PLSSVM/job/Multibranch-Github/job/${BRANCH_NAME}/$BUILD_NUMBER\\"
283+
\\"target_url\\": \\"https://simsgs.informatik.uni-stuttgart.de/jenkins/view/PLSSVM/job/PLSSVM/job/Github-Multigpu/job/${BRANCH_NAME}/$BUILD_NUMBER\\"
284284
}"
285285
'''
286286
}
@@ -299,7 +299,7 @@ pipeline {
299299
\\"state\\": \\"error\\",
300300
\\"context\\": \\"jenkins-ctest-multigpu\\",
301301
\\"description\\": \\"Jenkins CI Job: jenkins-ctest-multigpu\\",
302-
\\"target_url\\": \\"https://simsgs.informatik.uni-stuttgart.de/jenkins/view/PLSSVM/job/PLSSVM/job/Multibranch-Github/job/${BRANCH_NAME}/$BUILD_NUMBER\\"
302+
\\"target_url\\": \\"https://simsgs.informatik.uni-stuttgart.de/jenkins/view/PLSSVM/job/PLSSVM/job/Github-Multigpu/job/${BRANCH_NAME}/$BUILD_NUMBER\\"
303303
}"
304304
'''
305305
}

CMakeLists.txt

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
cmake_minimum_required(VERSION 3.18)
88

9-
project(ParallelLeastSquaresSupportVectorMachine
9+
project("PLSSVM - Parallel Least-Squares Support Vector Machine"
1010
VERSION 0.1.0
1111
LANGUAGES CXX
1212
DESCRIPTION "A Support Vector Machine implementation using different backends.")
@@ -27,10 +27,18 @@ configure_file(
2727
########################################################################################################################
2828
## set base sources
2929
set(PLSSVM_BASE_SOURCES
30+
${CMAKE_CURRENT_SOURCE_DIR}/src/plssvm/detail/execution_range.cpp
31+
${CMAKE_CURRENT_SOURCE_DIR}/src/plssvm/detail/file_reader.cpp
32+
${CMAKE_CURRENT_SOURCE_DIR}/src/plssvm/detail/string_utility.cpp
33+
${CMAKE_CURRENT_SOURCE_DIR}/src/plssvm/exceptions/exceptions.cpp
34+
${CMAKE_CURRENT_SOURCE_DIR}/src/plssvm/exceptions/source_location.cpp
35+
${CMAKE_CURRENT_SOURCE_DIR}/src/plssvm/backend_types.cpp
36+
${CMAKE_CURRENT_SOURCE_DIR}/src/plssvm/kernel_types.cpp
3037
${CMAKE_CURRENT_SOURCE_DIR}/src/plssvm/csvm.cpp
3138
${CMAKE_CURRENT_SOURCE_DIR}/src/plssvm/parameter.cpp
32-
${CMAKE_CURRENT_SOURCE_DIR}/src/plssvm/parameter_train.cpp
3339
${CMAKE_CURRENT_SOURCE_DIR}/src/plssvm/parameter_predict.cpp
40+
${CMAKE_CURRENT_SOURCE_DIR}/src/plssvm/parameter_train.cpp
41+
${CMAKE_CURRENT_SOURCE_DIR}/src/plssvm/target_platforms.cpp
3442
)
3543

3644
## create base library: linked against all backend libraries
@@ -337,7 +345,7 @@ if(DEFINED PLSSVM_THREAD_BLOCK_SIZE)
337345
if (PLSSVM_THREAD_BLOCK_SIZE MATCHES "^[0-9]+$" AND PLSSVM_THREAD_BLOCK_SIZE GREATER 0)
338346
message(STATUS "Set THREAD_BLOCK_SIZE to ${PLSSVM_THREAD_BLOCK_SIZE}.")
339347
# add target definition
340-
target_compile_definitions(${PLSSVM_EXECUTABLE_NAME} PUBLIC PLSSVM_THREAD_BLOCK_SIZE=${PLSSVM_THREAD_BLOCK_SIZE})
348+
target_compile_definitions(${PLSSVM_ALL_LIBRARY_NAME} PUBLIC PLSSVM_THREAD_BLOCK_SIZE=${PLSSVM_THREAD_BLOCK_SIZE})
341349
else()
342350
message(FATAL_ERROR "PLSSVM_THREAD_BLOCK_SIZE must be an integer greater than 0 but is \"${PLSSVM_THREAD_BLOCK_SIZE}\"!")
343351
endif()
@@ -351,12 +359,26 @@ if(DEFINED PLSSVM_INTERNAL_BLOCK_SIZE)
351359
if (PLSSVM_INTERNAL_BLOCK_SIZE MATCHES "^[0-9]+$" AND PLSSVM_INTERNAL_BLOCK_SIZE GREATER 0)
352360
message(STATUS "Set INTERNAL_BLOCK_SIZE to ${PLSSVM_INTERNAL_BLOCK_SIZE}.")
353361
# add target definition
354-
target_compile_definitions(${PLSSVM_EXECUTABLE_NAME} PUBLIC PLSSVM_INTERNAL_BLOCK_SIZE=${PLSSVM_INTERNAL_BLOCK_SIZE})
362+
target_compile_definitions(${PLSSVM_ALL_LIBRARY_NAME} PUBLIC PLSSVM_INTERNAL_BLOCK_SIZE=${PLSSVM_INTERNAL_BLOCK_SIZE})
355363
else()
356364
message(FATAL_ERROR "PLSSVM_INTERNAL_BLOCK_SIZE must be an integer greater than 0 but is \"${PLSSVM_INTERNAL_BLOCK_SIZE}\"!")
357365
endif()
358366
endif()
359367

368+
## set specific internal block sizes of requested
369+
if(DEFINED ENV{PLSSVM_OPENMP_BLOCK_SIZE})
370+
set(PLSSVM_OPENMP_BLOCK_SIZE $ENV{PLSSVM_OPENMP_BLOCK_SIZE} CACHE STRING "The used block size for the OpenMP kernel." FORCE)
371+
endif()
372+
if(DEFINED PLSSVM_OPENMP_BLOCK_SIZE)
373+
if (PLSSVM_OPENMP_BLOCK_SIZE MATCHES "^[0-9]+$" AND PLSSVM_OPENMP_BLOCK_SIZE GREATER 0)
374+
message(STATUS "Set PLSSVM_OPENMP_BLOCK_SIZE to ${PLSSVM_OPENMP_BLOCK_SIZE}.")
375+
# add target definition
376+
target_compile_definitions(${PLSSVM_ALL_LIBRARY_NAME} PUBLIC PLSSVM_OPENMP_BLOCK_SIZE=${PLSSVM_OPENMP_BLOCK_SIZE})
377+
else()
378+
message(FATAL_ERROR "PLSSVM_OPENMP_BLOCK_SIZE must be an integer greater than 0 but is \"${PLSSVM_OPENMP_BLOCK_SIZE}\"!")
379+
endif()
380+
endif()
381+
360382
## change executable floating points from double precision to single precision
361383
option(PLSSVM_EXECUTABLES_USE_SINGLE_PRECISION "Build the svm-train and svm-predict executables with single precision instead of double precision." OFF)
362384
if(PLSSVM_EXECUTABLES_USE_SINGLE_PRECISION)
@@ -402,6 +424,20 @@ if(PLSSVM_ENABLE_TESTING)
402424
endif()
403425

404426

427+
428+
########################################################################################################################
429+
## enable timing generation via a script ##
430+
########################################################################################################################
431+
option(PLSSVM_GENERATE_TIMING_SCRIPT "Generate a timing script used for performance measurement." OFF)
432+
if(PLSSVM_GENERATE_TIMING_SCRIPT)
433+
configure_file(
434+
${CMAKE_CURRENT_SOURCE_DIR}/cmake/time.sh.in
435+
${CMAKE_BINARY_DIR}/time.sh
436+
@ONLY
437+
)
438+
endif()
439+
440+
405441
########################################################################################################################
406442
## print short (backend) summary ##
407443
########################################################################################################################
@@ -469,19 +505,3 @@ install(FILES "${PROJECT_BINARY_DIR}/plssvmConfig.cmake"
469505
"${PROJECT_BINARY_DIR}/plssvmConfigVersion.cmake"
470506
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/plssvm/cmake
471507
)
472-
473-
474-
475-
476-
477-
# TODO: separate repo?
478-
## generate scripts
479-
option(PLSSVM_GENERATE_TIMINGSCRIPT "Generate script for timings." ON)
480-
if(PLSSVM_GENERATE_TIMINGSCRIPT)
481-
configure_file(
482-
${CMAKE_CURRENT_SOURCE_DIR}/cmake/time.sh.in
483-
${CMAKE_BINARY_DIR}/time.sh
484-
@ONLY
485-
)
486-
endif()
487-

README.md

Lines changed: 41 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,38 @@
33

44
Implementation of a parallel [least-squares support-vector machine](https://en.wikipedia.org/wiki/Least-squares_support-vector_machine) using multiple different backends.
55
The currently available backends are:
6-
- [OpenMP](https://www.openmp.org/)
7-
- [CUDA](https://developer.nvidia.com/cuda-zone)
8-
- [OpenCL](https://www.khronos.org/opencl/)
9-
- [SYCL](https://www.khronos.org/sycl/)
6+
- [OpenMP](https://www.openmp.org/)
7+
- [CUDA](https://developer.nvidia.com/cuda-zone)
8+
- [OpenCL](https://www.khronos.org/opencl/)
9+
- [SYCL](https://www.khronos.org/sycl/)
1010

1111
## Getting Started
1212

1313
### Dependencies
1414

15-
General dependencies:
16-
- a C++17 capable compiler (e.g. [`gcc`](https://gcc.gnu.org/) or [`clang`](https://clang.llvm.org/))
17-
- [CMake](https://cmake.org/) 3.18 or newer
18-
- [cxxopts](https://github.com/jarro2783/cxxopts), [fast_float](https://github.com/fastfloat/fast_float) and [{fmt}](https://github.com/fmtlib/fmt) (all three are automatically build during the CMake configuration if they couldn't be found using the respective `find_package` call)
19-
- [GoogleTest](https://github.com/google/googletest) if testing is enabled (automatically build during the CMake configuration if `find_package(GTest)` wasn't successful)
20-
- [doxygen](https://www.doxygen.nl/index.html) if documentation generation is enabled
21-
- [OpenMP](https://www.openmp.org/) 4.0 or newer (optional) to speed-up file parsing
15+
General dependencies:
16+
- a C++17 capable compiler (e.g. [`gcc`](https://gcc.gnu.org/) or [`clang`](https://clang.llvm.org/))
17+
- [CMake](https://cmake.org/) 3.18 or newer
18+
- [cxxopts](https://github.com/jarro2783/cxxopts), [fast_float](https://github.com/fastfloat/fast_float) and [{fmt}](https://github.com/fmtlib/fmt) (all three are automatically build during the CMake configuration if they couldn't be found using the respective `find_package` call)
19+
- [GoogleTest](https://github.com/google/googletest) if testing is enabled (automatically build during the CMake configuration if `find_package(GTest)` wasn't successful)
20+
- [doxygen](https://www.doxygen.nl/index.html) if documentation generation is enabled
21+
- [OpenMP](https://www.openmp.org/) 4.0 or newer (optional) to speed-up file parsing
2222

2323
Additional dependencies for the OpenMP backend:
24-
- compiler with OpenMP support
24+
- compiler with OpenMP support
2525

2626
Additional dependencies for the CUDA backend:
27-
- CUDA SDK
28-
- either NVIDIA [`nvcc`](https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html) or [`clang` with CUDA support enabled](https://llvm.org/docs/CompileCudaWithLLVM.html)
27+
- CUDA SDK
28+
- either NVIDIA [`nvcc`](https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html) or [`clang` with CUDA support enabled](https://llvm.org/docs/CompileCudaWithLLVM.html)
2929

3030
Additional dependencies for the OpenCL backend:
31-
- OpenCL runtime and header files
31+
- OpenCL runtime and header files
3232

3333
Additional dependencies for the SYCL backend:
34-
- the code must be compiled with a SYCL capable compiler; currently tested with [DPC++](https://github.com/intel/llvm) and [hipSYCL](https://github.com/illuhad/hipSYCL)
34+
- the code must be compiled with a SYCL capable compiler; currently tested with [DPC++](https://github.com/intel/llvm) and [hipSYCL](https://github.com/illuhad/hipSYCL)
3535

3636
Additional dependencies if `PLSSVM_ENABLE_TESTING` and `PLSSVM_GENERATE_TEST_FILE` are both set to `ON`:
37-
- [Python3](https://www.python.org/) with the [`argparse`](https://docs.python.org/3/library/argparse.html) and [`sklearn`](https://scikit-learn.org/stable/) modules
37+
- [Python3](https://www.python.org/) with the [`argparse`](https://docs.python.org/3/library/argparse.html) and [`sklearn`](https://scikit-learn.org/stable/) modules
3838

3939
### Building
4040

@@ -52,10 +52,10 @@ Building the library can be done using the normal CMake approach:
5252

5353
The **required** CMake option `PLSSVM_TARGET_PLATFORMS` is used to determine for which targets the backends should be compiled.
5454
Valid targets are:
55-
- `cpu`: compile for the CPU; **no** architectural specifications is allowed
56-
- `nvidia`: compile for NVIDIA GPUs; **at least one** architectural specification is necessary, e.g. `nvidia:sm_86,sm_70`
57-
- `amd`: compile for AMD GPUs; **at least one** architectural specification is necessary, e.g. `amd:gfx906`
58-
- `intel`: compile for Intel GPUs; **no** architectural specification is allowed
55+
- `cpu`: compile for the CPU; **no** architectural specifications is allowed
56+
- `nvidia`: compile for NVIDIA GPUs; **at least one** architectural specification is necessary, e.g. `nvidia:sm_86,sm_70`
57+
- `amd`: compile for AMD GPUs; **at least one** architectural specification is necessary, e.g. `amd:gfx906`
58+
- `intel`: compile for Intel GPUs; **no** architectural specification is allowed
5959

6060
At least one of the above targets must be present.
6161

@@ -74,52 +74,53 @@ optional arguments:
7474
Example invocations:
7575

7676
```bash
77-
> python3 utility/gpu_name_to_arch.py --name "GeForce RTX 3080"
77+
> python3 utility_scripts/gpu_name_to_arch.py --name "GeForce RTX 3080"
7878
sm_86
79-
> python3 utility/gpu_name_to_arch.py --name "Radeon VII"
79+
> python3 utility_scripts/gpu_name_to_arch.py --name "Radeon VII"
8080
gfx906
8181
```
8282

8383
If no GPU name is provided, the script tries to automatically detect any NVIDIA or AMD GPU
8484
(requires the Python3 dependencies [`GPUtil`](https://pypi.org/project/GPUtil/) and [`pyamdgpuinfo`](https://pypi.org/project/pyamdgpuinfo/)).
8585

8686
If the architectural information for the requested GPU could not be retrieved, one option would be to have a look at:
87-
- for NVIDIA GPUs: [Your GPU Compute Capability](https://developer.nvidia.com/cuda-gpus)
88-
- for AMD GPUs: [ROCm Documentation](https://github.com/RadeonOpenCompute/ROCm_Documentation/blob/master/ROCm_Compiler_SDK/ROCm-Native-ISA.rst)
87+
- for NVIDIA GPUs: [Your GPU Compute Capability](https://developer.nvidia.com/cuda-gpus)
88+
- for AMD GPUs: [ROCm Documentation](https://github.com/RadeonOpenCompute/ROCm_Documentation/blob/master/ROCm_Compiler_SDK/ROCm-Native-ISA.rst)
8989

9090
#### Optional CMake Options
9191

9292
The `[optional_options]` can be one or multiple of:
9393

94-
- `PLSSVM_ENABLE_OPENMP_BACKEND=ON|OFF|AUTO` (default: `AUTO`):
94+
- `PLSSVM_ENABLE_OPENMP_BACKEND=ON|OFF|AUTO` (default: `AUTO`):
9595
- `ON`: check for the OpenMP backend and fail if not available
9696
- `AUTO`: check for the OpenMP backend but **do not** fail if not available
9797
- `OFF`: do not check for the OpenMP backend
98-
- `PLSSVM_ENABLE_CUDA_BACKEND=ON|OFF|AUTO` (default: `AUTO`):
98+
- `PLSSVM_ENABLE_CUDA_BACKEND=ON|OFF|AUTO` (default: `AUTO`):
9999
- `ON`: check for the CUDA backend and fail if not available
100100
- `AUTO`: check for the CUDA backend but **do not** fail if not available
101101
- `OFF`: do not check for the CUDA backend
102-
- `PLSSVM_ENABLE_OPENCL_BACKEND=ON|OFF|AUTO` (default: `AUTO`):
102+
- `PLSSVM_ENABLE_OPENCL_BACKEND=ON|OFF|AUTO` (default: `AUTO`):
103103
- `ON`: check for the OpenCL backend and fail if not available
104104
- `AUTO`: check for the OpenCL backend but **do not** fail if not available
105105
- `OFF`: do not check for the OpenCL backend
106-
- `PLSSVM_ENABLE_SYCL_BACKEND=ON|OFF|AUTO` (default: `AUTO`):
107-
- `ON`: check for the SYCL backend and fail if not available
108-
- `AUTO`: check for the SYCL backend but **do not** fail if not available
109-
- `OFF`: do not check for the SYCL backend
106+
- `PLSSVM_ENABLE_SYCL_BACKEND=ON|OFF|AUTO` (default: `AUTO`):
107+
- `ON`: check for the SYCL backend and fail if not available
108+
- `AUTO`: check for the SYCL backend but **do not** fail if not available
109+
- `OFF`: do not check for the SYCL backend
110110

111111
**Attention:** at least one backend must be enabled and available!
112112

113-
- `PLSSVM_ENABLE_ASSERTS=ON|OFF` (default: `OFF`): enables custom assertions regardless whether the `DEBUG` macro is defined or not
114-
- `PLSSVM_THREAD_BLOCK_SIZE` (default: `16`): set a specific thread block size used in the GPU kernels (for fine-tuning optimizations)
115-
- `PLSSVM_INTERNAL_BLOCK_SIZE` (default: `6`: set a specific internal block size used in the GPU kernels (for fine-tuning optimizations)
116-
- `PLSSVM_EXECUTABLES_USE_SINGLE_PRECISION` (default: `OFF`): enables single precision calculations instead of double precision for the `svm-train` and `svm-predict` executables
117-
- `PLSSVM_ENABLE_LTO=ON|OFF` (default: `ON`): enable interprocedural optimization (IPO/LTO) if supported by the compiler
118-
- `PLSSVM_ENABLE_DOCUMENTATION=ON|OFF` (default: `OFF`): enable the `doc` target using doxygen
119-
- `PLSSVM_ENABLE_TESTING=ON|OFF` (default: ON): enable testing using GoogleTest and ctest
113+
- `PLSSVM_ENABLE_ASSERTS=ON|OFF` (default: `OFF`): enables custom assertions regardless whether the `DEBUG` macro is defined or not
114+
- `PLSSVM_THREAD_BLOCK_SIZE` (default: `16`): set a specific thread block size used in the GPU kernels (for fine-tuning optimizations)
115+
- `PLSSVM_INTERNAL_BLOCK_SIZE` (default: `6`: set a specific internal block size used in the GPU kernels (for fine-tuning optimizations)
116+
- `PLSSVM_EXECUTABLES_USE_SINGLE_PRECISION` (default: `OFF`): enables single precision calculations instead of double precision for the `svm-train` and `svm-predict` executables
117+
- `PLSSVM_ENABLE_LTO=ON|OFF` (default: `ON`): enable interprocedural optimization (IPO/LTO) if supported by the compiler
118+
- `PLSSVM_ENABLE_DOCUMENTATION=ON|OFF` (default: `OFF`): enable the `doc` target using doxygen
119+
- `PLSSVM_ENABLE_TESTING=ON|OFF` (default: `ON`): enable testing using GoogleTest and ctest
120+
- `PLSSVM_GENERATE_TIMING_SCRIPT=ON|OFF` (default: `OFF`): configure a timing script usable for performance measurement
120121

121122
If `PLSSVM_ENABLE_TESTING` is set to `ON`, the following options can also be set:
122-
- `PLSSVM_GENERATE_TEST_FILE=ON|OFF` (default: `ON`): automatically generate test files
123+
- `PLSSVM_GENERATE_TEST_FILE=ON|OFF` (default: `ON`): automatically generate test files
123124
- `PLSSVM_TEST_FILE_NUM_DATA_POINTS` (default: `5000`): the number of data points in the test file
124125
- `PLSSVM_TEST_FILE_NUM_FEATURES` (default: `2000`): the number of features per data point
125126

0 commit comments

Comments
 (0)