Commit 596a4197 authored by peastman's avatar peastman
Browse files

Merge pull request #1212 from rmcgibbo/cl2

Enable testing of OpenCL platform on Travis-CI
parents 08468793 2e3d3de8
language: python language: python
python:
- "2.7_with_system_site_packages"
- "3.4"
sudo: false
addons: addons:
apt: apt:
sources:
- ubuntu-toolchain-r-test
packages: packages:
- libpcre3
- libpcre3-dev
- gromacs - gromacs
- doxygen - doxygen
- python-numpy - python-numpy
- python-scipy - python-scipy
matrix:
include:
- sudo: required
env: OPENCL=true
CC=gcc
CXX=g++
CMAKE_FLAGS="
-OPENMM_BUILD_OPENCL_LIB=ON
-DOPENMM_BUILD_OPENCL_TESTS=ON
-DOPENMM_BUILD_STATIC_LIB=OFF
-DOPENMM_BUILD_CPU_LIB=OFF
-DOPENMM_BUILD_REFERENCE_TESTS=OFF
-DOPENMM_BUILD_SERIALIZATION_TESTS=OFF
-DOPENMM_BUILD_PME_PLUGIN=OFF
-DOPENMM_BUILD_AMOEBA_PLUGIN=OFF
-DOPENMM_BUILD_PYTHON_WRAPPERS=OFF
-DOPENMM_BUILD_C_AND_FORTRAN_WRAPPERS=OFF
-DOPENMM_BUILD_EXAMPLES=OFF"
addons: {apt: {packages: []}}
env: - sudo: false
matrix: python: 2.7_with_system_site_packages
- OPENMM_BUILD_STATIC_LIB="OFF" env: OPENCL=false
- OPENMM_BUILD_STATIC_LIB="ON" CC=clang
CXX=clang++
CMAKE_FLAGS="-DOPENMM_BUILD_STATIC_LIB=ON"
before_install: - sudo: false
- export CC=clang python: 2.7_with_system_site_packages
- export CXX=clang++ env: OPENCL=false
CC=clang
CXX=clang++
CMAKE_FLAGS="-DOPENMM_BUILD_STATIC_LIB=OFF"
- sudo: false
python: 3.4
env: OPENCL=false
CC=gcc
CXX=g++
CMAKE_FLAGS="-DOPENMM_BUILD_STATIC_LIB=OFF"
- wget https://anaconda.org/anaconda/swig/3.0.2/download/linux-64/swig-3.0.2-0.tar.bz2 before_install:
- mkdir $HOME/swig - if [[ "$OPENCL" == "true" ]]; then
- tar -xjvf swig-3.0.2-0.tar.bz2 -C $HOME/swig sudo apt-get -yq update &>> ~/apt-get-update.log;
- export PATH=$HOME/swig/bin:$PATH sudo apt-get install -qq fglrx=2:8.960-0ubuntu1 opencl-headers;
- export SWIG_LIB=$HOME/swig/share/swig/3.0.2 fi
- if [[ "$OPENCL" == "false" ]]; then
wget https://anaconda.org/anaconda/swig/3.0.2/download/linux-64/swig-3.0.2-0.tar.bz2;
mkdir $HOME/swig;
tar -xjvf swig-3.0.2-0.tar.bz2 -C $HOME/swig;
export PATH=$HOME/swig/bin:$PATH;
export SWIG_LIB=$HOME/swig/share/swig/3.0.2;
fi
script: script:
- cmake -DCMAKE_INSTALL_PREFIX=$HOME/OpenMM -DOPENMM_BUILD_STATIC_LIB=$OPENMM_BUILD_STATIC_LIB . - CTEST_STOP_TIME=$(python -c "from datetime import datetime, timedelta; import sys; sys.stdout.write((datetime.now() + timedelta(minutes=25)).strftime('%H:%M:%S'))")
- make -j2 - cmake . $CMAKE_FLAGS -DCMAKE_INSTALL_PREFIX=$HOME/OpenMM
- make -j2 install - make -j2 install
- make PythonInstall - if [[ "$OPENCL" == "true" ]]; then ./TestOpenCLDeviceQuery; fi
- # Run the testInstallation script - if [[ "$OPENCL" == "false" ]]; then
- python -m simtk.testInstallation make PythonInstall;
python -m simtk.testInstallation;
(cd python/tests && py.test -v *);
fi
- # run all of the tests, making sure failures at this stage don't cause travis failures - # run all of the tests, making sure failures at this stage don't cause travis failures
- ctest -j2 || true - ctest -j2 --output-on-failure --schedule-random --stop-time $CTEST_STOP_TIME || true
- # get a list of all of the failed tests into this stupid ctest format - # get a list of all of the failed tests into this stupid ctest format
- python -c "import os; fn = os.path.join('Testing', 'Temporary', 'LastTestsFailed.log'); os.path.exists(fn) or exit(0); failed = [line.split(':')[0] for line in open(fn)]; print(','.join(x+','+x for x in failed))" > FailedTests.log - python -c "import os; fn = os.path.join('Testing', 'Temporary', 'LastTestsFailed.log'); os.path.exists(fn) or exit(0); failed = [line.split(':')[0] for line in open(fn)]; print(','.join(x+','+x for x in failed))" > FailedTests.log
- # rerun all of the failed tests - if [ -s Testing/Temporary/LastTestsFailed.log ]; then
- if [ -s Testing/Temporary/LastTestsFailed.log ]; then ctest -I FailedTests.log; fi; ctest -I FailedTests.log;
- # run the python tests too fi
- cd python/tests
- # nosetests -vv --processes=-1 --process-timeout=200
- # nosetests -vv
- py.test -v *
- cd -
...@@ -341,9 +341,14 @@ ENDIF(DL_LIBRARY) ...@@ -341,9 +341,14 @@ ENDIF(DL_LIBRARY)
IF(BUILD_TESTING) IF(BUILD_TESTING)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/tests) INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/tests)
ADD_SUBDIRECTORY(platforms/reference/tests)
ENDIF(BUILD_TESTING) ENDIF(BUILD_TESTING)
set(OPENMM_BUILD_REFERENCE_TESTS TRUE CACHE BOOL "Whether to build Reference platform test cases")
MARK_AS_ADVANCED(OPENMM_BUILD_REFERENCE_TESTS)
IF(BUILD_TESTING AND OPENMM_BUILD_REFERENCE_TESTS)
ADD_SUBDIRECTORY(platforms/reference/tests)
ENDIF(BUILD_TESTING AND OPENMM_BUILD_REFERENCE_TESTS)
# Which hardware platforms to build # Which hardware platforms to build
# A bit of tedium because we are using custom FindCUDA files that happen to work... # A bit of tedium because we are using custom FindCUDA files that happen to work...
......
...@@ -12,9 +12,11 @@ ...@@ -12,9 +12,11 @@
# libOpenMMCPU_static.a # libOpenMMCPU_static.a
#---------------------------------------------------- #----------------------------------------------------
IF(BUILD_TESTING) SET(OPENMM_BUILD_CPU_TESTS TRUE CACHE BOOL "Whether to build CPU platform test cases")
MARK_AS_ADVANCED(OPENMM_BUILD_CPU_TESTS)
IF(BUILD_TESTING AND OPENMM_BUILD_CPU_TESTS)
SUBDIRS(tests) SUBDIRS(tests)
ENDIF(BUILD_TESTING) ENDIF(BUILD_TESTING AND OPENMM_BUILD_CPU_TESTS)
# The source is organized into subdirectories, but we handle them all from # The source is organized into subdirectories, but we handle them all from
# this CMakeLists file rather than letting CMake visit them as SUBDIRS. # this CMakeLists file rather than letting CMake visit them as SUBDIRS.
......
/**
* This file is adapted from vexcl's (https://github.com/ddemidov/vexcl)
* example "devlist.cpp", which is
*
* Copyright (c) 2012-2014 Denis Demidov <dennis.demidov@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <iostream>
#include <iomanip>
#include <sstream>
#include <iterator>
#include <set>
#include <algorithm>
#include <vector>
#include "OpenCLContext.h"
using namespace std;
#define SHOW_DEVPROP(name) \
cout << " " << left << setw(32) << #name << " = " \
<< d.getInfo< name >() << endl
int main() {
std::vector<cl::Platform> platforms;
cl::Platform::get(&platforms);
cout << "OpenCL devices:" << endl << endl;
for (int j = 0; j < platforms.size(); j++) {
vector<cl::Device> devices;
platforms[j].getDevices(CL_DEVICE_TYPE_ALL, &devices);
for (int i = 0; i < devices.size(); i++) {
cl::Device d = devices[i];
cout << "OpenCLPlatformIndex " << j << ", OpenCLDeviceIndex " << i << ": \"" << d.getInfo<CL_DEVICE_NAME>()
<< "\"" << endl << " " << left << setw(32) << "CL_PLATFORM_NAME" << " = "
<< cl::Platform(d.getInfo<CL_DEVICE_PLATFORM>()).getInfo<CL_PLATFORM_NAME>()
<< endl
<< " " << left << setw(32) << "CL_PLATFORM_VENDOR" << " = "
<< platforms[j].getInfo<CL_PLATFORM_VENDOR>()
<< endl;
SHOW_DEVPROP(CL_DEVICE_VENDOR);
SHOW_DEVPROP(CL_DEVICE_VERSION);
cout << " " << left << setw(32) << "CL_DEVICE_TYPE" << " = ";
if (d.getInfo<CL_DEVICE_TYPE>() == CL_DEVICE_TYPE_CPU) {
cout << "CL_DEVICE_TYPE_CPU" << endl;
} else if (d.getInfo<CL_DEVICE_TYPE>() == CL_DEVICE_TYPE_GPU) {
cout << "CL_DEVICE_TYPE_GPU" << endl;
} else if (d.getInfo<CL_DEVICE_TYPE>() == CL_DEVICE_TYPE_ACCELERATOR) {
cout << "CL_DEVICE_TYPE_ACCELERATOR" << endl;
} else {
cout << "Unknown" << endl;
}
SHOW_DEVPROP(CL_DEVICE_MAX_COMPUTE_UNITS);
cout << " " << left << setw(32) << "CL_DEVICE_MAX_WORK_ITEM_SIZES" << " = [";
for (int k = 0; k < d.getInfo<CL_DEVICE_MAX_WORK_ITEM_SIZES>().size(); k++) {
cout << d.getInfo<CL_DEVICE_MAX_WORK_ITEM_SIZES>()[k];
if (k < d.getInfo<CL_DEVICE_MAX_WORK_ITEM_SIZES>().size() - 1)
cout << ", ";
}
cout << "]" << endl;
SHOW_DEVPROP(CL_DEVICE_HOST_UNIFIED_MEMORY);
SHOW_DEVPROP(CL_DEVICE_GLOBAL_MEM_SIZE);
SHOW_DEVPROP(CL_DEVICE_LOCAL_MEM_SIZE);
SHOW_DEVPROP(CL_DEVICE_MAX_MEM_ALLOC_SIZE);
SHOW_DEVPROP(CL_DEVICE_ADDRESS_BITS);
SHOW_DEVPROP(CL_DEVICE_MAX_CLOCK_FREQUENCY);
int processingElementsPerComputeUnit;
if (d.getInfo<CL_DEVICE_TYPE>() != CL_DEVICE_TYPE_GPU) {
processingElementsPerComputeUnit = 1;
} else if (d.getInfo<CL_DEVICE_EXTENSIONS>().find("cl_nv_device_attribute_query") != string::npos) {
cl_uint computeCapabilityMajor;
#ifdef CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV
clGetDeviceInfo(d(), CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV, sizeof(cl_uint), &computeCapabilityMajor, NULL);
processingElementsPerComputeUnit = (computeCapabilityMajor < 2 ? 8 : 32);
#endif
} else if (d.getInfo<CL_DEVICE_EXTENSIONS>().find("cl_amd_device_attribute_query") != string::npos) {
#ifdef CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD
try {
processingElementsPerComputeUnit = d.getInfo<CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD>() *
d.getInfo<CL_DEVICE_SIMD_WIDTH_AMD>() *
d.getInfo<CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD>();
} catch (cl::Error err) {}
#endif
}
cout << " processingElementsPerComputeUnit" << " = " << processingElementsPerComputeUnit << endl;
int speed = devices[i].getInfo<CL_DEVICE_MAX_COMPUTE_UNITS>()*processingElementsPerComputeUnit*d.getInfo<CL_DEVICE_MAX_CLOCK_FREQUENCY>();
cout << " estimatedSpeed = " << speed << endl;
cout << " " << left << setw(32) << "CL_DEVICE_EXTENSIONS" << " = ";
istringstream iss(d.getInfo<CL_DEVICE_EXTENSIONS>());
set<string> extensions;
extensions.insert(istream_iterator<string>(iss), istream_iterator<string>());
size_t w = 40;
for (set<string>::iterator s = extensions.begin(); s != extensions.end(); ++s) {
w += s->length() + 1;
if (w > 80) {
cout << endl << setw(w = 8) << "";
w += s->length() + 1;
}
cout << *s << " ";
}
cout << endl << endl;
}
}
}
...@@ -40,7 +40,7 @@ SET(API_AMOEBA_INCLUDE_DIRS) # start empty ...@@ -40,7 +40,7 @@ SET(API_AMOEBA_INCLUDE_DIRS) # start empty
FOREACH(subdir ${OPENMM_AMOEBA_PLUGIN_SOURCE_SUBDIRS}) FOREACH(subdir ${OPENMM_AMOEBA_PLUGIN_SOURCE_SUBDIRS})
# append # append
SET(API_AMOEBA_INCLUDE_DIRS ${API_AMOEBA_INCLUDE_DIRS} SET(API_AMOEBA_INCLUDE_DIRS ${API_AMOEBA_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/${subdir}/include ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}/include
${CMAKE_CURRENT_SOURCE_DIR}/${subdir}/include/internal) ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}/include/internal)
ENDFOREACH(subdir) ENDFOREACH(subdir)
...@@ -162,6 +162,6 @@ ELSE (EXECUTABLE_OUTPUT_PATH) ...@@ -162,6 +162,6 @@ ELSE (EXECUTABLE_OUTPUT_PATH)
SET (TEST_PATH .) SET (TEST_PATH .)
ENDIF (EXECUTABLE_OUTPUT_PATH) ENDIF (EXECUTABLE_OUTPUT_PATH)
IF(BUILD_TESTING) IF(BUILD_TESTING AND OPENMM_BUILD_SERIALIZATION_TESTS)
ADD_SUBDIRECTORY(serialization/tests) ADD_SUBDIRECTORY(serialization/tests)
ENDIF(BUILD_TESTING) ENDIF(BUILD_TESTING AND OPENMM_BUILD_SERIALIZATION_TESTS)
...@@ -75,6 +75,6 @@ SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS ...@@ -75,6 +75,6 @@ SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS
INSTALL(TARGETS ${SHARED_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/plugins) INSTALL(TARGETS ${SHARED_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/plugins)
IF(BUILD_TESTING) IF(BUILD_TESTING AND OPENMM_BUILD_REFERENCE_TESTS)
SUBDIRS (tests) SUBDIRS (tests)
ENDIF(BUILD_TESTING) ENDIF(BUILD_TESTING AND OPENMM_BUILD_REFERENCE_TESTS)
...@@ -145,6 +145,6 @@ ENDIF (EXECUTABLE_OUTPUT_PATH) ...@@ -145,6 +145,6 @@ ENDIF (EXECUTABLE_OUTPUT_PATH)
#INCLUDE(ApiDoxygen.cmake) #INCLUDE(ApiDoxygen.cmake)
IF(BUILD_TESTING) IF(BUILD_TESTING AND OPENMM_BUILD_SERIALIZATION_TESTS)
ADD_SUBDIRECTORY(serialization/tests) ADD_SUBDIRECTORY(serialization/tests)
ENDIF(BUILD_TESTING) ENDIF(BUILD_TESTING AND OPENMM_BUILD_SERIALIZATION_TESTS)
...@@ -75,6 +75,6 @@ SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS ...@@ -75,6 +75,6 @@ SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS
INSTALL(TARGETS ${SHARED_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/plugins) INSTALL(TARGETS ${SHARED_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/plugins)
IF(BUILD_TESTING) IF(BUILD_TESTING AND OPENMM_BUILD_REFERENCE_TESTS)
SUBDIRS (tests) SUBDIRS (tests)
ENDIF(BUILD_TESTING) ENDIF(BUILD_TESTING AND OPENMM_BUILD_REFERENCE_TESTS)
...@@ -75,6 +75,6 @@ SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS ...@@ -75,6 +75,6 @@ SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS
INSTALL(TARGETS ${SHARED_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/plugins) INSTALL(TARGETS ${SHARED_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/plugins)
IF(BUILD_TESTING) IF(BUILD_TESTING AND OPENMM_BUILD_REFERENCE_TESTS)
SUBDIRS (tests) SUBDIRS (tests)
ENDIF(BUILD_TESTING) ENDIF(BUILD_TESTING AND OPENMM_BUILD_REFERENCE_TESTS)
...@@ -6,6 +6,8 @@ INSTALL_FILES(/include/openmm/serialization FILES ${CMAKE_CURRENT_SOURCE_DIR}/in ...@@ -6,6 +6,8 @@ INSTALL_FILES(/include/openmm/serialization FILES ${CMAKE_CURRENT_SOURCE_DIR}/in
INSTALL_FILES(/include/openmm/serialization FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/openmm/serialization/SerializationProxy.h) INSTALL_FILES(/include/openmm/serialization FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/openmm/serialization/SerializationProxy.h)
INSTALL_FILES(/include/openmm/serialization FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/openmm/serialization/XmlSerializer.h) INSTALL_FILES(/include/openmm/serialization FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/openmm/serialization/XmlSerializer.h)
IF(BUILD_TESTING) SET(OPENMM_BUILD_SERIALIZATION_TESTS TRUE CACHE BOOL "Whether to build serialization test cases")
MARK_AS_ADVANCED(OPENMM_BUILD_SERIALIZATION_TESTS)
IF(BUILD_TESTING AND OPENMM_BUILD_SERIALIZATION_TESTS)
ADD_SUBDIRECTORY(tests) ADD_SUBDIRECTORY(tests)
ENDIF(BUILD_TESTING) ENDIF(BUILD_TESTING AND OPENMM_BUILD_SERIALIZATION_TESTS)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment