Merge branch 'master' into feature/atomics

This commit is contained in:
Matt Larsen 2016-03-04 08:03:33 -08:00
commit e8b08f2e00
23 changed files with 152 additions and 98 deletions

@ -174,7 +174,8 @@ else()
# The user has not requested an exact version. Among known
# versions, find those that are acceptable to the user request.
set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS}
"1.58.0" "1.58" "1.57.0" "1.57" "1.56.0" "1.56" "1.55.0" "1.55" "1.54.0" "1.54"
"1.60.0" "1.60"
"1.59.0" "1.59" "1.58.0" "1.58" "1.57.0" "1.57" "1.56.0" "1.56" "1.55.0" "1.55" "1.54.0" "1.54"
"1.53.0" "1.53" "1.52.0" "1.52" "1.51.0" "1.51"
"1.50.0" "1.50" "1.49.0" "1.49" "1.48.0" "1.48" "1.47.0" "1.47" "1.46.1"
"1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42"

@ -65,6 +65,8 @@
# Note: By default we use 'native' as the default option
#
#
function(set_vectorization_flags_properties vec_levels_var)
set(vec_levels none native)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
@ -72,9 +74,9 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
list(APPEND vec_levels avx)
#common flags for the avx instructions for the gcc compiler
set_property(GLOBAL PROPERTY VTKm_NATIVE_FLAGS -march=native)
set_property(GLOBAL PROPERTY VTKm_AVX_FLAGS -mavx)
set_property(GLOBAL PROPERTY VTKm_AVX2_FLAGS "-mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2")
set(native_flags -march=native)
set(avx_flags -mavx)
set(avx2_flags ${avx_flags} -mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2)
if (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 4.7 OR
CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.7)
@ -83,24 +85,24 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
elseif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
#if GNU is less than 5.1 you get avx, avx2, and some avx512
list(APPEND vec_levels avx2 avx512)
set_property(GLOBAL PROPERTY VTKm_AVX512_FLAGS "-mavx512f -mavx512pf -mavx512er -mavx512cd")
set(avx512_flags ${avx2_flags} -mavx512f -mavx512pf -mavx512er -mavx512cd)
else()
#if GNU is 5.1+ you get avx, avx2, and more avx512
list(APPEND vec_levels avx2 avx512)
set_property(GLOBAL PROPERTY VTKm_AVX512_FLAGS "-mavx512f -mavx512pf -mavx512er -mavx512cd -mavx512vl -mavx512bw -mavx512dq -mavx512ifma -mavx512vbmi")
set(avx512_flags ${avx2_flags} -mavx512f -mavx512pf -mavx512er -mavx512cd -mavx512vl -mavx512bw -mavx512dq -mavx512ifma -mavx512vbmi)
endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
list(APPEND vec_levels avx avx2 avx512)
set_property(GLOBAL PROPERTY VTKm_NATIVE_FLAGS -march=native)
set_property(GLOBAL PROPERTY VTKm_AVX_FLAGS -mavx)
set_property(GLOBAL PROPERTY VTKm_AVX2_FLAGS "-mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2")
set_property(GLOBAL PROPERTY VTKm_AVX512_FLAGS -mavx512)
set(native_flags -march=native)
set(avx_flags -mavx)
set(avx2_flags ${avx_flags} -mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2)
set(avx512_flags ${avx2_flags} -mavx512)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
#While Clang support AVX512, no version of AppleClang has that support yet
list(APPEND vec_levels avx avx2)
set_property(GLOBAL PROPERTY VTKm_NATIVE_FLAGS -march=native)
set_property(GLOBAL PROPERTY VTKm_AVX_FLAGS -mavx)
set_property(GLOBAL PROPERTY VTKm_AVX2_FLAGS "-mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2")
set(native_flags -march=native)
set(avx_flags -mavx)
set(avx2_flags ${avx_flags} -mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "PGI")
#I can't find documentation to explicitly state the level of vectorization
#support I want from the PGI compiler
@ -109,18 +111,31 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
#Intel 15.X is the first version with avx512
#Intel 16.X has way better vector generation compared to 15.X though
set_property(GLOBAL PROPERTY VTKm_NATIVE_FLAGS -xHost)
set_property(GLOBAL PROPERTY VTKm_AVX_FLAGS -xAVX)
set_property(GLOBAL PROPERTY VTKm_AVX2_FLAGS -xCORE-AVX2)
set(native_flags -xHost)
set(avx_flags -xAVX)
set(avx2_flags -xCORE-AVX2)
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0)
list(APPEND vec_levels avx avx2)
else()
list(APPEND vec_levels avx avx2 avx512)
set_property(GLOBAL PROPERTY VTKm_AVX2_FLAGS -xCORE-AVX512)
list(APPEND vec_levels avx avx2 avx512 knl)
set(avx512_flags -xCORE-AVX512)
set(knl_flags -xMIC-AVX512)
endif()
endif()
set_property(GLOBAL PROPERTY VTKm_NATIVE_FLAGS ${native_flags})
set_property(GLOBAL PROPERTY VTKm_AVX_FLAGS ${avx_flags})
set_property(GLOBAL PROPERTY VTKm_AVX2_FLAGS ${avx2_flags})
set_property(GLOBAL PROPERTY VTKm_AVX512_FLAGS ${avx512_flags})
set_property(GLOBAL PROPERTY VTKm_KNLAVX512_FLAGS ${knl_flags})
set(${vec_levels_var} ${vec_levels} PARENT_SCOPE)
endfunction() # set_vectorization_flags_properties
set_vectorization_flags_properties(vec_levels)
#
# Now that we have set up what levels the compiler lets setup the CMake option
# We use a combo box style property, so that ccmake and cmake-gui have a
@ -139,20 +154,17 @@ if(VTKm_Vectorization STREQUAL "native")
elseif(VTKm_Vectorization STREQUAL "avx")
get_property(flags GLOBAL PROPERTY VTKm_AVX_FLAGS)
elseif(VTKm_Vectorization STREQUAL "avx2")
get_property(avx GLOBAL PROPERTY VTKm_AVX_FLAGS)
get_property(avx2 GLOBAL PROPERTY VTKm_AVX2_FLAGS)
set(flags "${avx} ${avx2}")
get_property(flags GLOBAL PROPERTY VTKm_AVX2_FLAGS)
elseif(VTKm_Vectorization STREQUAL "avx512")
get_property(avx GLOBAL PROPERTY VTKm_AVX_FLAGS)
get_property(avx2 GLOBAL PROPERTY VTKm_AVX2_FLAGS)
get_property(avx512 GLOBAL PROPERTY VTKm_AVX512_FLAGS)
set(flags "${avx} ${avx2} ${avx512}")
get_property(flags GLOBAL PROPERTY VTKm_AVX512_FLAGS)
elseif(VTKm_Vectorization STREQUAL "knl")
get_property(flags GLOBAL PROPERTY VTKm_KNLAVX512_FLAGS)
endif()
#guard against adding the flags multiple times, which happens when multiple
#backends include this file
if(NOT VTKm_Vectorization_flags_added)
set(VTKm_Vectorization_flags_added true)
set_property(GLOBAL PROPERTY VTKm_Vectorization_FLAGS "${flags}")
set_property(GLOBAL PROPERTY VTKm_Vectorization_FLAGS ${flags})
list(APPEND VTKm_COMPILE_OPTIONS ${flags})
endif()

