@@ -186,7 +186,6 @@ list(APPEND CUOPT_CUDA_FLAGS -Xfatbin=-compress-all)
186186if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 12.9 AND CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 13.0)
187187 list (APPEND CUOPT_CUDA_FLAGS -Xfatbin=--compress-level=3)
188188endif ()
189- list (APPEND CUOPT_CUDA_FLAGS -fopenmp)
190189
191190# Add jobserver flags for parallel compilation if PARALLEL_LEVEL is set
192191if (PARALLEL_LEVEL AND NOT "${PARALLEL_LEVEL} " STREQUAL "" )
@@ -198,13 +197,14 @@ if (PARALLEL_LEVEL AND NOT "${PARALLEL_LEVEL}" STREQUAL "")
198197 endif ()
199198endif ()
200199
201- # The MIP solver requires OpenMP to work
202- find_package (OpenMP REQUIRED )
200+ # The MIP solver requires OpenMP for both C++ and CUDA host code.
201+ find_package (OpenMP REQUIRED COMPONENTS CXX CUDA )
203202message (VERBOSE "cuOpt: OpenMP found in ${OpenMP_CXX_INCLUDE_DIRS} " )
204203
205- # MPS/QPS parser supports compressed inputs via bzip2 and zlib
204+ # MPS/QPS parser supports compressed inputs via bzip2, zlib and lz4
206205option (CUOPT_PARSER_WITH_BZIP2 "Build MPS parser with bzip2 decompression" ON )
207206option (CUOPT_PARSER_WITH_ZLIB "Build MPS parser with zlib decompression" ON )
207+ option (CUOPT_PARSER_WITH_LZ4 "Build experimental fast MPS parser with LZ4 decompression" ON )
208208if (CUOPT_PARSER_WITH_BZIP2)
209209 find_package (BZip2 REQUIRED )
210210 add_compile_definitions (MPS_PARSER_WITH_BZIP2 )
@@ -213,6 +213,10 @@ if (CUOPT_PARSER_WITH_ZLIB)
213213 find_package (ZLIB REQUIRED )
214214 add_compile_definitions (MPS_PARSER_WITH_ZLIB )
215215endif ()
216+ if (CUOPT_PARSER_WITH_LZ4)
217+ # No headers or link target needed; the experimental reader loads one liblz4 symbol at runtime.
218+ add_compile_definitions (MPS_PARSER_WITH_LZ4 )
219+ endif ()
216220
217221# Debug options
218222if (CMAKE_BUILD_TYPE MATCHES Debug)
@@ -250,16 +254,30 @@ else ()
250254 find_package (RAFT REQUIRED )
251255endif ()
252256
257+ rapids_cpm_find (simde 0.8.2
258+ CPM_ARGS
259+ GIT_REPOSITORY https://github.com/simd-everywhere/simde.git
260+ GIT_TAG v0.8.2
261+ GIT_SHALLOW TRUE
262+ DOWNLOAD_ONLY TRUE
263+ )
264+
265+ if (NOT TARGET simde::simde)
266+ add_library (simde::simde INTERFACE IMPORTED GLOBAL )
267+ set_target_properties (simde::simde
268+ PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${simde_SOURCE_DIR } " )
269+ endif ()
270+
253271FetchContent_Declare (
254272 papilo
255- GIT_REPOSITORY "https://github.com/scipopt /papilo.git"
273+ GIT_REPOSITORY "https://github.com/nguidotti /papilo.git"
256274 # We would want to get the main branch. However, the main branch
257275 # does not have some of the presolvers and settings that we need
258276 # Mainly, probing and clique merging.
259277 # This is the reason we are using the development branch
260278 # from Oct 12, 2025. Once these changes are merged into the main branch,
261279 #we can switch to the main branch.
262- GIT_TAG "741a2b9c8155b249d6df574d758b4d97d4417520 "
280+ GIT_TAG "0cfea20c5655249174dbd04f0fb7bd6b1f6e9a0c "
263281 GIT_PROGRESS TRUE
264282 EXCLUDE_FROM_ALL
265283 SYSTEM
@@ -293,13 +311,13 @@ set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_SAVED})
293311# dejavu - header-only graph automorphism library for MIP symmetry detection
294312# https://github.com/markusa4/dejavu (header-only, skip its CMakeLists.txt)
295313FetchContent_Declare (
296- dejavu
297- GIT_REPOSITORY "https://github.com/markusa4/dejavu.git"
298- GIT_TAG "v2.1"
299- GIT_PROGRESS TRUE
300- EXCLUDE_FROM_ALL
301- SYSTEM
302- SOURCE_SUBDIR _nonexistent
314+ dejavu
315+ GIT_REPOSITORY "https://github.com/markusa4/dejavu.git"
316+ GIT_TAG "v2.1"
317+ GIT_PROGRESS TRUE
318+ EXCLUDE_FROM_ALL
319+ SYSTEM
320+ SOURCE_SUBDIR _nonexistent
303321)
304322FetchContent_MakeAvailable (dejavu)
305323message (STATUS "dejavu (graph automorphism): ${dejavu_SOURCE_DIR } " )
@@ -369,7 +387,7 @@ if (NOT SKIP_GRPC_BUILD)
369387
370388 # Proto search paths: manual protos in src/grpc, generated data proto in src/grpc/codegen/generated
371389 set (PROTO_PATH_MANUAL "${CMAKE_CURRENT_SOURCE_DIR } /src/grpc" )
372- set (PROTO_PATH_GEN "${CMAKE_CURRENT_SOURCE_DIR } /src/grpc/codegen/generated" )
390+ set (PROTO_PATH_GEN "${CMAKE_CURRENT_SOURCE_DIR } /src/grpc/codegen/generated" )
373391
374392 # Generate C++ code from cuopt_remote_data.proto (auto-generated data definitions)
375393 set (DATA_PROTO_FILE "${PROTO_PATH_GEN} /cuopt_remote_data.proto" )
@@ -436,23 +454,34 @@ if (BUILD_TESTS)
436454endif ()
437455
438456set (CUOPT_SRC_FILES)
457+ set (MPS_FAST_SRC_FILES)
439458add_subdirectory (src )
440459
441460# nvcc 13.0.3 ICE (signal 11) compiling sliding_window.cu with 7 GPU architectures;
442461# --split-compile breaks the codegen into per-arch sub-jobs to avoid the crash
443462set_source_files_properties (
444- ${CMAKE_CURRENT_SOURCE_DIR } /src/routing/local_search/sliding_window.cu
445- PROPERTIES COMPILE_OPTIONS "--split-compile=0" )
463+ ${CMAKE_CURRENT_SOURCE_DIR } /src/routing/local_search/sliding_window.cu
464+ PROPERTIES COMPILE_OPTIONS "--split-compile=0" )
446465
447466if (HOST_LINEINFO)
448- set_source_files_properties (${CUOPT_SRC_FILES} DIRECTORY ${CMAKE_SOURCE_DIR } PROPERTIES COMPILE_OPTIONS "-g1" )
467+ set_source_files_properties (${CUOPT_SRC_FILES} DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR } PROPERTIES COMPILE_OPTIONS "-g1" )
449468endif ()
450469
470+ # Needed for the fast MPS parser, available on all x86-64-v3 compliant x86 CPUs (essentially since Haswell ~2013)
471+ if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64|amd64)$" AND
472+ CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$" )
473+ set_property (SOURCE ${MPS_FAST_SRC_FILES} DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR }
474+ APPEND PROPERTY COMPILE_OPTIONS "-mbmi2;-mavx2;-msse4.2" )
475+ endif ()
476+
477+ # TODO: figure out a set of flags for ARM that fits the range of CPUs we wish to support (neoverse?)
478+ # NEON should be universal on aarch64 and enough for our purposes (parsing) though
479+
451480# Apply -UNDEBUG only to solver source files (not gRPC infrastructure).
452481# Must happen before gRPC files are appended to CUOPT_SRC_FILES.
453482# Uses APPEND to preserve any existing per-file options (e.g. -g1 from HOST_LINEINFO).
454483if (DEFINE_ASSERT)
455- set_property (SOURCE ${CUOPT_SRC_FILES} DIRECTORY ${CMAKE_SOURCE_DIR }
484+ set_property (SOURCE ${CUOPT_SRC_FILES} DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR }
456485 APPEND PROPERTY COMPILE_OPTIONS "-UNDEBUG" )
457486endif ()
458487
@@ -479,7 +508,7 @@ if (NOT SKIP_GRPC_BUILD)
479508 # The conda-forge abseil shared library is built with NDEBUG and does not
480509 # export that symbol (abseil-cpp#1624). Without this, Debug builds fail
481510 # at runtime with "undefined symbol: absl::…::Mutex::Dtor".
482- set_property (SOURCE ${GRPC_INFRA_FILES} DIRECTORY ${CMAKE_SOURCE_DIR }
511+ set_property (SOURCE ${GRPC_INFRA_FILES} DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR }
483512 APPEND PROPERTY COMPILE_OPTIONS "-DNDEBUG" )
484513endif (NOT SKIP_GRPC_BUILD )
485514
@@ -495,8 +524,8 @@ set_target_properties(cuopt
495524)
496525
497526target_compile_definitions (cuopt
498- PUBLIC "CUOPT_LOG_ACTIVE_LEVEL=RAPIDS_LOGGER_LOG_LEVEL_${LIBCUOPT_LOGGING_LEVEL} "
499- PUBLIC CUSPARSE_ENABLE_EXPERIMENTAL_API
527+ PUBLIC "CUOPT_LOG_ACTIVE_LEVEL=RAPIDS_LOGGER_LOG_LEVEL_${LIBCUOPT_LOGGING_LEVEL} "
528+ PUBLIC CUSPARSE_ENABLE_EXPERIMENTAL_API
500529)
501530
502531target_compile_options (cuopt
@@ -528,8 +557,8 @@ target_include_directories(cuopt PRIVATE
528557)
529558
530559target_include_directories (cuopt SYSTEM PRIVATE
531- "${pslp_SOURCE_DIR } /include"
532- "${dejavu_SOURCE_DIR } "
560+ "${pslp_SOURCE_DIR } /include"
561+ "${dejavu_SOURCE_DIR } "
533562)
534563
535564target_include_directories (cuopt
@@ -605,11 +634,13 @@ target_link_libraries(cuopt
605634 ${CUDSS_LIB_FILE}
606635 PRIVATE
607636 ${CUOPT_PRIVATE_CUDA_LIBS}
637+ simde::simde
638+ OpenMP::OpenMP_CXX
639+ OpenMP::OpenMP_CUDA
608640 $<$<BOOL :${CUOPT_ENABLE_GRPC} >:protobuf ::libprotobuf >
609641 $<$<BOOL :${CUOPT_ENABLE_GRPC} >:gRPC ::grpc ++>
610642)
611643
612-
613644# ##################################################################################################
614645# - generate tests --------------------------------------------------------------------------------
615646if (BUILD_TESTS)
0 commit comments