Halide
Halide::Buffer< T > Class Template Reference

A Halide::Buffer is a named shared reference to a Halide::Runtime::Buffer. More...

#include <Argument.h>

Public Types

typedef T ElemType
 

Public Member Functions

virtual ~Buffer ()=default
 
 Buffer ()=default
 Make a null Buffer, which points to no Runtime::Buffer. More...
 
 Buffer (const Buffer &that)=default
 Trivial copy constructor. More...
 
Bufferoperator= (const Buffer &that)=default
 Trivial copy assignment operator. More...
 
Bufferoperator= (Buffer &&) noexcept=default
 Trivial move assignment operator. More...
 
template<typename T2 >
 Buffer (const Buffer< T2 > &other)
 Make a Buffer from a Buffer of a different type. More...
 
template<typename T2 >
 Buffer (Buffer< T2 > &&other) noexcept
 Move construct from a Buffer of a different type. More...
 
template<int D>
 Buffer (Runtime::Buffer< T, D > &&buf, const std::string &name="")
 Construct a Buffer that captures and owns an rvalue Runtime::Buffer. More...
 
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
 Buffer (Type t, int first, Args... rest)
 Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name. More...
 
 Buffer (const halide_buffer_t &buf, const std::string &name="")
 
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
 Buffer (int first, Args... rest)
 
 Buffer (Type t, const std::vector< int > &sizes, const std::string &name="")
 
 Buffer (Type t, const std::vector< int > &sizes, const std::vector< int > &storage_order, const std::string &name="")
 
 Buffer (const std::vector< int > &sizes, const std::string &name="")
 
 Buffer (const std::vector< int > &sizes, const std::vector< int > &storage_order, const std::string &name="")
 
template<typename Array , size_t N>
 Buffer (Array(&vals)[N], const std::string &name="")
 
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
 Buffer (Type t, Internal::add_const_if_T_is_const< T, void > *data, int first, Args &&... rest)
 
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
 Buffer (Type t, Internal::add_const_if_T_is_const< T, void > *data, const std::vector< int > &sizes, const std::string &name="")
 
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
 Buffer (T *data, int first, Args &&... rest)
 
 Buffer (T *data, const std::vector< int > &sizes, const std::string &name="")
 
 Buffer (Type t, Internal::add_const_if_T_is_const< T, void > *data, const std::vector< int > &sizes, const std::string &name="")
 
 Buffer (Type t, Internal::add_const_if_T_is_const< T, void > *data, int d, const halide_dimension_t *shape, const std::string &name="")
 
 Buffer (T *data, int d, const halide_dimension_t *shape, const std::string &name="")
 
void set_name (const std::string &n)
 Buffers are optionally named. More...
 
const std::string & name () const
 
template<typename T2 >
bool same_as (const Buffer< T2 > &other) const
 Check if two Buffer objects point to the same underlying Buffer. More...
 
bool defined () const
 Check if this Buffer refers to an existing Buffer. More...
 
Runtime::Buffer< T > * get ()
 Get a pointer to the underlying Runtime::Buffer. More...
 
const Runtime::Buffer< T > * get () const
 
template<typename Fn , typename... Args>
Buffer< T > & for_each_value (Fn &&f, Args... other_buffers)
 Does the same thing as the equivalent Halide::Runtime::Buffer method. More...
 
template<typename Fn , typename... Args>
const Buffer< T > & for_each_value (Fn &&f, Args... other_buffers) const
 
template<typename Fn >
Buffer< T > & for_each_element (Fn &&f)
 
template<typename Fn >
const Buffer< T > & for_each_element (Fn &&f) const
 
template<typename FnOrValue >
Buffer< T > & fill (FnOrValue &&f)
 
Type type () const
 
template<typename T2 >
Buffer< T2 > as () const
 
Buffer< T > copy () const
 
template<typename T2 >
void copy_from (const Buffer< T2 > &other)
 
template<typename... Args>
auto operator() (int first, Args &&... args) -> decltype(std::declval< Runtime::Buffer< T >>()(first, std::forward< Args >(args)...))
 