@ -41,9 +41,10 @@ int main(int argc, char **argv)
arch_to_compute[52] = "compute_52";
arch_to_compute[53] = "compute_53";
cudaError_t err;
int nDevices;
cudaGetDeviceCount(&nDevices);
if(nDevices == 0)
err = cudaGetDeviceCount(&nDevices);
if(err != cudaSuccess || nDevices < 1)
{ //return failure if no cuda devices found
return 1;
}
@ -54,7 +55,11 @@ int main(int argc, char **argv)
for (int i = 0; i < nDevices; i++)
{
cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, i);
err = cudaGetDeviceProperties(&prop, i);
if(err != cudaSuccess)
{
continue;
}
//convert 2.1 to 21, 3.5 to 35, etc
int arch = (prop.major * 10) + prop.minor;
@ -71,18 +76,18 @@ int main(int argc, char **argv)
//for is not found
if(arch_to_compute.find(arch) != arch_to_compute.end() )
{
std::string compute_level = arch_to_compute[arch];
std::cout << "--generate-code arch=" << compute_level << ",code=sm_"<< arch << " ";
std::string compute_level = arch_to_compute[arch];
std::cout << "--generate-code arch=" << compute_level
<< ",code=sm_"<< arch << " ";
}
else
{
//if not found default to known highest arch, and compile to a virtual arch
//instead of a known sm.
std::map< int, std::string >::const_iterator i = arch_to_compute.end();
--i;
std::string compute_level = i->second;
std::cout << "--generate-code arch=" << compute_level << ",code=" << compute_level << " ";
//if not found default to known highest arch, and compile to a virtual
//arch instead of a known sm.
std::string compute_level = arch_to_compute.rbegin()->second;
std::cout << "--generate-code arch=" << compute_level
<< ",code=" << compute_level << " ";
}
}
return 0;
}
}

