80 _index.template set<FIELD_TYPE>(fieldType);
83 std::size_t index = _index.template index<FIELD_TYPE>();
84 cudaMemcpyToSymbol(gpu::cuda::field_type_index<FieldTypeRegistry,FIELD_TYPE>, &index,
sizeof(std::size_t));
86 if (index >= _data->indexOnHost.size()) {
87 _data->indexOnHost.resize(2*index);
91 using ConcreteFieldType =
typename FIELD_TYPE::template type<T,DESCRIPTOR,Platform::GPU_CUDA>;
92 if constexpr (std::is_base_of_v<ColumnVectorBase, ConcreteFieldType>) {
93 using field_t =
typename ConcreteFieldType::field_t;
94 auto& fieldArray = *fieldType->template as<FIELD_TYPE>();
96 std::array<void*,DESCRIPTOR::template size<field_t>()> componentPointers;
97 for (
unsigned iD=0; iD < componentPointers.size(); ++iD) {
98 componentPointers[iD] = fieldArray[iD].deviceData();
101 auto componentPointersOnDevice = gpu::cuda::device::malloc<void*>(DESCRIPTOR::template size<field_t>());
103 componentPointersOnDevice,
104 componentPointers.size()*
sizeof(
void*));
106 _data->indexOnHost[index] = componentPointersOnDevice;
109 componentPointers.size(),
110 sizeof(
typename field_t::template value_type<T>)