template<typename... Args>
auto operator() (int first, Args &&... args) const -> decltype(std::declval< const Runtime::Buffer< T >>()(first, std::forward< Args >(args)...))
 
auto operator() (const int *pos) -> decltype(std::declval< Runtime::Buffer< T >>()(pos))
 
auto operator() (const int *pos) const -> decltype(std::declval< const Runtime::Buffer< T >>()(pos))
 
auto operator() () -> decltype(std::declval< Runtime::Buffer< T >>()())
 
auto operator() () const -> decltype(std::declval< const Runtime::Buffer< T >>()())
 
template<typename... Args>
Expr operator() (const Expr &first, Args... rest) const
 Make an Expr that loads from this concrete buffer at a computed coordinate. More...
 
template<typename... Args>
Expr operator() (const std::vector< Expr > &args) const
 
int copy_to_device (const Target &t=get_jit_target_from_environment())
 Copy to the GPU, using the device API that is the default for the given Target. More...
 
int copy_to_device (const DeviceAPI &d, const Target &t=get_jit_target_from_environment())
 Copy to the GPU, using the given device API. More...
 
int device_malloc (const Target &t=get_jit_target_from_environment())
 Allocate on the GPU, using the device API that is the default for the given Target. More...
 
int device_malloc (const DeviceAPI &d, const Target &t=get_jit_target_from_environment())
 Allocate storage on the GPU, using the given device API. More...
 
int device_wrap_native (const DeviceAPI &d, uint64_t handle, const Target &t=get_jit_target_from_environment())
 Wrap a native handle, using the given device API. More...
 

Static Public Member Functions

static Buffer< T > make_scalar (const std::string &name="")
 
static Buffer make_scalar (Type t, const std::string &name="")
 
static Buffer< T > make_scalar (T *data, const std::string &name="")
 
static Buffer< T > make_interleaved (int width, int height, int channels, const std::string &name="")
 
static Buffer make_interleaved (Type t, int width, int height, int channels, const std::string &name="")
 
static Buffer< T > make_interleaved (T *data, int width, int height, int channels, const std::string &name="")
 
static Buffer< Internal::add_const_if_T_is_const< T, void > > make_interleaved (Type t, T *data, int width, int height, int channels, const std::string &name="")
 
template<typename T2 >
static Buffer< T > make_with_shape_of (Buffer< T2 > src, void *(*allocate_fn)(size_t)=nullptr, void(*deallocate_fn)(void *)=nullptr, const std::string &name="")
 
template<typename T2 >
static Buffer< T > make_with_shape_of (const Runtime::Buffer< T2 > &src, void *(*allocate_fn)(size_t)=nullptr, void(*deallocate_fn)(void *)=nullptr, const std::string &name="")
 
static halide_type_t static_halide_type ()
 
template<typename T2 >
static bool can_convert_from (const Buffer< T2 > &other)
 

Static Public Attributes

static constexpr bool has_static_halide_type = Runtime::Buffer<T>::has_static_halide_type
 

Detailed Description

template<typename T>
class Halide::Buffer< T >

A Halide::Buffer is a named shared reference to a Halide::Runtime::Buffer.

A Buffer<T1> can refer to a Buffer<T2> if T1 is const whenever T2 is const, and either T1 = T2 or T1 is void. A Buffer<void> can refer to any Buffer of any non-const type, and the default template parameter is T = void.

Examples
tutorial/lesson_01_basics.cpp, tutorial/lesson_02_input_image.cpp, tutorial/lesson_03_debugging_1.cpp, tutorial/lesson_04_debugging_2.cpp, tutorial/lesson_05_scheduling_1.cpp, tutorial/lesson_06_realizing_over_shifted_domains.cpp, tutorial/lesson_07_multi_stage_pipelines.cpp, tutorial/lesson_08_scheduling_2.cpp, tutorial/lesson_09_update_definitions.cpp, tutorial/lesson_12_using_the_gpu.cpp, and tutorial/lesson_13_tuples.cpp.

Definition at line 16 of file Argument.h.

Member Typedef Documentation