@ -304,6 +304,7 @@ install(
# Install Use files.
install(
FILES
${VTKm_SOURCE_DIR}/CMake/UseVTKmBase.cmake
${VTKm_SOURCE_DIR}/CMake/UseVTKmSerial.cmake
${VTKm_SOURCE_DIR}/CMake/UseVTKmTBB.cmake
${VTKm_SOURCE_DIR}/CMake/UseVTKmCUDA.cmake
@ -313,6 +314,7 @@ install(
# Install support files.
install(
FILES
${VTKm_SOURCE_DIR}/CMake/VTKmMacros.cmake
${VTKm_SOURCE_DIR}/CMake/VTKmCompilerOptimizations.cmake
${VTKm_SOURCE_DIR}/CMake/VTKmDetectCUDAVersion.cxx
DESTINATION ${VTKm_INSTALL_CMAKE_MODULE_DIR}

@ -27,7 +27,7 @@
set(CTEST_PROJECT_NAME "VTKM")
set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC")
set(CTEST_DROP_METHOD "http")
set(CTEST_DROP_METHOD "https")
set(CTEST_DROP_SITE "open.cdash.org")
set(CTEST_DROP_LOCATION "/submit.php?project=VTKM")
set(CTEST_DROP_SITE_CDASH TRUE)

@ -28,7 +28,7 @@ set_property(
APPEND
PROPERTY COMPILE_DEFINITIONS "VTKM_DEVICE_ADAPTER=VTKM_DEVICE_ADAPTER_SERIAL")
if(VTKm_Cuda_FOUND)
if(VTKm_CUDA_FOUND)
set (cudaSource "${CMAKE_CURRENT_BINARY_DIR}/Clipping.cu")
configure_file(Clipping.cxx ${cudaSource} COPYONLY)

@ -27,7 +27,7 @@ if(OPENGL_FOUND AND GLUT_FOUND)
target_link_libraries(HelloWorld_SERIAL ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} ${GLUT_LIBRARIES} ${VTKm_LIBRARIES})
target_compile_options(HelloWorld_SERIAL PRIVATE ${VTKm_COMPILE_OPTIONS})
if(VTKm_Cuda_FOUND)
if(VTKm_CUDA_FOUND)
vtkm_disable_troublesome_thrust_warnings()
cuda_add_executable(HelloWorld_CUDA HelloWorld.cu)
target_link_libraries(HelloWorld_CUDA ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} ${GLUT_LIBRARIES} ${VTKm_LIBRARIES})

@ -26,7 +26,7 @@ if(OPENGL_FOUND AND GLUT_FOUND)
target_link_libraries(IsosurfaceUniformGrid_SERIAL ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${VTKm_LIBRARIES})
target_compile_options(IsosurfaceUniformGrid_SERIAL PRIVATE ${VTKm_COMPILE_OPTIONS})
if(VTKm_Cuda_FOUND)
if(VTKm_CUDA_FOUND)
vtkm_disable_troublesome_thrust_warnings()
cuda_add_executable(IsosurfaceUniformGrid_CUDA IsosurfaceUniformGrid.cu)
target_link_libraries(IsosurfaceUniformGrid_CUDA ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${VTKm_LIBRARIES})

@ -20,7 +20,7 @@
##
##=============================================================================
if(VTKm_Cuda_FOUND)
if(VTKm_CUDA_FOUND)
cuda_add_executable(MultiBackend MultiBackend.cu)
else()
add_executable(MultiBackend MultiBackend.cxx)

@ -26,7 +26,7 @@ if(OPENGL_FOUND AND GLUT_FOUND)
target_link_libraries(StreamLineUniformGrid_SERIAL ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES})
target_compile_options(StreamLineUniformGrid_SERIAL PRIVATE ${VTKm_COMPILE_OPTIONS})
if(VTKm_Cuda_FOUND)
if(VTKm_CUDA_FOUND)
cuda_add_executable(StreamLineUniformGrid_CUDA StreamLineUniformGrid.cu)
target_link_libraries(StreamLineUniformGrid_CUDA ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES})
target_compile_options(StreamLineUniformGrid_CUDA PRIVATE ${VTKm_COMPILE_OPTIONS})

