Skip to content

Commit 86f9d66

Browse files
authored
dev-0.8.0 (#85)
* more examples * flat_tensor::ranked * raw_tensor::typed<R, r> * rename as_ranked -> ranked * rename raw_shape -> flat_shape * [[gnu::unused]] * more detailed exception * invalid_type_reification * make make_shape constexpr * flatten * batch and vectorize * raw_tensor::{rank,size,dims} * new header <ttl/flat_shape> * ref,view for basic_raw_tensor * <ttl/type> * move type_encoder to ttl/ * std_except.hpp * fix cuda raw tensor (#86)
1 parent a0e9722 commit 86f9d66

35 files changed

+588
-190
lines changed

cmake/examples.cmake

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,10 @@ IF(USE_OPENCV)
1717
ADD_CPP_EXAMPLE(example-opencv examples/example_opencv.cpp)
1818
TARGET_LINK_LIBRARIES(example-opencv opencv_imgcodecs)
1919
ENDIF()
20+
21+
FILE(GLOB examples examples/simple/*.cpp)
22+
FOREACH(src ${examples})
23+
GET_FILENAME_COMPONENT(name ${src} NAME_WE)
24+
STRING(REPLACE "_" "-" name ${name})
25+
ADD_EXECUTABLE(${name} ${src})
26+
ENDFOREACH()

examples/simple/example_range.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#include <iostream>
2+
#include <ttl/range>
3+
4+
int main()
5+
{
6+
for (auto i : ttl::range(10)) { std::cout << i << std::endl; }
7+
return 0;
8+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#include <ttl/experimental/flat_tensor>
2+
#include <ttl/experimental/raw_tensor>
3+
4+
void f(const ttl::experimental::flat_tensor_view<int> &t) {}
5+
6+
void f(const ttl::experimental::flat_tensor_view<float> &t) {}
7+
8+
void f(const ttl::experimental::raw_tensor_view &t)
9+
{
10+
using T = std::remove_reference<decltype(t)>::type;
11+
switch (t.value_type()) {
12+
case T::type<int>():
13+
f(t.typed<int>());
14+
break;
15+
case T::type<float>():
16+
f(t.typed<float>());
17+
break;
18+
}
19+
}
20+
21+
int main()
22+
{
23+
using ttl::experimental::raw_tensor;
24+
raw_tensor x(raw_tensor::type<int>(), 2, 3);
25+
raw_tensor y(raw_tensor::type<float>(), 2, 3);
26+
f(ttl::experimental::raw_tensor_view(x));
27+
f(ttl::experimental::raw_tensor_view(y));
28+
// f(ttl::view(x));
29+
// f(ttl::view(y));
30+
return 0;
31+
}

examples/simple/example_tensor.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include <iostream>
2+
#include <ttl/range>
3+
#include <ttl/tensor>
4+
5+
void transpose(const ttl::tensor_view<int, 2> &x,
6+
const ttl::tensor_ref<int, 2> &y)
7+
{
8+
for (auto i : ttl::range<0>(x)) {
9+
for (auto j : ttl::range<1>(x)) { y[j][i] = x[i][j]; }
10+
}
11+
}
12+
13+
int main()
14+
{
15+
ttl::tensor<int, 2> m(2, 3);
16+
int idx = 0;
17+
for (const auto &row : m) {
18+
for (int &x : row) { x = idx++; }
19+
}
20+
ttl::tensor<int, 2> n(3, 2);
21+
transpose(ttl::view(m), ttl::ref(n));
22+
for (const auto &row : n) {
23+
for (int x : row) { std::cout << x << " "; }
24+
std::cout << std::endl;
25+
}
26+
return 0;
27+
}

include/experimental/type_encoder

Lines changed: 0 additions & 3 deletions
This file was deleted.

include/ttl/bits/raw_shape.hpp renamed to include/ttl/bits/flat_shape.hpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ std::vector<D_out> arr2vec(const std::array<D_in, r> &a)
2020
}
2121

2222
template <typename Dim = uint32_t>
23-
class basic_raw_shape
23+
class basic_flat_shape
2424
{
2525
using dim_t = Dim;
2626
const std::vector<dim_t> dims_;
@@ -29,15 +29,15 @@ class basic_raw_shape
2929
using dimension_type = Dim;
3030

3131
template <typename... D>
32-
explicit basic_raw_shape(D... d) : dims_({static_cast<dim_t>(d)...})
32+
explicit basic_flat_shape(D... d) : dims_({static_cast<dim_t>(d)...})
3333
{
3434
static_assert(sizeof...(D) <= 0xff, "too many dimensions");
3535
}
3636

37-
explicit basic_raw_shape(const std::vector<dim_t> &dims) : dims_(dims) {}
37+
explicit basic_flat_shape(const std::vector<dim_t> &dims) : dims_(dims) {}
3838

3939
template <rank_t r, typename D>
40-
explicit basic_raw_shape(const basic_shape<r, D> &shape)
40+
explicit basic_flat_shape(const basic_shape<r, D> &shape)
4141
: dims_(std::move(arr2vec<Dim, D, r>(shape.dims())))
4242
{
4343
}
@@ -47,7 +47,7 @@ class basic_raw_shape
4747
dim_t size() const { return product<dim_t>(dims_.begin(), dims_.end()); }
4848

4949
template <rank_t r>
50-
basic_shape<r, dim_t> as_ranked() const
50+
basic_shape<r, dim_t> ranked() const
5151
{
5252
// TODO: use contracts of c++20
5353
if (r != rank()) { throw std::invalid_argument("invalid rank"); }
@@ -57,6 +57,13 @@ class basic_raw_shape
5757
}
5858

5959
const std::vector<dim_t> &dims() const { return dims_; }
60+
61+
bool operator==(const basic_flat_shape &s) const
62+
{
63+
return std::equal(dims_.begin(), dims_.end(), s.dims().begin());
64+
}
65+
66+
bool operator!=(const basic_flat_shape &s) const { return !operator==(s); }
6067
};
6168
} // namespace internal
6269
} // namespace ttl

include/ttl/bits/flat_tensor.hpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
2+
#include <ttl/bits/flat_shape.hpp>
23
#include <ttl/bits/flat_tensor_mixin.hpp>
3-
#include <ttl/bits/raw_shape.hpp>
44
#include <ttl/bits/std_tensor.hpp>
55
#include <ttl/bits/std_tensor_fwd.hpp>
66

@@ -9,10 +9,10 @@ namespace ttl
99
namespace internal
1010
{
1111
template <typename R, typename Dim, typename D>
12-
class basic_tensor<R, basic_raw_shape<Dim>, D, owner>
13-
: public flat_tensor_mixin<R, basic_raw_shape<Dim>, D, owner>
12+
class basic_tensor<R, basic_flat_shape<Dim>, D, owner>
13+
: public flat_tensor_mixin<R, basic_flat_shape<Dim>, D, owner>
1414
{
15-
using S = basic_raw_shape<Dim>;
15+
using S = basic_flat_shape<Dim>;
1616
using mixin = flat_tensor_mixin<R, S, D, owner>;
1717

1818
public:
@@ -28,10 +28,10 @@ class basic_tensor<R, basic_raw_shape<Dim>, D, owner>
2828
};
2929

3030
template <typename R, typename Dim, typename D>
31-
class basic_tensor<R, basic_raw_shape<Dim>, D, readwrite>
32-
: public flat_tensor_mixin<R, basic_raw_shape<Dim>, D, readwrite>
31+
class basic_tensor<R, basic_flat_shape<Dim>, D, readwrite>
32+
: public flat_tensor_mixin<R, basic_flat_shape<Dim>, D, readwrite>
3333
{
34-
using S = basic_raw_shape<Dim>;
34+
using S = basic_flat_shape<Dim>;
3535
using mixin = flat_tensor_mixin<R, S, D, readwrite>;
3636

3737
public:
@@ -53,10 +53,10 @@ class basic_tensor<R, basic_raw_shape<Dim>, D, readwrite>
5353
};
5454

5555
template <typename R, typename Dim, typename D>
56-
class basic_tensor<R, basic_raw_shape<Dim>, D, readonly>
57-
: public flat_tensor_mixin<R, basic_raw_shape<Dim>, D, readonly>
56+
class basic_tensor<R, basic_flat_shape<Dim>, D, readonly>
57+
: public flat_tensor_mixin<R, basic_flat_shape<Dim>, D, readonly>
5858
{
59-
using S = basic_raw_shape<Dim>;
59+
using S = basic_flat_shape<Dim>;
6060
using mixin = flat_tensor_mixin<R, S, D, readonly>;
6161

6262
public:
@@ -83,12 +83,12 @@ class basic_tensor<R, basic_raw_shape<Dim>, D, readonly>
8383
};
8484

8585
template <typename R, typename D>
86-
using basic_flat_tensor = basic_tensor<R, basic_raw_shape<>, D, owner>;
86+
using basic_flat_tensor = basic_tensor<R, basic_flat_shape<>, D, owner>;
8787

8888
template <typename R, typename D>
89-
using basic_flat_tensor_ref = basic_tensor<R, basic_raw_shape<>, D, readwrite>;
89+
using basic_flat_tensor_ref = basic_tensor<R, basic_flat_shape<>, D, readwrite>;
9090

9191
template <typename R, typename D>
92-
using basic_flat_tensor_view = basic_tensor<R, basic_raw_shape<>, D, readonly>;
92+
using basic_flat_tensor_view = basic_tensor<R, basic_flat_shape<>, D, readonly>;
9393
} // namespace internal
9494
} // namespace ttl

include/ttl/bits/flat_tensor_mixin.hpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#pragma once
2-
#include <ttl/bits/raw_shape.hpp>
2+
#include <ttl/bits/flat_shape.hpp>
33
#include <ttl/bits/std_shape.hpp>
44
#include <ttl/bits/std_tensor_fwd.hpp>
55
#include <ttl/bits/std_tensor_traits.hpp>
@@ -28,7 +28,7 @@ class flat_tensor_mixin
2828
using T = basic_tensor<R, basic_shape<r, Dim>, D, A1>;
2929

3030
template <rank_t r, typename A1>
31-
T<r, A1> ranked_as() const
31+
[[deprecated]] T<r, A1> ranked_as() const
3232
{
3333
return T<r, A1>(data_.get(), shape_.template as_ranked<r>());
3434
}
@@ -61,13 +61,21 @@ class flat_tensor_mixin
6161
data_ptr data_end() const { return data_.get() + shape_.size(); }
6262

6363
template <rank_t r>
64-
T<r, readwrite> ref_as() const
64+
auto ranked() const
65+
{
66+
using Access = typename basic_access_traits<A>::type;
67+
using T = basic_tensor<R, basic_shape<r, Dim>, D, Access>;
68+
return T(data(), shape_.template ranked<r>());
69+
}
70+
71+
template <rank_t r>
72+
[[deprecated]] T<r, readwrite> ref_as() const
6573
{
6674
return ranked_as<r, readwrite>();
6775
}
6876

6977
template <rank_t r>
70-
T<r, readonly> view_as() const
78+
[[deprecated]] T<r, readonly> view_as() const
7179
{
7280
return ranked_as<r, readonly>();
7381
}

include/ttl/bits/raw_tensor.hpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
2+
#include <ttl/bits/flat_shape.hpp>
23
#include <ttl/bits/flat_tensor.hpp>
3-
#include <ttl/bits/raw_shape.hpp>
44
#include <ttl/bits/raw_tensor_mixin.hpp>
55
#include <ttl/bits/std_tensor_fwd.hpp>
66

@@ -9,11 +9,11 @@ namespace ttl
99
namespace internal
1010
{
1111
template <typename Encoder, typename Dim, typename D>
12-
class basic_raw_tensor<Encoder, basic_raw_shape<Dim>, D, owner>
13-
: public raw_tensor_mixin<Encoder, basic_raw_shape<Dim>, D, owner>
12+
class basic_raw_tensor<Encoder, basic_flat_shape<Dim>, D, owner>
13+
: public raw_tensor_mixin<Encoder, basic_flat_shape<Dim>, D, owner>
1414
{
1515
using value_type_t = typename Encoder::value_type;
16-
using S = basic_raw_shape<Dim>;
16+
using S = basic_flat_shape<Dim>;
1717
using mixin = raw_tensor_mixin<Encoder, S, D, owner>;
1818
using allocator = basic_allocator<char, D>;
1919

@@ -32,11 +32,11 @@ class basic_raw_tensor<Encoder, basic_raw_shape<Dim>, D, owner>
3232
};
3333

3434
template <typename Encoder, typename Dim, typename D>
35-
class basic_raw_tensor<Encoder, basic_raw_shape<Dim>, D, readwrite>
36-
: public raw_tensor_mixin<Encoder, basic_raw_shape<Dim>, D, readwrite>
35+
class basic_raw_tensor<Encoder, basic_flat_shape<Dim>, D, readwrite>
36+
: public raw_tensor_mixin<Encoder, basic_flat_shape<Dim>, D, readwrite>
3737
{
3838
using value_type_t = typename Encoder::value_type;
39-
using S = basic_raw_shape<Dim>;
39+
using S = basic_flat_shape<Dim>;
4040
using mixin = raw_tensor_mixin<Encoder, S, D, readwrite>;
4141

4242
public:
@@ -66,11 +66,11 @@ class basic_raw_tensor<Encoder, basic_raw_shape<Dim>, D, readwrite>
6666
};
6767

6868
template <typename Encoder, typename Dim, typename D>
69-
class basic_raw_tensor<Encoder, basic_raw_shape<Dim>, D, readonly>
70-
: public raw_tensor_mixin<Encoder, basic_raw_shape<Dim>, D, readonly>
69+
class basic_raw_tensor<Encoder, basic_flat_shape<Dim>, D, readonly>
70+
: public raw_tensor_mixin<Encoder, basic_flat_shape<Dim>, D, readonly>
7171
{
7272
using value_type_t = typename Encoder::value_type;
73-
using S = basic_raw_shape<Dim>;
73+
using S = basic_flat_shape<Dim>;
7474
using mixin = raw_tensor_mixin<Encoder, S, D, readonly>;
7575

7676
public:
@@ -106,12 +106,12 @@ class basic_raw_tensor<Encoder, basic_raw_shape<Dim>, D, readonly>
106106
};
107107

108108
template <typename E, typename D>
109-
using raw_tensor = basic_raw_tensor<E, basic_raw_shape<>, D, owner>;
109+
using raw_tensor = basic_raw_tensor<E, basic_flat_shape<>, D, owner>;
110110

111111
template <typename E, typename D>
112-
using raw_tensor_ref = basic_raw_tensor<E, basic_raw_shape<>, D, readwrite>;
112+
using raw_tensor_ref = basic_raw_tensor<E, basic_flat_shape<>, D, readwrite>;
113113

114114
template <typename E, typename D>
115-
using raw_tensor_view = basic_raw_tensor<E, basic_raw_shape<>, D, readonly>;
115+
using raw_tensor_view = basic_raw_tensor<E, basic_flat_shape<>, D, readonly>;
116116
} // namespace internal
117117
} // namespace ttl

0 commit comments

Comments
 (0)