2#ifndef TTG_PARSEC_DEVICESCRATCH_H
3#define TTG_PARSEC_DEVICESCRATCH_H
6#define TTG_PARSEC_MAX_NUM_DEVICES 4
10#include <parsec/data_internal.h>
11#include <parsec/mca/device/device.h>
12#include <parsec/mca/device/device_gpu.h>
34 static_assert(std::is_trivially_copyable_v<element_type>,
35 "Only trivially copyable types are supported for devices.");
36 static_assert(std::is_default_constructible_v<element_type>,
37 "Only default constructible types are supported for devices.");
41 parsec_data_t* m_data =
nullptr;
44 static parsec_data_t* create_parsec_data(
void *
ptr,
size_t count) {
46 parsec_data_t *data = parsec_data_create_with_type(
nullptr, 0,
ptr,
48 parsec_datatype_int8_t);
49 data->device_copies[0]->flags |= PARSEC_DATA_FLAG_PARSEC_MANAGED;
50 data->device_copies[0]->coherency_state = PARSEC_DATA_COHERENCY_SHARED;
62 : m_data(create_parsec_data(
ptr, count))
67 m_data->device_copies[0]->version = 1;
85 if (
nullptr != m_data) {
86 parsec_data_discard(m_data);
94 return static_cast<element_type*
>(m_data->device_copies[m_data->owner_device]->device_private);
100 return static_cast<element_type*
>(m_data->device_copies[m_data->owner_device]->device_private);
122 return const_cast<parsec_data_t*
>(scratch.m_data);
parsec_data_t * get_parsec_data(const ttg_parsec::Buffer< T, A > &db)
this contains PaRSEC-based TTG functionality
std::decay_t< T > element_type
devicescratch & operator=(devicescratch &&)=delete
const element_type * device_ptr() const
element_type * device_ptr()
devicescratch(devicescratch &&)=delete
devicescratch(const devicescratch &db)=delete
devicescratch(element_type *ptr, ttg::scope scope=ttg::scope::SyncIn, std::size_t count=1)
devicescratch & operator=(const devicescratch &db)=delete