@ -41,7 +41,7 @@ if(OPENGL_FOUND AND GLUT_FOUND)
target_link_libraries(TriangulateUniformGrid_SERIAL ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${VTKm_LIBRARIES})
target_compile_options(TriangulateUniformGrid_SERIAL PRIVATE ${VTKm_COMPILE_OPTIONS})
if(VTKm_Cuda_FOUND)
if(VTKm_CUDA_FOUND)
cuda_add_executable(TetrahedralizeExplicitGrid_CUDA TetrahedralizeExplicitGrid.cu)
target_link_libraries(TetrahedralizeExplicitGrid_CUDA ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${VTKm_LIBRARIES})
target_compile_options(TetrahedralizeExplicitGrid_CUDA PRIVATE ${VTKm_COMPILE_OPTIONS})

@ -86,28 +86,37 @@ struct TypeTraits<const T> : TypeTraits<T>
typedef TypeTraitsRealTag NumericTag; \
typedef TypeTraitsScalarTag DimensionalityTag; \
VTKM_EXEC_CONT_EXPORT static T ZeroInitialization() { return T(); } \
}
};
#define VTKM_BASIC_INTEGER_TYPE(T) \
template<> struct TypeTraits<T> { \
template<> struct TypeTraits< T > { \
typedef TypeTraitsIntegerTag NumericTag; \
typedef TypeTraitsScalarTag DimensionalityTag; \
VTKM_EXEC_CONT_EXPORT static T ZeroInitialization() { return T(); } \
}
VTKM_EXEC_CONT_EXPORT static T ZeroInitialization() \
{ \
typedef T ReturnType; \
return ReturnType(); \
} \
}; \
/// Traits for basic C++ types.
///
VTKM_BASIC_REAL_TYPE(vtkm::Float32);
VTKM_BASIC_REAL_TYPE(vtkm::Float64);
VTKM_BASIC_INTEGER_TYPE(vtkm::Int8);
VTKM_BASIC_INTEGER_TYPE(vtkm::UInt8);
VTKM_BASIC_INTEGER_TYPE(vtkm::Int16);
VTKM_BASIC_INTEGER_TYPE(vtkm::UInt16);
VTKM_BASIC_INTEGER_TYPE(vtkm::Int32);
VTKM_BASIC_INTEGER_TYPE(vtkm::UInt32);
VTKM_BASIC_INTEGER_TYPE(vtkm::Int64);
VTKM_BASIC_INTEGER_TYPE(vtkm::UInt64);
VTKM_BASIC_REAL_TYPE(float)
VTKM_BASIC_REAL_TYPE(double)
VTKM_BASIC_INTEGER_TYPE(char)
VTKM_BASIC_INTEGER_TYPE(signed char)
VTKM_BASIC_INTEGER_TYPE(unsigned char)
VTKM_BASIC_INTEGER_TYPE(short)
VTKM_BASIC_INTEGER_TYPE(unsigned short)
VTKM_BASIC_INTEGER_TYPE(int)
VTKM_BASIC_INTEGER_TYPE(unsigned int)
VTKM_BASIC_INTEGER_TYPE(long)
VTKM_BASIC_INTEGER_TYPE(unsigned long)
VTKM_BASIC_INTEGER_TYPE(long long)
VTKM_BASIC_INTEGER_TYPE(unsigned long long)
#undef VTKM_BASIC_REAL_TYPE
#undef VTKM_BASIC_INTEGER_TYPE

@ -126,12 +126,13 @@ typedef unsigned int UInt32;
#error Could not find a 32-bit integer.
#endif
#if VTKM_SIZE_LONG == 8
typedef signed long Int64;
typedef unsigned long UInt64;
#elif VTKM_SIZE_LONG_LONG == 8
//In this order so that we exactly match the logic that exists in VTK
#if VTKM_SIZE_LONG_LONG == 8
typedef signed long long Int64;
typedef unsigned long long UInt64;
#elif VTKM_SIZE_LONG == 8
typedef signed long Int64;
typedef unsigned long UInt64;
#else
#error Could not find a 64-bit integer.
#endif
@ -653,10 +654,13 @@ struct BindLeftBinaryOp
VTKM_EXEC_CONT_EXPORT
BindLeftBinaryOp(const T &leftValue, BinaryOpType binaryOp = BinaryOpType())
: LeftValue(leftValue), BinaryOp(binaryOp) { }
template<typename RightT>
VTKM_EXEC_CONT_EXPORT
ReturnT operator()(const T &rightValue) const
ReturnT operator()(const RightT &rightValue) const
{
return static_cast<ReturnT>(this->BinaryOp(this->LeftValue, rightValue));
return static_cast<ReturnT>(this->BinaryOp(this->LeftValue,
static_cast<T>(rightValue)));
}
};
@ -669,10 +673,13 @@ struct BindRightBinaryOp
VTKM_EXEC_CONT_EXPORT
BindRightBinaryOp(const T &rightValue, BinaryOpType binaryOp = BinaryOpType())
: RightValue(rightValue), BinaryOp(binaryOp) { }
template<typename LeftT>
VTKM_EXEC_CONT_EXPORT
ReturnT operator()(const T &leftValue) const
ReturnT operator()(const LeftT &leftValue) const
{
return static_cast<ReturnT>(this->BinaryOp(leftValue, this->RightValue));
return static_cast<ReturnT>(this->BinaryOp(static_cast<T>(leftValue),
this->RightValue));
}
};

