Reduce the number of precompiled Keys instantiations

Previously, we precompiled just about any version of Keys that you could
be expected to use. This caused the time to compile Keys to be
unnecessarily long.

This reduces the compilation to types that are actually likely to be
used as keys. Also removed the less likely to be used build methods.
This commit is contained in:
Kenneth Moreland 2019-01-28 14:59:50 -05:00
parent 6ea55f838b
commit fb0ad1a13d
2 changed files with 32 additions and 76 deletions

@ -21,45 +21,22 @@
#define vtk_m_worklet_Keys_cxx #define vtk_m_worklet_Keys_cxx
#include <vtkm/worklet/Keys.h> #include <vtkm/worklet/Keys.h>
#define VTK_M_RM_PAREN(T) vtkm::cont::detail::GetTypeInParentheses<void T>::type #define VTK_M_KEYS_EXPORT(T) \
template class VTKM_WORKLET_EXPORT vtkm::worklet::Keys<T>; \
#define VTK_M_KEYS_EXPORT_TYPE(T) \ template VTKM_WORKLET_EXPORT VTKM_CONT void vtkm::worklet::Keys<T>::BuildArrays( \
template class VTKM_WORKLET_EXPORT vtkm::worklet::Keys<VTK_M_RM_PAREN(T)>; \ const vtkm::cont::ArrayHandle<T>& keys, \
template VTKM_WORKLET_EXPORT VTKM_CONT void vtkm::worklet::Keys<VTK_M_RM_PAREN(T)>::BuildArrays( \
const vtkm::cont::ArrayHandle<VTK_M_RM_PAREN(T)>& keys, \
vtkm::worklet::KeysSortType sort, \ vtkm::worklet::KeysSortType sort, \
vtkm::cont::DeviceAdapterId device); \ vtkm::cont::DeviceAdapterId device); \
template VTKM_WORKLET_EXPORT VTKM_CONT void vtkm::worklet::Keys<VTK_M_RM_PAREN(T)>::BuildArrays( \ template VTKM_WORKLET_EXPORT VTKM_CONT void vtkm::worklet::Keys<T>::BuildArrays( \
const vtkm::cont::ArrayHandleVirtual<VTK_M_RM_PAREN(T)>& keys, \ const vtkm::cont::ArrayHandleVirtual<T>& keys, \
vtkm::worklet::KeysSortType sort, \
vtkm::cont::DeviceAdapterId device); \
template VTKM_WORKLET_EXPORT VTKM_CONT void vtkm::worklet::Keys<VTK_M_RM_PAREN( \
T)>::BuildArraysInPlace(vtkm::cont::ArrayHandle<VTK_M_RM_PAREN(T)>& keys, \
vtkm::worklet::KeysSortType sort, \
vtkm::cont::DeviceAdapterId device); \
extern template VTKM_WORKLET_EXPORT VTKM_CONT void vtkm::worklet::Keys<VTK_M_RM_PAREN( \
T)>::BuildArraysInPlace(vtkm::cont::ArrayHandleVirtual<VTK_M_RM_PAREN(T)>& keys, \
vtkm::worklet::KeysSortType sort, \ vtkm::worklet::KeysSortType sort, \
vtkm::cont::DeviceAdapterId device) vtkm::cont::DeviceAdapterId device)
#define VTK_M_KEYS_EXPORT(T) \ VTK_M_KEYS_EXPORT(vtkm::HashType);
VTK_M_KEYS_EXPORT_TYPE((T)); \ VTK_M_KEYS_EXPORT(vtkm::Id);
VTK_M_KEYS_EXPORT_TYPE((vtkm::Vec<T, 2>)); \ VTK_M_KEYS_EXPORT(vtkm::Id3);
VTK_M_KEYS_EXPORT_TYPE((vtkm::Vec<T, 3>)); \ #ifdef VTKM_USE_64BIT_IDS
VTK_M_KEYS_EXPORT_TYPE((vtkm::Vec<T, 4>)) VTK_M_KEYS_EXPORT(vtkm::IdComponent);
#endif
VTK_M_KEYS_EXPORT(char);
VTK_M_KEYS_EXPORT(vtkm::Int8);
VTK_M_KEYS_EXPORT(vtkm::UInt8);
VTK_M_KEYS_EXPORT(vtkm::Int16);
VTK_M_KEYS_EXPORT(vtkm::UInt16);
VTK_M_KEYS_EXPORT(vtkm::Int32);
VTK_M_KEYS_EXPORT(vtkm::UInt32);
VTK_M_KEYS_EXPORT(vtkm::Int64);
VTK_M_KEYS_EXPORT(vtkm::UInt64);
VTK_M_KEYS_EXPORT(vtkm::Float32);
VTK_M_KEYS_EXPORT(vtkm::Float64);
#undef VTK_M_KEYS_EXPORT #undef VTK_M_KEYS_EXPORT
#undef VTK_M_KEYS_EXPORT_TYPE
#undef VTK_M_RM_PAREN