◆ ElemType

template<typename T >
typedef T Halide::Buffer< T >::ElemType

Definition at line 148 of file Buffer.h.

Constructor & Destructor Documentation

◆ ~Buffer()

template<typename T >
virtual Halide::Buffer< T >::~Buffer ( )
virtualdefault

◆ Buffer() [1/20]

template<typename T >
Halide::Buffer< T >::Buffer ( )
default

Make a null Buffer, which points to no Runtime::Buffer.

◆ Buffer() [2/20]

template<typename T >
Halide::Buffer< T >::Buffer ( const Buffer< T > &  that)
default

Trivial copy constructor.

◆ Buffer() [3/20]

template<typename T >
template<typename T2 >
Halide::Buffer< T >::Buffer ( const Buffer< T2 > &  other)
inline

Make a Buffer from a Buffer of a different type.

Definition at line 168 of file Buffer.h.

◆ Buffer() [4/20]

template<typename T >
template<typename T2 >
Halide::Buffer< T >::Buffer ( Buffer< T2 > &&  other)
inlinenoexcept

Move construct from a Buffer of a different type.

Definition at line 175 of file Buffer.h.

◆ Buffer() [5/20]

template<typename T >
template<int D>
Halide::Buffer< T >::Buffer ( Runtime::Buffer< T, D > &&  buf,
const std::string &  name = "" 
)
inline

Construct a Buffer that captures and owns an rvalue Runtime::Buffer.

Definition at line 182 of file Buffer.h.

◆ Buffer() [6/20]

template<typename T >
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
Halide::Buffer< T >::Buffer ( Type  t,
int  first,
Args...  rest 
)
inlineexplicit

Constructors that match Runtime::Buffer with two differences: 1) They take a Type instead of a halide_type_t 2) There is an optional last string argument that gives the buffer a specific name.

Definition at line 199 of file Buffer.h.

◆ Buffer() [7/20]

template<typename T >
Halide::Buffer< T >::Buffer ( const halide_buffer_t buf,
const std::string &  name = "" 
)
inlineexplicit

Definition at line 205 of file Buffer.h.

◆ Buffer() [8/20]

template<typename T >
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
Halide::Buffer< T >::Buffer ( int  first,
Args...  rest 
)
inlineexplicit

Definition at line 212 of file Buffer.h.

◆ Buffer() [9/20]

template<typename T >
Halide::Buffer< T >::Buffer ( Type  t,
const std::vector< int > &  sizes,
const std::string &  name = "" 
)
inlineexplicit

Definition at line 217 of file Buffer.h.

◆ Buffer() [10/20]

template<typename T >
Halide::Buffer< T >::Buffer ( Type  t,
const std::vector< int > &  sizes,
const std::vector< int > &  storage_order,
const std::string &  name = "" 
)
inlineexplicit

Definition at line 223 of file Buffer.h.

◆ Buffer() [11/20]

template<typename T >
Halide::Buffer< T >::Buffer ( const std::vector< int > &  sizes,
const std::string &  name = "" 
)
inlineexplicit

Definition at line 230 of file Buffer.h.

◆ Buffer() [12/20]

template<typename T >
Halide::Buffer< T >::Buffer ( const std::vector< int > &  sizes,
const std::vector< int > &  storage_order,
const std::string &  name = "" 
)
inlineexplicit

Definition at line 235 of file Buffer.h.

◆ Buffer() [13/20]

template<typename T >
template<typename Array , size_t N>
Halide::Buffer< T >::Buffer ( Array(&)  vals[N],
const std::string &  name = "" 
)
inlineexplicit

Definition at line 242 of file Buffer.h.

◆ Buffer() [14/20]

template<typename T >
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
Halide::Buffer< T >::Buffer ( Type  t,
Internal::add_const_if_T_is_const< T, void > *  data,
int  first,
Args &&...  rest 
)
inlineexplicit

Definition at line 249 of file Buffer.h.

◆ Buffer() [15/20]

