- .variables-template
- .tags-template
+.regressiontests-extends-template:
+ extends:
+ - .build-cache-template
+ - .variables-template
+ - .tags-template
+ - .regressiontests-template
+
before_script:
- mkdir -p ccache
- export CCACHE_BASEDIR=${PWD}
- build
# Test each configuration, perhaps in multiple ways
- test
+ # Generate documentation files
+ - documentation
+ # Check documentation from source code for errors
+ - source-check
# Linting, docs, static analysis, coverage, code analysis...
- post-test
+ # Release work for packaging code and verifying webpage
+ - release
.build-gcc:
extends:
- .build-extends-template
+ - .gcc-before-script-template
- .build-gcc-template
.test-gcc:
extends:
- .test-extends-template
+ - .gcc-before-script-template
- .test-gcc-template
.build-gcc-mpi:
- .clang-before-script-template
- .test-clang-template
-.build-docs:
+.build-docs-binary:
extends:
- .build-extends-template
- - .build-docs-template
+ - .build-docs-binary-template
+ - .clang-before-script-template
+ - .build-clang-template
+
+.build-docs-webpage:
+ extends:
+ - .build-extends-template
+ - .build-docs-webpage-template
+ - .clang-before-script-template
- .build-clang-template
.build-cuda-gcc:
- .build-cuda-template
prepare-regressiontests:
- extends: .regressiontests-template
+ extends: .regressiontests-extends-template
build-gcc-7:
test-gcc-7:
extends: .test-gcc
+ variables:
+ COMPILER_MAJOR_VERSION: 7
+
dependencies:
- build-gcc-7
- prepare-regressiontests
CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
test-gcc-7-double:
- allow_failure: true
extends: .test-gcc
+ variables:
+ COMPILER_MAJOR_VERSION: 7
+
dependencies:
- build-gcc-7-double
- prepare-regressiontests
test-gcc-8:
extends: .test-gcc
+ variables:
+ COMPILER_MAJOR_VERSION: 8
+
+
dependencies:
- build-gcc-8
- prepare-regressiontests
test-gcc-7-simd-sse41:
extends: .test-gcc
+ variables:
+ COMPILER_MAJOR_VERSION: 7
+
dependencies:
- build-gcc-7-simd-sse41
- prepare-regressiontests
test-clang-7:
extends: .test-clang
+ variables:
+ COMPILER_MAJOR_VERSION: 7
+
dependencies:
- build-clang-7
- prepare-regressiontests
+build-clang-8:
+ extends: .build-clang
+
+ variables:
+ COMPILER_MAJOR_VERSION: 8
+
+test-clang-8:
+ extends: .test-clang
+
+ variables:
+ COMPILER_MAJOR_VERSION: 8
+
+ dependencies:
+ - build-clang-8
+ - prepare-regressiontests
+
# For version of clang before 7, we need to always provide the full version
# Use something like this instead in the download script:
# APT_COMPILER_VERSION=$(($COMPILER_MAJOR_VERSION < 7 ? "${COMPILER_MAJOR_VERSION}.0" : $COMPILER_MAJOR_VERSION))
test-clang-6:
extends: .test-clang
+ variables:
+ COMPILER_MAJOR_VERSION: "6.0"
+
dependencies:
- build-clang-6
- prepare-regressiontests
# TODO turn on openmp when updating master head
-# TODO needs to be set to not allow failure
build-clang-tidy:
- allow_failure: true
extends: .build-clang
- stage: post-test
- dependencies: []
+ stage: source-check
+ needs:
+ - job: prepare-regressiontests
variables:
BUILD_DIR: build-clang-tidy
COMPILER_MAJOR_VERSION: 7
- CMAKE_EXTRA_OPTIONS: -DCLANG_TIDY=clang-tidy-$COMPILER_MAJOR_VERSION -DCMAKE_BUILD_TYPE=Reference -DGMX_CLANG_TIDY=ON -DGMX_COMPILER_WARNINGS=ON -DGMX_OPENMP=off
+ CMAKE_BUILD_TYPE_OPTIONS: -DCMAKE_BUILD_TYPE=Debug
+ CMAKE_EXTRA_OPTIONS: -DCLANG_TIDY=clang-tidy-$COMPILER_MAJOR_VERSION -DGMX_CLANG_TIDY=ON -DGMX_COMPILER_WARNINGS=ON -DGMX_OPENMP=off
+
+run-clang-format:
+ extends: .build-clang
+ stage: source-check
+ when: always
+ needs:
+ - job: prepare-regressiontests
+ variables:
+ COMPILER_MAJOR_VERSION: 7
+ script:
+ - export CLANG_FORMAT=clang-format-$COMPILER_MAJOR_VERSION
+ - admin/clang-format.sh check --rev=HEAD^ --warnings=clang-format.log
+ - grep -iq "needs formatting" clang-format.log | tee formatting.txt || true
+ - if [ -s formatting.txt ] ; then echo "clang-format.sh found issues"; exit 1; fi
+ artifacts:
+ when: on_failure
+ paths:
+ - clang-format.log
+ - formatting.txt
+
+update-with-clang-format:
+ extends: .build-clang
+ stage: source-check
+ when: manual
+ allow_failure: true
+ dependencies: []
+ variables:
+ COMPILER_MAJOR_VERSION: 7
+ script:
+ - export CLANG_FORMAT=clang-format-$COMPILER_MAJOR_VERSION
+ - admin/clang-format.sh update --rev=HEAD^ --warnings=clang-format.log
+ - grep -iq "clang-format performed" clang-format.log | tee formatting.txt || true
+ - if [ -s formatting.txt ] ; then echo "clang-format.sh updated files"; exit 1; fi
+ artifacts:
+ when: always
+ paths:
+ - clang-format.log
+ - formatting.txt
build-docs:
- extends: .build-docs
+ when: always
+ extends: .build-docs-binary
+ stage: documentation
+ needs:
+ - job: prepare-regressiontests
variables:
BUILD_DIR: build-docs
- CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on -DCMAKE_BUILD_TYPE=Debug -DGMX_SIMD=None -DGMX_GPU=off
+ COMPILER_MAJOR_VERSION: 7
+ CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on -DGMX_SIMD=None -DGMX_GPU=off
run-check-source:
- extends: .build-docs
- stage: test
- dependencies:
- - build-docs
+ when: always
+ extends: .build-docs-binary
+ stage: source-check
+ needs:
+ - job: build-docs
+ artifacts: true
variables:
BUILD_DIR: build-docs
+ COMPILER_MAJOR_VERSION: 7
script:
- cd $BUILD_DIR
- cmake --build . --target check-source
+ - grep -qi "error" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee doxygenError.txt || true
+ - grep -qi "warning" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee -a doxygenError.txt || true
+ - if [ -s doxygenError.txt ] ; then echo "Found errors while running doxygen"; exit 1; fi
artifacts:
name: docs-artifacts-$CI_COMMIT_REF_SLUG
when: always
# TODO why are the doxygen and sphinx log files disappearing
# TODO use a feature from gitlab runner instead of using pipefail to get timings for the job
webpage:
- extends: .build-docs
+ extends: .build-docs-webpage
+ when: always
stage: post-test
- dependencies:
- - build-docs
- - check-source
+ needs:
+ - job: build-docs
+ artifacts: true
+ - job: run-check-source
+ artifacts: true
variables:
BUILD_DIR: build-docs
- before_script:
- - apt-get -yqq install moreutils
+ COMPILER_MAJOR_VERSION: 7
script:
- cd $BUILD_DIR
- set -o pipefail && cmake --build . --target manual 2>&1 > docs/manual/all-output.txt | ts "%Y/%m/%d %H:%M:%S"
- set -o pipefail && cmake --build . --target webpage | ts "%Y/%m/%d %H:%M:%S"
+ - grep -qi "error" docs/sphinx-*.log | tee sphinxDiagnostics.txt || true
+ - grep -qi "warning" docs/sphinx-*.log | tee -a sphinxDiagnostics.txt || true
+ - if [ -s sphinxDiagnostics.txt ] ; then echo "Found errors during Sphinx documentation build"; cat sphinxDiagnostics.txt; exit 1; fi
+ - cd ..
artifacts:
name: docs-artifacts-$CI_COMMIT_REF_SLUG
when: always
- $BUILD_DIR/docs/doxygen/doxygen-full.log
- $BUILD_DIR/docs/sphinx-html.log
-# TODO do this only in release pipeline
-#linkchecker:
-# extends: .build-docs
-# stage: post-test
-# when: manual
-# dependencies:
-# - webpage
-# variables:
-# BUILD_DIR: build-docs
-# script:
-# - cd $BUILD_DIR
-# - linkchecker docs/html/index.html -f ../docs/linkcheckerrc -Fxml
-# artifacts:
-# reports:
-# junit: $BUILD_DIR/docs/linkchecker-out.xml
+linkchecker:
+ extends: .build-docs-webpage
+ stage: release
+ when: manual
+ needs:
+ - job: webpage
+ artifacts: true
+ variables:
+ BUILD_DIR: build-docs
+ script:
+ - cd $BUILD_DIR
+ - linkchecker docs/html/index.html -f ../docs/linkcheckerrc -Fxml --ignore-url html-full --ignore-url html-user --ignore-url html-lib --ignore-url .tar.gz --ignore-url _sources
+ artifacts:
+ reports:
+ junit: $BUILD_DIR/linkchecker-out.xml
-.build-docs-template:
+.build-docs-binary-template:
# Built by admin/dockerfiles/ci-docs
# TODO this should be organized more like the current documentation.py script
image: gromacs/gromacs:ci-docs
KUBERNETES_CPU_REQUEST: 4
CMAKE_COMPILER_SCRIPT: ""
CMAKE_EXTRA_OPTIONS: ""
+ CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
script:
- echo $BUILD_DIR
- cmake ..
$CMAKE_COMPILER_SCRIPT
$CMAKE_EXTRA_OPTIONS
+ $CMAKE_BUILD_TYPE_OPTIONS
- cmake --build . --target gmx -- -j$KUBERNETES_CPU_REQUEST
- cd ..
artifacts:
expire_in: 1 week
paths:
- $BUILD_DIR
+
+.build-docs-webpage-template:
+ # Built by admin/dockerfiles/ci-docs
+ # TODO this should be organized more like the current documentation.py script
+ image: gromacs/gromacs:ci-docs
+ variables:
+ KUBERNETES_CPU_REQUEST: 4
+ CMAKE_COMPILER_SCRIPT: ""
+ CMAKE_EXTRA_OPTIONS: ""
+ CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
CMAKE_SIMD_OPTIONS: ""
CMAKE_MPI_OPTIONS: ""
CMAKE_PRECISION_OPTIONS: ""
+ CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
+ CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
script:
- echo $BUILD_DIR
- echo $CMAKE_SIMD_OPTIONS
- echo $CMAKE_MPI_OPTIONS
- echo $CMAKE_PRECISION_OPTIONS
+ - echo $CMAKE_BUILD_TYPE_OPTIONS
- echo $INSTALL_DIR
- mkdir -p $BUILD_DIR
- cd $BUILD_DIR
$CMAKE_SIMD_OPTIONS
$CMAKE_MPI_OPTIONS
$CMAKE_PRECISION_OPTIONS
+ $CMAKE_BUILD_TYPE_OPTIONS
+ $CMAKE_GPU_OPTIONS
-DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
- - cmake --build . -- -j$KUBERNETES_CPU_REQUEST
- - cmake --build . --target tests -- -j$KUBERNETES_CPU_REQUEST
- - cmake --build . --target install
+ 2>&1 | tee cmakeLog.log
+ - grep -qi "warning" cmakeLog.log | tee cmakeErrors.log || true
+ - cmake --build . -- -j4 2>&1 | tee buildLogFile.log
+ - grep -qi "warning" buildLogFile.log | tee buildErrors.log || true
+ - cmake --build . --target tests -- -j4 2>&1 | tee testBuildLogFile.log
+ - grep -qi "warning" testBuildLogFile.log | tee -a buildErrors.log || true
+ - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
+ - if [ -s cmakeErrors.log ] ; then echo "Found CMake warning while processing build"; exit 1; fi
+ - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; exit 1; fi
- cd ..
- tar czf gmx-build.tar.gz $BUILD_DIR/
- tar czf gmx-install.tar.gz $INSTALL_DIR/
artifacts:
+ when: always
paths:
- gmx-build.tar.gz
- gmx-install.tar.gz
+ - $BUILD_DIR/*log
- time apt-get -qqy --no-install-suggests --no-install-recommends install
build-essential cmake git ninja-build ccache
clang++-$COMPILER_MAJOR_VERSION clang-tools-$COMPILER_MAJOR_VERSION
- clang-tidy-$COMPILER_MAJOR_VERSION
- libfftw3-dev libhwloc-dev liblapack-dev
+ clang-tidy-$COMPILER_MAJOR_VERSION clang-format-$COMPILER_MAJOR_VERSION libomp-dev
+ libfftw3-dev libhwloc-dev liblapack-dev moreutils grep
- mkdir -p ccache
- export CCACHE_BASEDIR=${PWD}
- export CCACHE_DIR=${PWD}/ccache
--- /dev/null
+.gcc-before-script-template:
+ variables:
+ COMPILER_MAJOR_VERSION: 7
+ EXTRA_INSTALLS: ""
+
+ before_script:
+ - time apt-get -qq update
+ - time apt-get -qqy --no-install-suggests --no-install-recommends install
+ build-essential cmake git ninja-build ccache
+ gcc-$COMPILER_MAJOR_VERSION g++-$COMPILER_MAJOR_VERSION
+ libfftw3-dev libhwloc-dev liblapack-dev moreutils grep
+ $EXTRA_INSTALLS
+ - mkdir -p ccache
+ - export CCACHE_BASEDIR=${PWD}
+ - export CCACHE_DIR=${PWD}/ccache
+
COMPILER_MAJOR_VERSION: 7
BUILD_DIR: build-gcc-$COMPILER_MAJOR_VERSION
CMAKE_COMPILER_SCRIPT: -DCMAKE_C_COMPILER=gcc-$COMPILER_MAJOR_VERSION -DCMAKE_CXX_COMPILER=g++-$COMPILER_MAJOR_VERSION
- EXTRA_INSTALLS: ""
-
- before_script:
- - time apt-get -qq update
- - time apt-get -qqy --no-install-suggests --no-install-recommends install
- build-essential cmake gcc-$COMPILER_MAJOR_VERSION g++-$COMPILER_MAJOR_VERSION
- $EXTRA_INSTALLS
- - mkdir -p ccache
- - export CCACHE_BASEDIR=${PWD}
- - export CCACHE_DIR=${PWD}/ccache
- local: '/admin/ci-templates/.variables-template.yml'
- local: '/admin/ci-templates/.build-template.yml'
- local: '/admin/ci-templates/.test-runner-template.yml'
+ - local: '/admin/ci-templates/.gcc-before-script.yml'
- local: '/admin/ci-templates/.gcc-build-template.yml'
- local: '/admin/ci-templates/.gcc-test-template.yml'
- local: '/admin/ci-templates/.clang-build-template.yml'
.variables-template:
variables:
- KUBERNETES_CPU_LIMIT: 16
+ KUBERNETES_CPU_LIMIT: 4
KUBERNETES_MEMORY_LIMIT: 32Gi
CACHE_FALLBACK_KEY: master
BUILD_DIR: build
#
# This file is part of the GROMACS molecular simulation package.
#
-# Copyright (c) 2010,2014,2018, by the GROMACS development team, led by
+# Copyright (c) 2010,2014,2018,2019, by the GROMACS development team, led by
# Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
# and including many others, as listed in the AUTHORS file in the
# top-level source directory and at http://www.gromacs.org.
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/GMXRC.csh.cmakein ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.csh @ONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/GMXRC.zsh.cmakein ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.zsh @ONLY)
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CTest2JUnit.xsl ${CMAKE_CURRENT_BINARY_DIR}/CTest2JUnit.xsl COPYONLY)
+
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/GMXRC DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.bash DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.zsh DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime)
--- /dev/null
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+<xsl:output method="xml" indent="yes"/>
+ <xsl:template match="/Site">
+ <xsl:variable name="Name"><xsl:value-of select="@Name"/></xsl:variable>
+ <xsl:variable name="Hostname"><xsl:value-of select="@Hostname"/></xsl:variable>
+ <xsl:variable name="TestCount"><xsl:value-of select="count(//TestList/Test)"/> </xsl:variable>
+ <xsl:variable name="ErrorCount"><xsl:value-of select="count(//TestList/Test[@Status='error'])"/> </xsl:variable>
+ <xsl:variable name="FailureCount"><xsl:value-of select="count(//Testing/Test[@Status='failed'])"/> </xsl:variable>
+ <testsuite name="{$Name}" hostname="{$Hostname}" errors="0" failures="{$FailureCount}" tests="{$TestCount}">
+ <xsl:variable name="BuildName"><xsl:value-of select="@BuildName"/></xsl:variable>
+ <xsl:variable name="BuildStamp"><xsl:value-of select="@BuildStamp"/></xsl:variable>
+ <xsl:variable name="Generator"><xsl:value-of select="@Generator"/></xsl:variable>
+ <xsl:variable name="CompilerName"><xsl:value-of select="@CompilerName"/></xsl:variable>
+ <xsl:variable name="OSName"><xsl:value-of select="@OSName"/></xsl:variable>
+ <xsl:variable name="OSRelease"><xsl:value-of select="@OSRelease"/></xsl:variable>
+ <xsl:variable name="OSVersion"><xsl:value-of select="@OSVersion"/></xsl:variable>
+ <xsl:variable name="OSPlatform"><xsl:value-of select="@OSPlatform"/></xsl:variable>
+ <xsl:variable name="Is64Bits"><xsl:value-of select="@Is64Bits"/></xsl:variable>
+ <xsl:variable name="VendorString"><xsl:value-of select="@VendorString"/></xsl:variable>
+ <xsl:variable name="VendorID"><xsl:value-of select="@VendorID"/></xsl:variable>
+ <xsl:variable name="FamilyID"><xsl:value-of select="@FamilyID"/></xsl:variable>
+ <xsl:variable name="ModelID"><xsl:value-of select="@ModelID"/></xsl:variable>
+ <xsl:variable name="ProcessorCacheSize"><xsl:value-of select="@ProcessorCacheSize"/></xsl:variable>
+ <xsl:variable name="NumberOfLogicalCPU"><xsl:value-of select="@NumberOfLogicalCPU"/></xsl:variable>
+ <xsl:variable name="NumberOfPhysicalCPU"><xsl:value-of select="@NumberOfPhysicalCPU"/></xsl:variable>
+ <xsl:variable name="TotalVirtualMemory"><xsl:value-of select="@TotalVirtualMemory"/></xsl:variable>
+ <xsl:variable name="TotalPhysicalMemory"><xsl:value-of select="@TotalPhysicalMemory"/></xsl:variable>
+ <xsl:variable name="LogicalProcessorsPerPhysical"><xsl:value-of select="@LogicalProcessorsPerPhysical"/></xsl:variable>
+ <xsl:variable name="ProcessorClockFrequency"><xsl:value-of select="@ProcessorClockFrequency"/></xsl:variable>
+ <properties>
+ <property name="BuildName" value="{$BuildName}" />
+ <property name="BuildStamp" value="{$BuildStamp}" />
+ <property name="Name" value="{$Name}" />
+ <property name="Generator" value="{$Generator}" />
+ <property name="CompilerName" value="{$CompilerName}" />
+ <property name="OSName" value="{$OSName}" />
+ <property name="Hostname" value="{$Hostname}" />
+ <property name="OSRelease" value="{$OSRelease}" />
+ <property name="OSVersion" value="{$OSVersion}" />
+ <property name="OSPlatform" value="{$OSPlatform}" />
+ <property name="Is64Bits" value="{$Is64Bits}" />
+ <property name="VendorString" value="{$VendorString}" />
+ <property name="VendorID" value="{$VendorID}" />
+ <property name="FamilyID" value="{$FamilyID}" />
+ <property name="ModelID" value="{$ModelID}" />
+ <property name="ProcessorCacheSize" value="{$ProcessorCacheSize}" />
+ <property name="NumberOfLogicalCPU" value="{$NumberOfLogicalCPU}" />
+ <property name="NumberOfPhysicalCPU" value="{$NumberOfPhysicalCPU}" />
+ <property name="TotalVirtualMemory" value="{$TotalVirtualMemory}" />
+ <property name="TotalPhysicalMemory" value="{$TotalPhysicalMemory}" />
+ <property name="LogicalProcessorsPerPhysical" value="{$LogicalProcessorsPerPhysical}" />
+ <property name="ProcessorClockFrequency" value="{$ProcessorClockFrequency}" />
+ </properties>
+ <xsl:apply-templates select="Testing/Test"/>
+
+ <system-out>
+ BuildName: <xsl:value-of select="$BuildName" />
+ BuildStamp: <xsl:value-of select="$BuildStamp" />
+ Name: <xsl:value-of select="$Name" />
+ Generator: <xsl:value-of select="$Generator" />
+ CompilerName: <xsl:value-of select="$CompilerName" />
+ OSName: <xsl:value-of select="$OSName" />
+ Hostname: <xsl:value-of select="$Hostname" />
+ OSRelease: <xsl:value-of select="$OSRelease" />
+ OSVersion: <xsl:value-of select="$OSVersion" />
+ OSPlatform: <xsl:value-of select="$OSPlatform" />
+ Is64Bits: <xsl:value-of select="$Is64Bits" />
+ VendorString: <xsl:value-of select="$VendorString" />
+ VendorID: <xsl:value-of select="$VendorID" />
+ FamilyID: <xsl:value-of select="$FamilyID" />
+ ModelID: <xsl:value-of select="$ModelID" />
+ ProcessorCacheSize: <xsl:value-of select="$ProcessorCacheSize" />
+ NumberOfLogicalCPU: <xsl:value-of select="$NumberOfLogicalCPU" />
+ NumberOfPhysicalCPU: <xsl:value-of select="$NumberOfPhysicalCPU" />
+ TotalVirtualMemory: <xsl:value-of select="$TotalVirtualMemory" />
+ TotalPhysicalMemory: <xsl:value-of select="$TotalPhysicalMemory" />
+ LogicalProcessorsPerPhysical: <xsl:value-of select="$LogicalProcessorsPerPhysical" />
+ ProcessorClockFrequency: <xsl:value-of select="$ProcessorClockFrequency" />
+ </system-out>
+ </testsuite>
+ </xsl:template>
+
+ <xsl:template match="Testing/Test">
+ <xsl:variable name="testcasename"><xsl:value-of select= "Name"/></xsl:variable>
+ <xsl:variable name="testclassname"><xsl:value-of select= " concat('this', substring(Path,2))"/></xsl:variable>
+ <xsl:variable name="exectime">
+ <xsl:for-each select="Results/NamedMeasurement">
+ <xsl:if test="@name = 'Execution Time'">
+ <xsl:value-of select="."/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
+
+ <testcase name="{$testcasename}" classname="{$testclassname}" time="{$exectime}">
+ <xsl:if test="@Status = 'passed'">
+ </xsl:if>
+ <xsl:if test="@Status = 'failed'">
+ <xsl:variable name="failtype">
+ <xsl:for-each select="Results/NamedMeasurement">
+ <xsl:if test="@name = 'Exit Code'">
+ <xsl:value-of select="."/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="failcode">
+ <xsl:for-each select="Results/NamedMeasurement">
+ <xsl:if test="@name = 'Exit Value'">
+ <xsl:value-of select="."/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
+ <failure message="{$failtype} ({$failcode})"><xsl:value-of select="Results/Measurement/Value/text()" /></failure>
+ </xsl:if>
+ <xsl:if test="@Status = 'notrun'">
+ <skipped><xsl:value-of select="Results/Measurement/Value/text()" /></skipped>
+ </xsl:if>
+ </testcase>
+ </xsl:template>
+
+</xsl:stylesheet>
+
* send coordinates buffer address to PP rank
* \param[in] d_x coordinates buffer in GPU memory
*/
- void sendCoordinateBufferAddressToPpRanks(rvec* d_x);
+ void sendCoordinateBufferAddressToPpRanks(DeviceBuffer<float> d_x);
/*! \brief
};
/*!\brief Constructor stub. */
-PmeCoordinateReceiverGpu::PmeCoordinateReceiverGpu(void gmx_unused* pmeStream,
- MPI_Comm gmx_unused comm,
- gmx::ArrayRef<PpRanks> gmx_unused ppRanks) :
+PmeCoordinateReceiverGpu::PmeCoordinateReceiverGpu(void* /* pmeStream */,
+ MPI_Comm /* comm */,
+ gmx::ArrayRef<PpRanks> /* ppRanks */) :
impl_(nullptr)
{
GMX_ASSERT(false,
PmeCoordinateReceiverGpu::~PmeCoordinateReceiverGpu() = default;
/*!\brief init PME-PP GPU communication stub */
-void PmeCoordinateReceiverGpu::sendCoordinateBufferAddressToPpRanks(rvec gmx_unused* d_x)
+void PmeCoordinateReceiverGpu::sendCoordinateBufferAddressToPpRanks(const DeviceBuffer<float> /* d_x */)
{
GMX_ASSERT(false,
"A CPU stub for PME-PP GPU communication initialization was called instead of the "
"correct implementation.");
}
-void PmeCoordinateReceiverGpu::launchReceiveCoordinatesFromPpCudaDirect(int gmx_unused ppRank)
+void PmeCoordinateReceiverGpu::launchReceiveCoordinatesFromPpCudaDirect(int /* ppRank */)
{
GMX_ASSERT(false,
"A CPU stub for PME-PP GPU communication was called instead of the correct "
PmeCoordinateReceiverGpu::Impl::~Impl() = default;
-void PmeCoordinateReceiverGpu::Impl::sendCoordinateBufferAddressToPpRanks(rvec* d_x)
+void PmeCoordinateReceiverGpu::Impl::sendCoordinateBufferAddressToPpRanks(const DeviceBuffer<float> d_x)
{
int ind_start = 0;
PmeCoordinateReceiverGpu::~PmeCoordinateReceiverGpu() = default;
-void PmeCoordinateReceiverGpu::sendCoordinateBufferAddressToPpRanks(rvec* d_x)
+void PmeCoordinateReceiverGpu::sendCoordinateBufferAddressToPpRanks(const DeviceBuffer<float> d_x)
{
impl_->sendCoordinateBufferAddressToPpRanks(d_x);
}
* send coordinates buffer address to PP rank
* \param[in] d_x coordinates buffer in GPU memory
*/
- void sendCoordinateBufferAddressToPpRanks(rvec* d_x);
+ void sendCoordinateBufferAddressToPpRanks(const DeviceBuffer<float> d_x);
/*! \brief
* launch receive of coordinate data from PP rank
"but PME run mode is not PmeRunMode::GPU\n");
// This rank will have its data accessed directly by PP rank, so needs to send the remote addresses.
- rvec* d_x = nullptr;
- rvec* d_f = nullptr;
-# if (GMX_GPU == GMX_GPU_CUDA) // avoid invalid cast for OpenCL
- d_x = reinterpret_cast<rvec*>(pme_gpu_get_device_x(pme));
- d_f = reinterpret_cast<rvec*>(pme_gpu_get_device_f(pme));
-# endif
- pme_pp->pmeCoordinateReceiverGpu->sendCoordinateBufferAddressToPpRanks(d_x);
- pme_pp->pmeForceSenderGpu->sendForceBufferAddressToPpRanks(d_f);
+ pme_pp->pmeCoordinateReceiverGpu->sendCoordinateBufferAddressToPpRanks(
+ pme_gpu_get_device_x(pme));
+ pme_pp->pmeForceSenderGpu->sendForceBufferAddressToPpRanks(
+ reinterpret_cast<rvec*>(pme_gpu_get_device_f(pme)));
}
}
)
target_link_libraries(${exename} PRIVATE mdrun_test_infrastructure)
-# These tests are extremely slow without optimization, so only run them for
-# build types like Release or RelWithDebInfo
-if (CMAKE_BUILD_TYPE MATCHES "Rel")
+# These tests are extremely slow without optimization or OpenMP, so only run them for
+# build types like Release or RelWithDebInfo and if the build has been configured
+# with OpenMP enabled.
+if (CMAKE_BUILD_TYPE MATCHES "Rel" AND GMX_OPENMP)
set(testname "MdrunMpiCoordinationTestsOneRank")
gmx_register_gtest_test(${testname} ${exename} MPI_RANKS 1 SLOW_TEST)
set(testname "MdrunMpiCoordinationTestsTwoRanks")