device_tensor.hpp 877 Bytes
Newer Older
Chao Liu's avatar
Chao Liu committed
1
#pragma once
Chao Liu's avatar
Chao Liu committed
2
#include "host_tensor.hpp"
Chao Liu's avatar
Chao Liu committed
3
4
5
#include "common_header.hpp"
#include "tensor_descriptor.hpp"

Chao Liu's avatar
Chao Liu committed
6
7
template <typename TensorDesc, std::size_t... Is>
auto make_HostTensorDescriptor_impl(TensorDesc, std::integer_sequence<std::size_t, Is...>)
Chao Liu's avatar
Chao Liu committed
8
{
Chao Liu's avatar
Chao Liu committed
9
10
    std::initializer_list<std::size_t> lengths = {TensorDesc::GetLengths()[Is]...};
    std::initializer_list<std::size_t> strides = {TensorDesc::GetStrides()[Is]...};
Chao Liu's avatar
Chao Liu committed
11

Chao Liu's avatar
Chao Liu committed
12
    return HostTensorDescriptor(lengths, strides);
Chao Liu's avatar
Chao Liu committed
13
14
}

Chao Liu's avatar
Chao Liu committed
15
16
template <typename TensorDesc>
auto make_HostTensorDescriptor(TensorDesc)
Chao Liu's avatar
Chao Liu committed
17
{
Chao Liu's avatar
Chao Liu committed
18
19
    return make_HostTensorDescriptor_impl(
        TensorDesc{}, std::make_integer_sequence<std::size_t, TensorDesc::GetNumOfDimension()>{});
Chao Liu's avatar
Chao Liu committed
20
21
}

Chao Liu's avatar
Chao Liu committed
22
23
template <typename TensorDesc>
void ostream_tensor_descriptor(TensorDesc, std::ostream& os = std::cout)
Chao Liu's avatar
Chao Liu committed
24
{
Chao Liu's avatar
Chao Liu committed
25
    ostream_HostTensorDescriptor(make_HostTensorDescriptor(TensorDesc{}), os);
Chao Liu's avatar
Chao Liu committed
26
}