template<typename T >
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
Halide::Buffer< T >::Buffer ( Type  t,
Internal::add_const_if_T_is_const< T, void > *  data,
const std::vector< int > &  sizes,
const std::string &  name = "" 
)
inlineexplicit

Definition at line 258 of file Buffer.h.

◆ Buffer() [16/20]

template<typename T >
template<typename... Args, typename = typename std::enable_if<Internal::all_ints_and_optional_name<Args...>::value>::type>
Halide::Buffer< T >::Buffer ( T *  data,
int  first,
Args &&...  rest 
)
inlineexplicit

Definition at line 267 of file Buffer.h.

◆ Buffer() [17/20]

template<typename T >
Halide::Buffer< T >::Buffer ( T *  data,
const std::vector< int > &  sizes,
const std::string &  name = "" 
)
inlineexplicit

Definition at line 273 of file Buffer.h.

◆ Buffer() [18/20]

template<typename T >
Halide::Buffer< T >::Buffer ( Type  t,
Internal::add_const_if_T_is_const< T, void > *  data,
const std::vector< int > &  sizes,
const std::string &  name = "" 
)
inlineexplicit

Definition at line 279 of file Buffer.h.

◆ Buffer() [19/20]

template<typename T >
Halide::Buffer< T >::Buffer ( Type  t,
Internal::add_const_if_T_is_const< T, void > *  data,
int  d,
const halide_dimension_t shape,
const std::string &  name = "" 
)
inlineexplicit

Definition at line 286 of file Buffer.h.

◆ Buffer() [20/20]

template<typename T >
Halide::Buffer< T >::Buffer ( T *  data,
int  d,
const halide_dimension_t shape,
const std::string &  name = "" 
)
inlineexplicit

Definition at line 294 of file Buffer.h.

Member Function Documentation

◆ operator=() [1/2]

template<typename T >
Buffer& Halide::Buffer< T >::operator= ( const Buffer< T > &  that)
default

Trivial copy assignment operator.

◆ operator=() [2/2]

template<typename T >
Buffer& Halide::Buffer< T >::operator= ( Buffer< T > &&  )
defaultnoexcept

Trivial move assignment operator.

◆ make_scalar() [1/3]

template<typename T >
static Buffer<T> Halide::Buffer< T >::make_scalar ( const std::string &  name = "")
inlinestatic

Definition at line 301 of file Buffer.h.

◆ make_scalar() [2/3]

template<typename T >
static Buffer Halide::Buffer< T >::make_scalar ( Type  t,
const std::string &  name = "" 
)
inlinestatic

Definition at line 305 of file Buffer.h.

◆ make_scalar() [3/3]

template<typename T >
static Buffer<T> Halide::Buffer< T >::make_scalar ( T *  data,
const std::string &  name = "" 
)
inlinestatic

Definition at line 309 of file Buffer.h.

◆ make_interleaved() [1/4]

template<typename T >
static Buffer<T> Halide::Buffer< T >::make_interleaved ( int  width,
int  height,
int  channels,
const std::string &  name = "" 
)
inlinestatic

Definition at line 313 of file Buffer.h.

◆ make_interleaved() [2/4]

template<typename T >
static Buffer Halide::Buffer< T >::make_interleaved ( Type  t,
int  width,
int  height,
int  channels,
const std::string &  name = "" 
)
inlinestatic

Definition at line 318 of file Buffer.h.

◆ make_interleaved() [3/4]

template<typename T >
static Buffer<T> Halide::Buffer< T >::make_interleaved ( T *  data,
int  width,
int  height,
int  channels,
const std::string &  name = "" 
)
inlinestatic

Definition at line 323 of file Buffer.h.

◆ make_interleaved() [4/4]

template<typename T >
static Buffer<Internal::add_const_if_T_is_const<T, void> > Halide::Buffer< T >::make_interleaved ( Type  t,
T *  data,
int  width,
int  height,
int  channels,
const std::string &  name = "" 
)
inlinestatic

Definition at line 329 of file Buffer.h.

◆ make_with_shape_of() [1/2]

