OpenLB 1.7
Loading...
Searching...
No Matches
Public Member Functions | List of all members
olb::ConcreteCommunicatable< cpu::simd::CyclicColumn< T > > Class Template Referencefinal

#include <column.h>

+ Inheritance diagram for olb::ConcreteCommunicatable< cpu::simd::CyclicColumn< T > >:
+ Collaboration diagram for olb::ConcreteCommunicatable< cpu::simd::CyclicColumn< T > >:

Public Member Functions

 ConcreteCommunicatable (cpu::simd::CyclicColumn< T > &column)
 
std::size_t size (ConstSpan< CellID > indices) const
 Get serialized size for data at locations indices
 
std::size_t serialize (ConstSpan< CellID > indices, std::uint8_t *buffer) const
 Serialize data at locations indices to buffer
 
std::size_t deserialize (ConstSpan< CellID > indices, const std::uint8_t *buffer)
 Deserialize data at locations indices to buffer
 
- Public Member Functions inherited from olb::Communicatable
virtual ~Communicatable ()
 

Detailed Description

template<typename T>
class olb::ConcreteCommunicatable< cpu::simd::CyclicColumn< T > >

Definition at line 282 of file column.h.

Constructor & Destructor Documentation

◆ ConcreteCommunicatable()

template<typename T >
olb::ConcreteCommunicatable< cpu::simd::CyclicColumn< T > >::ConcreteCommunicatable ( cpu::simd::CyclicColumn< T > & column)
inline

Definition at line 287 of file column.h.

287 :
288 _column{column} { }

Member Function Documentation

◆ deserialize()

template<typename T >
std::size_t olb::ConcreteCommunicatable< cpu::simd::CyclicColumn< T > >::deserialize ( ConstSpan< CellID > indices,
const std::uint8_t * buffer )
inlinevirtual

Deserialize data at locations indices to buffer

Implements olb::Communicatable.

Definition at line 327 of file column.h.

329 {
330 if (meta::is_aligned<T>(buffer)) {
331 const T* source = reinterpret_cast<const T*>(buffer);
332 const typename cpu::simd::Pack<T>::index_t* offsets = indices.data();
333
334 for (std::size_t i=0;
335 i < (indices.size() / cpu::simd::Pack<T>::size) * cpu::simd::Pack<T>::size;
336 i += cpu::simd::Pack<T>::size,
337 source += cpu::simd::Pack<T>::size,
338 offsets += cpu::simd::Pack<T>::size) {
339 cpu::simd::store(&_column[0], cpu::simd::Pack<T>{source}, offsets);
340 }
341 for (std::size_t i=(indices.size() / cpu::simd::Pack<T>::size) * cpu::simd::Pack<T>::size;
342 i < indices.size();
343 ++i) {
344 _column[indices[i]] = *(source++);
345 }
346 } else {
347 const std::uint8_t* source = buffer;
348 for (CellID index : indices) {
349 std::memcpy(reinterpret_cast<void*>(&_column[index]), source, sizeof(T));
350 source += sizeof(T);
351 }
352 }
353 return indices.size() * sizeof(T);
354 }
void store(T *target, Pack< T > value)
std::uint32_t CellID
Type for sequential block-local cell indices.

References olb::ConstSpan< T >::data(), olb::ConstSpan< T >::size(), and olb::cpu::simd::store().

+ Here is the call graph for this function:

◆ serialize()

template<typename T >
std::size_t olb::ConcreteCommunicatable< cpu::simd::CyclicColumn< T > >::serialize ( ConstSpan< CellID > indices,
std::uint8_t * buffer ) const
inlinevirtual

Serialize data at locations indices to buffer

Implements olb::Communicatable.

Definition at line 297 of file column.h.

299 {
300 if (meta::is_aligned<T>(buffer)) {
301 T* target = reinterpret_cast<T*>(buffer);
302 const typename cpu::simd::Pack<T>::index_t* offsets = indices.data();
303
304 for (std::size_t i=0;
305 i < (indices.size() / cpu::simd::Pack<T>::size) * cpu::simd::Pack<T>::size;
306 i += cpu::simd::Pack<T>::size,
307 target += cpu::simd::Pack<T>::size,
308 offsets += cpu::simd::Pack<T>::size) {
309 cpu::simd::store(target, {&_column[0], offsets});
310 }
311 for (std::size_t i=(indices.size() / cpu::simd::Pack<T>::size) * cpu::simd::Pack<T>::size;
312 i < indices.size();
313 ++i) {
314 *(target++) = _column[indices[i]];
315 }
316 } else {
317 std::uint8_t* target = buffer;
318 for (CellID index : indices) {
319 std::memcpy(target, reinterpret_cast<const void*>(&_column[index]), sizeof(T));
320 target += sizeof(T);
321 }
322 }
323 return indices.size() * sizeof(T);
324 }

References olb::ConstSpan< T >::data(), olb::ConstSpan< T >::size(), and olb::cpu::simd::store().

+ Here is the call graph for this function:

◆ size()

template<typename T >
std::size_t olb::ConcreteCommunicatable< cpu::simd::CyclicColumn< T > >::size ( ConstSpan< CellID > indices) const
inlinevirtual

Get serialized size for data at locations indices

Implements olb::Communicatable.

Definition at line 291 of file column.h.

292 {
293 return indices.size() * sizeof(T);
294 }

References olb::ConstSpan< T >::size().

+ Here is the call graph for this function:

The documentation for this class was generated from the following file: