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
#include <vtkm/worklet/Keys.h>
#define VTK_M_RM_PAREN(T) vtkm::cont::detail::GetTypeInParentheses<void T>::type
#define VTK_M_KEYS_EXPORT_TYPE(T) \
template class VTKM_WORKLET_EXPORT vtkm::worklet::Keys<VTK_M_RM_PAREN(T)>; \
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::cont::DeviceAdapterId device); \
template VTKM_WORKLET_EXPORT VTKM_CONT void vtkm::worklet::Keys<VTK_M_RM_PAREN(T)>::BuildArrays( \
const vtkm::cont::ArrayHandleVirtual<VTK_M_RM_PAREN(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::cont::DeviceAdapterId device)
#define VTK_M_KEYS_EXPORT(T) \
VTK_M_KEYS_EXPORT_TYPE((T)); \
VTK_M_KEYS_EXPORT_TYPE((vtkm::Vec<T, 2>)); \
VTK_M_KEYS_EXPORT_TYPE((vtkm::Vec<T, 3>)); \
VTK_M_KEYS_EXPORT_TYPE((vtkm::Vec<T, 4>))
template class VTKM_WORKLET_EXPORT vtkm::worklet::Keys<T>; \
template VTKM_WORKLET_EXPORT VTKM_CONT void vtkm::worklet::Keys<T>::BuildArrays( \
const vtkm::cont::ArrayHandle<T>& keys, \
vtkm::worklet::KeysSortType sort, \
vtkm::cont::DeviceAdapterId device); \
template VTKM_WORKLET_EXPORT VTKM_CONT void vtkm::worklet::Keys<T>::BuildArrays( \
const vtkm::cont::ArrayHandleVirtual<T>& keys, \
vtkm::worklet::KeysSortType sort, \
vtkm::cont::DeviceAdapterId device)
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);
VTK_M_KEYS_EXPORT(vtkm::HashType);
VTK_M_KEYS_EXPORT(vtkm::Id);
VTK_M_KEYS_EXPORT(vtkm::Id3);
#ifdef VTKM_USE_64BIT_IDS
VTK_M_KEYS_EXPORT(vtkm::IdComponent);
#endif
#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/Logging.h>
#include <vtkm/Hash.h>
#include <vtkm/exec/internal/ReduceByKeyLookup.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
#define VTK_M_RM_PAREN(T) vtkm::cont::detail::GetTypeInParentheses<void T>::type
#define VTK_M_KEYS_EXPORT_TYPE(T) \
extern template class VTKM_WORKLET_TEMPLATE_EXPORT vtkm::worklet::Keys<VTK_M_RM_PAREN(T)>; \
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::cont::DeviceAdapterId device); \
extern template VTKM_WORKLET_TEMPLATE_EXPORT VTKM_CONT void vtkm::worklet::Keys<VTK_M_RM_PAREN( \
T)>::BuildArrays(const vtkm::cont::ArrayHandleVirtual<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::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::cont::DeviceAdapterId device)
#define VTK_M_KEYS_EXPORT(T) \
VTK_M_KEYS_EXPORT_TYPE((T)); \
VTK_M_KEYS_EXPORT_TYPE((vtkm::Vec<T, 2>)); \
VTK_M_KEYS_EXPORT_TYPE((vtkm::Vec<T, 3>)); \
VTK_M_KEYS_EXPORT_TYPE((vtkm::Vec<T, 4>))
extern template class VTKM_WORKLET_TEMPLATE_EXPORT vtkm::worklet::Keys<T>; \
extern template VTKM_WORKLET_TEMPLATE_EXPORT VTKM_CONT void vtkm::worklet::Keys<T>::BuildArrays( \
const vtkm::cont::ArrayHandle<T>& keys, \
vtkm::worklet::KeysSortType sort, \
vtkm::cont::DeviceAdapterId device); \
extern template VTKM_WORKLET_TEMPLATE_EXPORT VTKM_CONT void vtkm::worklet::Keys<T>::BuildArrays( \
const vtkm::cont::ArrayHandleVirtual<T>& keys, \
vtkm::worklet::KeysSortType sort, \
vtkm::cont::DeviceAdapterId device)
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);
VTK_M_KEYS_EXPORT(vtkm::HashType);
VTK_M_KEYS_EXPORT(vtkm::Id);
VTK_M_KEYS_EXPORT(vtkm::Id3);
#ifdef VTKM_USE_64BIT_IDS
VTK_M_KEYS_EXPORT(vtkm::IdComponent);
#endif
#undef VTK_M_KEYS_EXPORT
#undef VTK_M_KEYS_EXPORT_TYPE
#undef VTK_M_RM_PAREN
#endif // !vtk_m_worklet_Keys_cxx