@ -264,16 +264,21 @@ struct VecTraits<vtkm::Pair<T,U> >
/// Allows you to treat basic types as if they were vectors.
VTKM_BASIC_TYPE_VECTOR(vtkm::Float32)
VTKM_BASIC_TYPE_VECTOR(vtkm::Float64)
VTKM_BASIC_TYPE_VECTOR(vtkm::Int8)
VTKM_BASIC_TYPE_VECTOR(vtkm::UInt8)
VTKM_BASIC_TYPE_VECTOR(vtkm::Int16)
VTKM_BASIC_TYPE_VECTOR(vtkm::UInt16)
VTKM_BASIC_TYPE_VECTOR(vtkm::Int32)
VTKM_BASIC_TYPE_VECTOR(vtkm::UInt32)
VTKM_BASIC_TYPE_VECTOR(vtkm::Int64)
VTKM_BASIC_TYPE_VECTOR(vtkm::UInt64)
VTKM_BASIC_TYPE_VECTOR(float)
VTKM_BASIC_TYPE_VECTOR(double)
VTKM_BASIC_TYPE_VECTOR(char)
VTKM_BASIC_TYPE_VECTOR(signed char)
VTKM_BASIC_TYPE_VECTOR(unsigned char)
VTKM_BASIC_TYPE_VECTOR(short)
VTKM_BASIC_TYPE_VECTOR(unsigned short)
VTKM_BASIC_TYPE_VECTOR(int)
VTKM_BASIC_TYPE_VECTOR(unsigned int)
VTKM_BASIC_TYPE_VECTOR(long)
VTKM_BASIC_TYPE_VECTOR(unsigned long)
VTKM_BASIC_TYPE_VECTOR(long long)
VTKM_BASIC_TYPE_VECTOR(unsigned long long)
//#undef VTKM_BASIC_TYPE_VECTOR

@ -104,7 +104,7 @@ public:
VTKM_SUPPRESS_EXEC_WARNINGS
VTKM_EXEC_CONT_EXPORT
const SourcePortalType &GetPortal() const { this->SourcePortal; }
const SourcePortalType &GetPortal() const { return this->SourcePortal; }
private:
SourcePortalType SourcePortal;

