Low-Level Abstraction of Memory Access
Copy.hpp File Reference
#include "View.hpp"
#include "mapping/AoSoA.hpp"
#include "mapping/SoA.hpp"
#include <cstring>
#include <numeric>
+ Include dependency graph for Copy.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  llama::Copy< SrcMapping, DstMapping, SFINAE >
 Generic implementation of copy defaulting to fieldWiseCopy. LLAMA provides several specializations of this construct for specific mappings. Users are encouraged to also specialize this template with better copy algorithms for further combinations of mappings, if they can and want to provide a better implementation. More...
 
struct  llama::Copy< Mapping, Mapping >
 
struct  llama::Copy< mapping::AoSoA< ArrayExtents, RecordDim, LanesSrc, AlignSrc, LinearizeArrayIndex, PermuteFields >, mapping::AoSoA< ArrayExtents, RecordDim, LanesDst, AlignDst, LinearizeArrayIndex, PermuteFields >, std::enable_if_t< LanesSrc !=LanesDst > >
 
struct  llama::Copy< mapping::AoSoA< ArrayExtents, RecordDim, LanesSrc, AlignSrc, LinearizeArrayIndex, PermuteFields >, mapping::SoA< ArrayExtents, RecordDim, DstBlobs, DstSubArrayAlignment, LinearizeArrayIndex, PermuteFields > >
 
struct  llama::Copy< mapping::SoA< ArrayExtents, RecordDim, SrcBlobs, SrcSubArrayAlignment, LinearizeArrayIndex, PermuteFields >, mapping::AoSoA< ArrayExtents, RecordDim, LanesDst, AlignDst, LinearizeArrayIndex, PermuteFields > >
 
struct  llama::Copy< mapping::SoA< ArrayExtents, RecordDim, SrcBlobs, SrcSubArrayAlignment, LinearizeArrayIndex, PermuteFields >, mapping::SoA< ArrayExtents, RecordDim, DstBlobs, DstSubArrayAlignment, LinearizeArrayIndex, PermuteFields >, std::enable_if_t< SrcBlobs !=DstBlobs||SrcSubArrayAlignment !=DstSubArrayAlignment > >
 

Namespaces

 llama
 
 llama::internal
 

Functions

template<typename RecordDim >
void llama::internal::assertTrivialCopyable ()
 
template<typename MemcpyFunc = decltype(memcpy)>
void llama::internal::parallelMemcpy (std::byte *dst, const std::byte *src, std::size_t size, std::size_t threadId=0, std::size_t threadCount=1, MemcpyFunc singleThreadMemcpy=memcpy)
 
template<typename Mapping , typename SrcBlob , typename DstBlob , typename MemcpyFunc = decltype(internal::memcpy)>
void llama::memcpyBlobs (const View< Mapping, SrcBlob > &srcView, View< Mapping, DstBlob > &dstView, std::size_t threadId=0, std::size_t threadCount=1, MemcpyFunc singleThreadMemcpy=internal::memcpy)
 
template<typename Mapping , typename SrcBlob , typename DstBlob , typename BlobCopyFunc = decltype(internal::copyBlobWithMemcpy)>
void llama::copyBlobs (const View< Mapping, SrcBlob > &srcView, View< Mapping, DstBlob > &dstView, BlobCopyFunc copyBlob=internal::copyBlobWithMemcpy)
 
template<typename SrcMapping , typename SrcBlob , typename DstMapping , typename DstBlob >
void llama::fieldWiseCopy (const View< SrcMapping, SrcBlob > &srcView, View< DstMapping, DstBlob > &dstView, std::size_t threadId=0, std::size_t threadCount=1)
 
template<typename SrcMapping , typename SrcBlob , typename DstMapping , typename DstBlob >
void llama::aosoaCommonBlockCopy (const View< SrcMapping, SrcBlob > &srcView, View< DstMapping, DstBlob > &dstView, std::size_t threadId=0, std::size_t threadCount=1)
 
template<typename SrcMapping , typename SrcBlob , typename DstMapping , typename DstBlob >
void llama::copy (const View< SrcMapping, SrcBlob > &srcView, View< DstMapping, DstBlob > &dstView, std::size_t threadId=0, std::size_t threadCount=1)
 

Variables

constexpr auto llama::internal::memcpy = [](void* dst, const void* src, std::size_t size) { std::memcpy(dst, src, size); }
 
constexpr auto llama::internal::copyBlobWithMemcpy
 
template<typename Mapping >
constexpr std::size_t llama::internal::aosoaLanes = 1