mirror of
https://github.com/openmm/openmm
synced 2026-06-03 06:39:48 +09:00
* Support kernel files with extensions of any length (like .hip) * Do not allow to replace symbols in single-line comments * Add OPENMM_BUILD_COMMON CMake option It allows to build and install common platform files even if CUDA or OpenCL platforms are not built. This is required for HIP platform (openmm-hip) if ROCm OpenCL packages are not installed. * Add an option for Python wrapper to install into user packages OPENMM_PYTHON_USER_INSTALL is OFF be default. * Support FFT backends in Amoeba plugin The HIP platform supports FFT backends, this commit moves findLegalFFTDimension to ComputeContext, so platforms can have their own implementations. * Compatibility for common platform w/ new HIP platform * Do not use volatile with private and local AtomData parameters on HIP The generated code is not optimal, for example, the compiler generates flat_load instructions instead of ds_read. * Tune launch bounds for PME grid-related kernels and add WA for RDNA Force the compiler to use all registers for gridSpreadCharge and gridInterpolateForce by limiting max waves per EU to 1 on CDNA GPUs, RDNA GPUs work better without it. * Optimize atom data structs in GBSA and Amoeba on HIP Manually rearrange fields, add paddings and force alignments to have faster accesses to shared memory: ds_read and ds_write may work slower if addresses are not aligned by 16 bytes. Co-authored-by: Anton Gorenko <anton@streamhpc.com> Co-authored-by: Nick Curtis <nicholas.curtis@amd.com>
31 lines
1.7 KiB
CMake
31 lines
1.7 KiB
CMake
FILE(GLOB KERNEL_FILES ${KERNEL_SOURCE_DIR}/kernels/*.${KERNEL_FILE_EXTENSION})
|
|
SET(KERNEL_FILE_DECLARATIONS)
|
|
CONFIGURE_FILE(${KERNEL_SOURCE_DIR}/${KERNEL_SOURCE_CLASS}.cpp.in ${KERNELS_CPP})
|
|
# Determine file extension length
|
|
STRING(LENGTH ${KERNEL_FILE_EXTENSION} extension_length)
|
|
# add one space for the dot
|
|
MATH(EXPR extension_length ${extension_length}+1)
|
|
FOREACH(file ${KERNEL_FILES})
|
|
# Load the file contents and process it.
|
|
FILE(STRINGS ${file} file_content NEWLINE_CONSUME)
|
|
# Replace all backslashes by double backslashes as they are being put in a C string.
|
|
# Be careful not to replace the backslash before a semicolon as that is the CMAKE
|
|
# internal escaping of a semicolon to prevent it from acting as a list seperator.
|
|
STRING(REGEX REPLACE "\\\\([^;])" "\\\\\\\\\\1" file_content "${file_content}")
|
|
# Escape double quotes as being put in a C string.
|
|
STRING(REPLACE "\"" "\\\"" file_content "${file_content}")
|
|
# Split in separate C strings for each line.
|
|
STRING(REPLACE "\n" "\\n\"\n\"" file_content "${file_content}")
|
|
|
|
# Determine a name for the variable that will contain this file's contents
|
|
FILE(RELATIVE_PATH filename ${KERNEL_SOURCE_DIR}/kernels ${file})
|
|
STRING(LENGTH ${filename} filename_length)
|
|
MATH(EXPR filename_length ${filename_length}-${extension_length})
|
|
STRING(SUBSTRING ${filename} 0 ${filename_length} variable_name)
|
|
|
|
# Record the variable declaration and definition.
|
|
SET(KERNEL_FILE_DECLARATIONS ${KERNEL_FILE_DECLARATIONS}static\ const\ std::string\ ${variable_name};\n)
|
|
FILE(APPEND ${KERNELS_CPP} const\ string\ ${KERNEL_SOURCE_CLASS}::${variable_name}\ =\ \"${file_content}\"\;\n)
|
|
ENDFOREACH(file)
|
|
CONFIGURE_FILE(${KERNEL_SOURCE_DIR}/${KERNEL_SOURCE_CLASS}.h.in ${KERNELS_H})
|