@ -72,9 +72,11 @@ public:
/// The Dimensionality of the cells inside the cell set.
/// Lines = 1
/// Triangles, Quads = 2
/// Tets, Hexs = 3
/// Tets, Hexs, etc = 3
///
/// Currently
/// CellSetExplicit has the ability to contain cells of multiple
/// dimensions. These datasets generally report a dimensionality
/// of 3.
virtual vtkm::IdComponent GetDimensionality() const
{
return this->Dimensionality;

@ -517,8 +517,10 @@ private:
#undef VTKM_GET_CONNECTIVITY_METHOD
protected:
// These are used in the AddCell and related methods to incrementally add
// cells.
// cells. They need to be protected as subclasses of CellSetExplicit
// need to set these values when implementing Fill()
vtkm::Id ConnectivityLength;
vtkm::Id NumberOfCells;
vtkm::Id NumberOfPoints;

@ -25,6 +25,7 @@
#include <vtkm/cont/Assert.h>
#include <vtkm/cont/CoordinateSystem.h>
#include <vtkm/cont/DataSet.h>
#include <vtkm/cont/DeviceAdapterSerial.h>
namespace vtkm {
namespace cont {
@ -37,9 +38,8 @@ class DataSetBuilderRectilinear
void CopyInto(const std::vector<T>& input,
vtkm::cont::ArrayHandle<U>& output )
{
output.Allocate( static_cast<vtkm::Id>(input.size()) );
std::copy( input.begin(), input.end(),
ArrayPortalToIteratorBegin(output.GetPortalControl()) );
DataSetBuilderRectilinear::CopyInto(
vtkm::cont::make_ArrayHandle(input), output);
}
template<typename T, typename U>
@ -48,10 +48,9 @@ class DataSetBuilderRectilinear
void CopyInto(const vtkm::cont::ArrayHandle<T>& input,
vtkm::cont::ArrayHandle<U>& output )
{
output.Allocate( input.GetNumberOfValues() );
std::copy( ArrayPortalToIteratorBegin(input.GetPortalConstControl()),
ArrayPortalToIteratorEnd(input.GetPortalConstControl()),
ArrayPortalToIteratorBegin(output.GetPortalControl()) );
typedef vtkm::cont::DeviceAdapterAlgorithm<
vtkm::cont::DeviceAdapterTagSerial> Algorithm;
Algorithm::Copy(input, output);
}
template<typename T, typename U>
@ -60,9 +59,8 @@ class DataSetBuilderRectilinear
void CopyInto(const T* input, vtkm::Id len,
vtkm::cont::ArrayHandle<U>& output )
{
output.Allocate( len );
std::copy( input, input+len,
output.GetPortalControl().GetIteratorBegin() );
DataSetBuilderRectilinear::CopyInto(
vtkm::cont::make_ArrayHandle(input, len), output);
}
public:
VTKM_CONT_EXPORT

@ -27,8 +27,8 @@
#include <vector>
namespace vtkm{
namespace cuda{
namespace cont {
namespace cuda{
namespace {
struct compute_info

@ -70,7 +70,7 @@ public:
T Get(vtkm::Id index) const { return this->Portal.Get(index); }
VTKM_EXEC_EXPORT
void Set(vtkm::Id index, const T& t) const { return this->Portal.Set(index, t); }
void Set(vtkm::Id index, const T& t) const { this->Portal.Set(index, t); }
private:
PortalType Portal;

@ -23,6 +23,7 @@ set(headers
ExecutionPolicy.h
IteratorFromArrayPortal.h
WrappedOperators.h
ThrustPatches.h
)
#-----------------------------------------------------------------------------
@ -33,6 +34,9 @@ endif()
vtkm_declare_headers(CUDA ${headers} TESTABLE ${VTKm_ENABLE_CUDA})
set_source_files_properties(ThrustPatches.h
PROPERTIES VTKm_CANT_BE_HEADER_TESTED TRUE)
#-----------------------------------------------------------------------------
if (VTKm_ENABLE_CUDA)
add_subdirectory(testing)

@ -24,6 +24,8 @@
#include <vtkm/cont/ArrayPortalToIterators.h>
#include "iterator"
namespace vtkm {
namespace io {
namespace reader {
@ -43,15 +45,20 @@ inline vtkm::cont::ArrayHandle<T> ConcatinateArrayHandles(
vtkm::cont::ArrayHandle<T> out;
out.Allocate(size);
typename vtkm::cont::ArrayPortalToIterators<
typename vtkm::cont::ArrayHandle<T>::PortalControl>::IteratorType outp =
vtkm::cont::ArrayPortalToIteratorBegin(out.GetPortalControl());
typedef typename vtkm::cont::ArrayPortalToIterators<
typename vtkm::cont::ArrayHandle<T>::PortalControl>::IteratorType
IteratorType;
IteratorType outp =
vtkm::cont::ArrayPortalToIteratorBegin(out.GetPortalControl());
for (std::size_t i = 0; i < arrays.size(); ++i)
{
std::copy(vtkm::cont::ArrayPortalToIteratorBegin(arrays[i].GetPortalConstControl()),
vtkm::cont::ArrayPortalToIteratorEnd(arrays[i].GetPortalConstControl()),
outp);
outp += arrays[i].GetNumberOfValues();
typedef typename std::iterator_traits<IteratorType>::difference_type
DifferenceType;
std::advance(
outp, static_cast<DifferenceType>(arrays[i].GetNumberOfValues()));
}
return out;

@ -100,7 +100,7 @@ public:
}
#ifdef VTKM_CUDA
int id = vtkm::cuda::cont::FindFastestDeviceId();
int id = vtkm::cont::cuda::FindFastestDeviceId();
vtkm::opengl::cuda::SetCudaGLDevice(id);
#endif