template<typename T >
template<typename T2 >
static Buffer<T> Halide::Buffer< T >::make_with_shape_of ( Buffer< T2 >  src,
void *(*)(size_t allocate_fn = nullptr,
void(*)(void *)  deallocate_fn = nullptr,
const std::string &  name = "" 
)
inlinestatic

Definition at line 336 of file Buffer.h.

◆ make_with_shape_of() [2/2]

template<typename T >
template<typename T2 >
static Buffer<T> Halide::Buffer< T >::make_with_shape_of ( const Runtime::Buffer< T2 > &  src,
void *(*)(size_t allocate_fn = nullptr,
void(*)(void *)  deallocate_fn = nullptr,
const std::string &  name = "" 
)
inlinestatic

Definition at line 345 of file Buffer.h.

◆ set_name()

template<typename T >
void Halide::Buffer< T >::set_name ( const std::string &  n)
inline

Buffers are optionally named.

Definition at line 356 of file Buffer.h.

◆ name()

◆ same_as()

template<typename T >
template<typename T2 >
bool Halide::Buffer< T >::same_as ( const Buffer< T2 > &  other) const
inline

Check if two Buffer objects point to the same underlying Buffer.

Definition at line 367 of file Buffer.h.

◆ defined()

template<typename T >
bool Halide::Buffer< T >::defined ( ) const
inline

Check if this Buffer refers to an existing Buffer.

Default-constructed Buffer objects do not refer to any existing Buffer.

Definition at line 374 of file Buffer.h.

◆ get() [1/2]

template<typename T >
Runtime::Buffer<T>* Halide::Buffer< T >::get ( )
inline

◆ get() [2/2]

template<typename T >
const Runtime::Buffer<T>* Halide::Buffer< T >::get ( ) const
inline

Definition at line 384 of file Buffer.h.

◆ for_each_value() [1/2]

template<typename T >
template<typename Fn , typename... Args>
Buffer<T>& Halide::Buffer< T >::for_each_value ( Fn &&  f,
Args...  other_buffers 
)
inline

Does the same thing as the equivalent Halide::Runtime::Buffer method.

Definition at line 477 of file Buffer.h.

◆ for_each_value() [2/2]

template<typename T >
template<typename Fn , typename... Args>
const Buffer<T>& Halide::Buffer< T >::for_each_value ( Fn &&  f,
Args...  other_buffers 
) const
inline

Definition at line 483 of file Buffer.h.

◆ for_each_element() [1/2]

template<typename T >
template<typename Fn >
Buffer<T>& Halide::Buffer< T >::for_each_element ( Fn &&  f)
inline

Definition at line 489 of file Buffer.h.

◆ for_each_element() [2/2]

template<typename T >
template<typename Fn >
const Buffer<T>& Halide::Buffer< T >::for_each_element ( Fn &&  f) const
inline

Definition at line 495 of file Buffer.h.

◆ fill()

template<typename T >
template<typename FnOrValue >
Buffer<T>& Halide::Buffer< T >::fill ( FnOrValue &&  f)
inline

Definition at line 501 of file Buffer.h.

◆ static_halide_type()

template<typename T >
static halide_type_t Halide::Buffer< T >::static_halide_type ( )
inlinestatic

Definition at line 508 of file Buffer.h.

◆ can_convert_from()

template<typename T >
template<typename T2 >
static bool Halide::Buffer< T >::can_convert_from ( const Buffer< T2 > &  other)
inlinestatic

Definition at line 513 of file Buffer.h.

◆ type()

template<typename T >
Type Halide::Buffer< T >::type ( ) const
inline

◆ as()

template<typename T >
template<typename T2 >
Buffer<T2> Halide::Buffer< T >::as ( ) const
inline

Definition at line 526 of file Buffer.h.

◆ copy()

template<typename T >
Buffer<T> Halide::Buffer< T >::copy ( ) const
inline

Definition at line 530 of file Buffer.h.

◆ copy_from()

template<typename T >
template<typename T2 >
void Halide::Buffer< T >::copy_from ( const Buffer< T2 > &  other)
inline

Definition at line 535 of file Buffer.h.

◆ operator()() [1/8]

template<typename T >
template<typename... Args>
auto Halide::Buffer< T >::operator() ( int  first,
Args &&...  args 
) -> decltype(std::declval<Runtime::Buffer<T>>()(first, std::forward<Args>(args)...))
inline

Definition at line 540 of file Buffer.h.

◆ operator()() [2/8]

template<typename T >
template<typename... Args>
auto Halide::Buffer< T >::operator() ( int  first,
Args &&...  args 
) const -> decltype(std::declval<const Runtime::Buffer<T>>()(first, std::forward<Args>(args)...))
inline

Definition at line 545 of file Buffer.h.

◆ operator()() [3/8]

template<typename T >
auto Halide::Buffer< T >::operator() ( const int *  pos) -> decltype(std::declval<Runtime::Buffer<T>>()(pos))
inline

Definition at line 549 of file Buffer.h.

◆ operator()() [4/8]

template<typename T >
auto Halide::Buffer< T >::operator() ( const int *  pos) const -> decltype(std::declval<const Runtime::Buffer<T>>()(pos))
inline

Definition at line 553 of file Buffer.h.

◆ operator()() [5/8]

template<typename T >
auto Halide::Buffer< T >::operator() ( ) -> decltype(std::declval<Runtime::Buffer<T>>()())
inline

Definition at line 557 of file Buffer.h.

◆ operator()() [6/8]

template<typename T >
auto Halide::Buffer< T >::operator() ( ) const -> decltype(std::declval<const Runtime::Buffer<T>>()())
inline

Definition at line 561 of file Buffer.h.

◆ operator()() [7/8]

template<typename T >
template<typename... Args>
Expr Halide::Buffer< T >::operator() ( const Expr first,
Args...  rest 
) const
inline

Make an Expr that loads from this concrete buffer at a computed coordinate.

Definition at line 569 of file Buffer.h.

◆ operator()() [8/8]

template<typename T >
template<typename... Args>
Expr Halide::Buffer< T >::operator() ( const std::vector< Expr > &  args) const
inline

Definition at line 575 of file Buffer.h.

◆ copy_to_device() [1/2]

template<typename T >
int Halide::Buffer< T >::copy_to_device ( const Target t = get_jit_target_from_environment())
inline

Copy to the GPU, using the device API that is the default for the given Target.

Definition at line 581 of file Buffer.h.

Referenced by Halide::Buffer< void >::copy_to_device().

◆ copy_to_device() [2/2]

template<typename T >
int Halide::Buffer< T >::copy_to_device ( const DeviceAPI d,
const Target t = get_jit_target_from_environment() 
)
inline

Copy to the GPU, using the given device API.

Definition at line 586 of file Buffer.h.

◆ device_malloc() [1/2]

template<typename T >
int Halide::Buffer< T >::device_malloc ( const Target t = get_jit_target_from_environment())
inline

Allocate on the GPU, using the device API that is the default for the given Target.

Definition at line 591 of file Buffer.h.

Referenced by Halide::Buffer< void >::device_malloc().

◆ device_malloc() [2/2]

template<typename T >
int Halide::Buffer< T >::device_malloc ( const DeviceAPI d,
const Target t = get_jit_target_from_environment() 
)
inline

Allocate storage on the GPU, using the given device API.

Definition at line 596 of file Buffer.h.

◆ device_wrap_native()

template<typename T >
int Halide::Buffer< T >::device_wrap_native ( const DeviceAPI d,
uint64_t  handle,
const Target t = get_jit_target_from_environment() 
)
inline

Wrap a native handle, using the given device API.

It is a bad idea to pass DeviceAPI::Default_GPU to this routine as the handle argument must match the API that the default resolves to and it is clearer and more reliable to pass the resolved DeviceAPI explicitly.

Definition at line 605 of file Buffer.h.

Member Data Documentation

◆ has_static_halide_type

template<typename T >
constexpr bool Halide::Buffer< T >::has_static_halide_type = Runtime::Buffer<T>::has_static_halide_type
staticconstexpr

Definition at line 506 of file Buffer.h.


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