@ -30,6 +30,8 @@
#include <vtkm/cont/ArrayHandleVirtual.h> #include <vtkm/cont/ArrayHandleVirtual.h>
#include <vtkm/cont/Logging.h> #include <vtkm/cont/Logging.h>
#include <vtkm/Hash.h>
#include <vtkm/exec/internal/ReduceByKeyLookup.h> #include <vtkm/exec/internal/ReduceByKeyLookup.h>
#include <vtkm/cont/arg/TransportTagKeyedValuesIn.h> #include <vtkm/cont/arg/TransportTagKeyedValuesIn.h>
@ -430,48 +432,25 @@ struct Transport<vtkm::cont::arg::TransportTagKeyedValuesOut, ArrayHandleType, D
#ifndef vtk_m_worklet_Keys_cxx #ifndef vtk_m_worklet_Keys_cxx
#define VTK_M_RM_PAREN(T) vtkm::cont::detail::GetTypeInParentheses<void T>::type #define VTK_M_KEYS_EXPORT(T) \
extern template class VTKM_WORKLET_TEMPLATE_EXPORT vtkm::worklet::Keys<T>; \
#define VTK_M_KEYS_EXPORT_TYPE(T) \ extern template VTKM_WORKLET_TEMPLATE_EXPORT VTKM_CONT void vtkm::worklet::Keys<T>::BuildArrays( \
extern template class VTKM_WORKLET_TEMPLATE_EXPORT vtkm::worklet::Keys<VTK_M_RM_PAREN(T)>; \ const vtkm::cont::ArrayHandle<T>& keys, \
extern template VTKM_WORKLET_TEMPLATE_EXPORT VTKM_CONT void vtkm::worklet::Keys<VTK_M_RM_PAREN( \
T)>::BuildArrays(const vtkm::cont::ArrayHandle<VTK_M_RM_PAREN(T)>& keys, \
vtkm::worklet::KeysSortType sort, \ vtkm::worklet::KeysSortType sort, \
vtkm::cont::DeviceAdapterId device); \ vtkm::cont::DeviceAdapterId device); \
extern template VTKM_WORKLET_TEMPLATE_EXPORT VTKM_CONT void vtkm::worklet::Keys<VTK_M_RM_PAREN( \ extern template VTKM_WORKLET_TEMPLATE_EXPORT VTKM_CONT void vtkm::worklet::Keys<T>::BuildArrays( \
T)>::BuildArrays(const vtkm::cont::ArrayHandleVirtual<VTK_M_RM_PAREN(T)>& keys, \ const vtkm::cont::ArrayHandleVirtual<T>& keys, \
vtkm::worklet::KeysSortType sort, \
vtkm::cont::DeviceAdapterId device); \
extern template VTKM_WORKLET_TEMPLATE_EXPORT VTKM_CONT void vtkm::worklet::Keys<VTK_M_RM_PAREN( \
T)>::BuildArraysInPlace(vtkm::cont::ArrayHandle<VTK_M_RM_PAREN(T)>& keys, \
vtkm::worklet::KeysSortType sort, \
vtkm::cont::DeviceAdapterId device); \
extern template VTKM_WORKLET_TEMPLATE_EXPORT VTKM_CONT void vtkm::worklet::Keys<VTK_M_RM_PAREN( \
T)>::BuildArraysInPlace(vtkm::cont::ArrayHandleVirtual<VTK_M_RM_PAREN(T)>& keys, \
vtkm::worklet::KeysSortType sort, \ vtkm::worklet::KeysSortType sort, \
vtkm::cont::DeviceAdapterId device) vtkm::cont::DeviceAdapterId device)
#define VTK_M_KEYS_EXPORT(T) \ VTK_M_KEYS_EXPORT(vtkm::HashType);
VTK_M_KEYS_EXPORT_TYPE((T)); \ VTK_M_KEYS_EXPORT(vtkm::Id);
VTK_M_KEYS_EXPORT_TYPE((vtkm::Vec<T, 2>)); \ VTK_M_KEYS_EXPORT(vtkm::Id3);
VTK_M_KEYS_EXPORT_TYPE((vtkm::Vec<T, 3>)); \ #ifdef VTKM_USE_64BIT_IDS
VTK_M_KEYS_EXPORT_TYPE((vtkm::Vec<T, 4>)) VTK_M_KEYS_EXPORT(vtkm::IdComponent);
#endif
VTK_M_KEYS_EXPORT(char);
VTK_M_KEYS_EXPORT(vtkm::Int8);
VTK_M_KEYS_EXPORT(vtkm::UInt8);
VTK_M_KEYS_EXPORT(vtkm::Int16);
VTK_M_KEYS_EXPORT(vtkm::UInt16);
VTK_M_KEYS_EXPORT(vtkm::Int32);
VTK_M_KEYS_EXPORT(vtkm::UInt32);
VTK_M_KEYS_EXPORT(vtkm::Int64);
VTK_M_KEYS_EXPORT(vtkm::UInt64);
VTK_M_KEYS_EXPORT(vtkm::Float32);
VTK_M_KEYS_EXPORT(vtkm::Float64);
#undef VTK_M_KEYS_EXPORT #undef VTK_M_KEYS_EXPORT
#undef VTK_M_KEYS_EXPORT_TYPE
#undef VTK_M_RM_PAREN
#endif // !vtk_m_worklet_Keys_cxx #endif // !vtk_m_worklet_Keys_cxx