mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-16 17:22:55 +00:00
Merge branch 'master' into feature/atomics
This commit is contained in:
commit
e8b08f2e00
@ -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
|
||||
|
23
vtkm/Types.h
23
vtkm/Types.h
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user