21 #ifndef __TBB_flow_graph_gfx_factory_H 22 #define __TBB_flow_graph_gfx_factory_H 26 #if __TBB_PREVIEW_GFX_FACTORY 33 #include <gfx/gfx_rt.h> 34 #include <gfx/gfx_intrin.h> 35 #include <gfx/gfx_types.h> 41 namespace interface9 {
46 namespace gfx_offload {
58 std::string msg =
"GFX error occurred: " + std::to_string(_GFX_get_last_error());
59 std::cerr << msg << std::endl;
70 if (err != GFX_SUCCESS) {
80 template<
typename DataType,
typename SizeType>
82 template<
typename DataType>
97 template <
typename F,
typename ...ArgType>
99 task_id_type
id = _GFX_offload(ptr,
raw_data(args)...);
112 template <
typename T>
116 typedef typename std::vector<T>::iterator
iterator;
124 T*
data() {
return &(my_vector_ptr->front()); }
125 const T*
data()
const {
return &(my_vector_ptr->front()); }
127 size_type
size()
const {
return my_vector_ptr->size(); }
129 const_iterator
cbegin()
const {
return my_vector_ptr->cbegin(); }
130 const_iterator
cend()
const {
return my_vector_ptr->cend(); }
131 iterator
begin() {
return my_vector_ptr->begin(); }
132 iterator
end() {
return my_vector_ptr->end(); }
134 T&
operator[](size_type pos) {
return (*my_vector_ptr)[pos]; }
135 const T&
operator[](size_type pos)
const {
return (*my_vector_ptr)[pos]; }
150 const T&
data()
const {
return my_data; }
153 kernel_id_type
task_id()
const {
return my_task_id; }
167 template <
typename F>
170 template<
typename ...Args>
173 operator void*() {
return my_ptr; }
195 template <
typename ...Args>
197 send_data_impl(args...);
201 template <
typename ...Args>
202 void send_kernel(device_type ,
const kernel_type& kernel, Args&... args) {
207 set_kernel_id(
id, args...);
210 m_graph.reserve_wait();
213 std::lock_guard<std::mutex>
lock(future_assignment_mutex);
216 callback_future = std::async(std::launch::async, &gfx_factory::callback<Args...>,
this,
id, args...);
220 template <
typename FinalizeFn,
typename ...Args>
230 return device_type();
240 template <
typename ...Args>
244 std::lock_guard<std::mutex>
lock(task_wait_mutex);
245 if (current_task_id <
id) {
247 current_task_id =
id;
252 receive_data(args...);
255 m_graph.release_wait();
263 template <
typename T>
266 template <
typename T>
271 template <
typename T>
274 template <
typename T>
276 share_data(msg.
data());
281 template <
typename T,
typename ...Rest>
284 send_data_impl(args...);
291 template <
typename T>
294 template <
typename T>
301 template <
typename T,
typename ...Rest>
303 set_kernel_id_arg(
id, arg);
304 set_kernel_id(
id, args...);
313 template <
typename T>
316 template <
typename T>
321 template <
typename T>
324 template <
typename T>
326 unshare_data(msg.
data());
332 template <
typename T,
typename ...Rest>
335 receive_data(args...);
357 #endif // __TBB_PREVIEW_GFX_FACTORY 359 #endif // __TBB_flow_graph_gfx_factory_H std::future< void > callback_future
std::shared_ptr< std::vector< T > > my_vector_ptr
void callback(kernel_id_type id, Args... args)
T & operator[](size_type pos)
gfx_offload::task_id_type kernel_id_type
tbb::flow::graph & m_graph
void send_arg(async_msg_type< T > &msg)
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id id
void send_data_impl(T &arg, Rest &... args)
void throw_gfx_exception()
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id ITT_FORMAT p const wchar_t int ITT_FORMAT __itt_group_mark d __itt_event ITT_FORMAT __itt_group_mark d void const wchar_t const wchar_t int ITT_FORMAT __itt_group_sync __itt_group_fsync x void const wchar_t int const wchar_t int int ITT_FORMAT __itt_group_sync __itt_group_fsync x void ITT_FORMAT __itt_group_sync __itt_group_fsync p void ITT_FORMAT __itt_group_sync __itt_group_fsync p void size_t ITT_FORMAT lu no args __itt_obj_prop_t __itt_obj_state_t ITT_FORMAT d const char ITT_FORMAT s __itt_frame ITT_FORMAT p const char const char ITT_FORMAT s __itt_counter ITT_FORMAT p __itt_counter unsigned long long ITT_FORMAT lu const wchar_t ITT_FORMAT S __itt_mark_type const wchar_t ITT_FORMAT S __itt_mark_type const char ITT_FORMAT s __itt_mark_type ITT_FORMAT d __itt_caller ITT_FORMAT p __itt_caller ITT_FORMAT p no args const __itt_domain __itt_clock_domain unsigned long long __itt_id ITT_FORMAT lu const __itt_domain __itt_clock_domain unsigned long long __itt_id __itt_id void * fn
void unshare_data(gfx_buffer< T > &buffer)
device_type operator()(gfx_factory &)
std::mutex future_assignment_mutex
void receive_arg(async_msg_type< T > &msg)
void share(DataType *p, SizeType n)
gfx_async_msg(const T &input_data)
kernel_id_type task_id() const
gfx_factory(tbb::flow::graph &g)
void finalize(device_type, FinalizeFn fn, Args &...)
gfx_buffer(size_type size)
void const char const char int ITT_FORMAT __itt_group_sync p
const_iterator cbegin() const
gfx_offload::task_id_type kernel_id_type
const T & operator[](size_type pos) const
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void * lock
void set_kernel_id_arg(kernel_id_type, T)
void receive_data(T &arg, Rest &... args)
kernel_id_type my_task_id
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void * data
std::vector< T >::iterator iterator
void operator()(Args &&... args)
void wait_for_task(task_id_type id)
std::mutex task_wait_mutex
void set_task_id(kernel_id_type id)
void send_data(device_type, Args &... args)
void check_enqueue_retcode(task_id_type err)
std::vector< T >::const_iterator const_iterator
void set_kernel_id_arg(kernel_id_type id, async_msg_type< T > &msg)
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t size
void check_gfx_retcode(task_id_type err)
void share_data(gfx_buffer< T > &buffer)
T * raw_data(gfx_buffer< T > &buffer)
task_id_type run_kernel(F ptr, ArgType &... args)
void set_kernel_id(kernel_id_type)
const_iterator cend() const
void send_kernel(device_type, const kernel_type &kernel, Args &... args)
void unshare(DataType *p)
void set_kernel_id(kernel_id_type id, T &arg, Rest &... args)