Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 79 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,7 @@ if(FLEXAIDS_USE_CUDA)
target_sources(FlexAID PRIVATE
LIB/cuda_eval.cu # existing CF batch kernel
LIB/ShannonThermoStack/shannon_cuda.cu # Shannon entropy histogram kernel
LIB/tencm_cuda.cu # TENCoM contact discovery + Hessian assembly
)
target_compile_definitions(FlexAID PRIVATE FLEXAIDS_USE_CUDA)
if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
Expand All @@ -306,7 +307,7 @@ if(FLEXAIDS_USE_CUDA)
CUDA_SEPARABLE_COMPILATION ON
CUDA_STANDARD 17)
target_link_libraries(FlexAID PRIVATE CUDA::cudart CUDA::cudadevrt)
message(STATUS "CUDA enabled — CF batch kernel + Shannon histogram kernel")
message(STATUS "CUDA enabled — CF batch + Shannon histogram + TENCoM Hessian kernels")
endif()

# ─── Metal sources ──────────────────────────────────────────────────────
Expand All @@ -330,6 +331,13 @@ if(FLEXAIDS_USE_METAL)
LANGUAGE OBJCXX
COMPILE_FLAGS "-std=c++20 -fno-objc-arc"
)
# TENCoM Metal bridge (GPU contact discovery + Hessian assembly)
target_sources(FlexAID PRIVATE LIB/tencm_metal.mm)
target_compile_definitions(FlexAID PRIVATE FLEXAIDS_HAS_METAL_TENCM)
set_source_files_properties(LIB/tencm_metal.mm PROPERTIES
LANGUAGE OBJCXX
COMPILE_FLAGS "-std=c++20 -fno-objc-arc"
)
# CavityDetect Metal bridge (Task 1.4: GPU probe-sphere generation)
target_sources(FlexAID PRIVATE LIB/CavityDetect/CavityDetectMetalBridge.mm)
set_source_files_properties(LIB/CavityDetect/CavityDetectMetalBridge.mm PROPERTIES
Expand Down Expand Up @@ -411,6 +419,51 @@ if(ENABLE_TENCOM_BENCHMARK)
message(STATUS "TeNCoM benchmark enabled — build target: benchmark_tencom")
endif()

# ─── TENCoM Entropy Differential (standalone flexibility analysis tool) ────────
option(ENABLE_TENCOM_ENTROPY_DIFF "Build the TENCoM entropy differential binary" OFF)
if(ENABLE_TENCOM_ENTROPY_DIFF)
add_executable(tencom_entropy_diff
LIB/tencom_entropy_diff.cpp
LIB/tencm.cpp
LIB/statmech.cpp
LIB/encom.cpp
)
target_include_directories(tencom_entropy_diff PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/LIB)
if(MSVC)
target_compile_options(tencom_entropy_diff PRIVATE /O2 /fp:fast)
else()
target_compile_options(tencom_entropy_diff PRIVATE -O3 -ffast-math)
endif()
flexaids_configure_simd(tencom_entropy_diff)
if(FLEXAIDS_USE_OPENMP AND OpenMP_CXX_FOUND)
target_link_libraries(tencom_entropy_diff PRIVATE OpenMP::OpenMP_CXX)
endif()
if(FLEXAIDS_USE_EIGEN AND Eigen3_FOUND)
target_link_libraries(tencom_entropy_diff PRIVATE Eigen3::Eigen)
target_compile_definitions(tencom_entropy_diff PRIVATE FLEXAIDS_HAS_EIGEN)
endif()
# CUDA GPU acceleration for large proteins (N > 256 residues)
if(FLEXAIDS_USE_CUDA)
target_sources(tencom_entropy_diff PRIVATE LIB/tencm_cuda.cu)
target_compile_definitions(tencom_entropy_diff PRIVATE FLEXAIDS_USE_CUDA)
set_target_properties(tencom_entropy_diff PROPERTIES
CUDA_SEPARABLE_COMPILATION ON
CUDA_STANDARD 17)
target_link_libraries(tencom_entropy_diff PRIVATE CUDA::cudart CUDA::cudadevrt)
endif()
# Metal GPU acceleration (macOS)
if(FLEXAIDS_USE_METAL)
target_sources(tencom_entropy_diff PRIVATE LIB/tencm_metal.mm)
target_compile_definitions(tencom_entropy_diff PRIVATE FLEXAIDS_HAS_METAL_TENCM)
set_source_files_properties(LIB/tencm_metal.mm PROPERTIES
LANGUAGE OBJCXX
COMPILE_FLAGS "-std=c++20 -fno-objc-arc")
target_link_libraries(tencom_entropy_diff PRIVATE
${METAL_LIBRARY} ${FOUNDATION_LIBRARY} ${METALKIT_LIBRARY})
endif()
message(STATUS "TENCoM entropy differential enabled — build target: tencom_entropy_diff")
endif()

# ─── VoronoiCFBatch benchmark (Task 2.3) ───────────────────────────────────────
# VoronoiCFBatch.h is header-only; the benchmark binary exercises the std::span
# batch interface and prints a serial-vs-OpenMP speedup table.
Expand Down Expand Up @@ -478,5 +531,29 @@ if(BUILD_TESTING)
endif()
add_test(NAME HardwareDispatchTests COMMAND test_hardware_dispatch)

message(STATUS "Unit tests enabled — build targets: test_statmech, test_hardware_dispatch")
# test_tencom_entropy_diff — TENCoM entropy differential unit tests
add_executable(test_tencom_entropy_diff
tests/test_tencom_entropy_diff.cpp
LIB/tencm.cpp
LIB/statmech.cpp
LIB/encom.cpp
)
target_include_directories(test_tencom_entropy_diff PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/LIB)
target_link_libraries(test_tencom_entropy_diff PRIVATE GTest::gtest GTest::gtest_main)
if(MSVC)
target_compile_options(test_tencom_entropy_diff PRIVATE /O2)
else()
target_compile_options(test_tencom_entropy_diff PRIVATE -O2)
endif()
flexaids_configure_simd(test_tencom_entropy_diff)
if(FLEXAIDS_USE_OPENMP AND OpenMP_CXX_FOUND)
target_link_libraries(test_tencom_entropy_diff PRIVATE OpenMP::OpenMP_CXX)
endif()
if(FLEXAIDS_USE_EIGEN AND Eigen3_FOUND)
target_link_libraries(test_tencom_entropy_diff PRIVATE Eigen3::Eigen)
target_compile_definitions(test_tencom_entropy_diff PRIVATE FLEXAIDS_HAS_EIGEN)
endif()
add_test(NAME TENCoMEntropyDiffTests COMMAND test_tencom_entropy_diff)

message(STATUS "Unit tests enabled — build targets: test_statmech, test_hardware_dispatch, test_tencom_entropy_diff")
endif()
Loading
Loading