This C++ API example demonstrates programming flow when reordering memory between CPU and GPU engines.
#include <iostream>
#include <stdexcept>
#include <vector>
#include "example_utils.hpp"
using namespace std;
std::vector<float> array(product(adims));
for (size_t e = 0; e < array.size(); ++e) {
array[e] = e % 7 ? 1.0f : -1.0f;
}
write_to_dnnl_memory(array.data(), mem);
}
int negs = 0;
std::vector<float> array(product(adims));
read_from_dnnl_memory(array.data(), mem);
for (size_t e = 0; e < adims.size(); ++e) {
negs += array[e] < 0.0f;
}
return negs;
}
void cross_engine_reorder_tutorial() {
auto stream_gpu =
stream(gpu_engine);
auto m_cpu
cpu_engine);
auto m_gpu
gpu_engine);
fill(m_cpu, tz);
r1.execute(stream_gpu, m_cpu, m_gpu);
r2.execute(stream_gpu, m_gpu, m_cpu);
stream_gpu.wait();
if (find_negative(m_cpu, tz) != 0)
throw std::logic_error(
"Unexpected output, find a negative value after the ReLU "
"execution.");
}
int main(int argc, char **argv) {
cross_engine_reorder_tutorial);
}
@ eltwise_relu
Elementwise: rectified linear unit (ReLU)
Definition dnnl.hpp:490
@ forward
Forward data propagation, alias for dnnl::prop_kind::forward_training.
Definition dnnl.hpp:455
#define DNNL_ARG_DST
A special mnemonic for destination argument for primitives that have a single destination.
Definition dnnl_types.h:1806
#define DNNL_ARG_SRC
A special mnemonic for source argument for primitives that have a single source.
Definition dnnl_types.h:1782
oneDNN namespace
Definition dnnl.hpp:81
Descriptor for an elementwise forward propagation primitive.
Definition dnnl.hpp:5488
Primitive descriptor for an elementwise forward propagation primitive.
Definition dnnl.hpp:5522
Elementwise unary operation forward propagation primitive.
Definition dnnl.hpp:5486
An execution engine.
Definition dnnl.hpp:844
@ gpu
GPU engine.
Definition dnnl.hpp:855
@ cpu
CPU engine.
Definition dnnl.hpp:853
Memory object.
Definition dnnl.hpp:1188
@ nchw
4D CNN activations tensor; an alias for dnnl::memory::format_tag::abcd
Definition dnnl.hpp:1359
@ f32
32-bit/single-precision floating point.
Definition dnnl.hpp:1216
desc get_desc() const
Returns the associated memory descriptor.
Definition dnnl.hpp:2010
std::vector< dim > dims
Vector of dimensions.
Definition dnnl.hpp:1193
Reorder primitive.
Definition dnnl.hpp:3118
An execution stream.
Definition dnnl.hpp:1047