Unverified Commit 2d22efb7 authored by Paul Fultz II's avatar Paul Fultz II Committed by GitHub
Browse files

Document C++ API and driver commands (#751)

* Add doc for c++ api

* Formatting

* Add driver documentation

* Change the way base class is documented
parent 90912106
...@@ -14,6 +14,9 @@ add_doxygen_doc( ...@@ -14,6 +14,9 @@ add_doxygen_doc(
${PROJECT_SOURCE_DIR}/src/include ${PROJECT_SOURCE_DIR}/src/include
${PROJECT_SOURCE_DIR}/src/targets/cpu/include ${PROJECT_SOURCE_DIR}/src/targets/cpu/include
${PROJECT_SOURCE_DIR}/src/targets/gpu/include ${PROJECT_SOURCE_DIR}/src/targets/gpu/include
EXCLUDE_PATTERNS
${PROJECT_SOURCE_DIR}/src/targets/gpu/kernels
${PROJECT_SOURCE_DIR}/src/targets/gpu/device
SEARCH_INCLUDES YES SEARCH_INCLUDES YES
MACRO_EXPANSION YES MACRO_EXPANSION YES
RECURSIVE YES RECURSIVE YES
...@@ -35,10 +38,6 @@ add_doxygen_doc( ...@@ -35,10 +38,6 @@ add_doxygen_doc(
FULL_PATH_NAMES YES FULL_PATH_NAMES YES
PREDEFINED DOXYGEN PREDEFINED DOXYGEN
) )
add_custom_target(remove_inline_ns
sed -i "s/MIGRAPHX_INLINE_NS:://g" *.xml
WORKING_DIRECTORY ${DOXYGEN_OUTPUT}/xml)
add_dependencies(remove_inline_ns doxygen)
include(SphinxDoc) include(SphinxDoc)
add_sphinx_doc(src add_sphinx_doc(src
...@@ -47,7 +46,7 @@ add_sphinx_doc(src ...@@ -47,7 +46,7 @@ add_sphinx_doc(src
VARS VARS
breathe_projects.proj=${DOXYGEN_OUTPUT}/xml breathe_projects.proj=${DOXYGEN_OUTPUT}/xml
breathe_default_project=proj breathe_default_project=proj
DEPENDS doxygen remove_inline_ns DEPENDS doxygen
) )
find_package(LATEX) find_package(LATEX)
......
...@@ -5,10 +5,4 @@ C++ User Guide ...@@ -5,10 +5,4 @@ C++ User Guide
:maxdepth: 2 :maxdepth: 2
:caption: Contents: :caption: Contents:
overview reference/cpp
reference/data
reference/operators
reference/program
reference/targets
reference/quantization
reference/pass
Data types
==========
shape
-----
.. doxygenstruct:: migraphx::internal::shape
literal
-------
.. doxygenstruct:: migraphx::internal::literal
argument
--------
.. doxygenstruct:: migraphx::internal::argument
raw_data
--------
.. doxygenstruct:: migraphx::internal::raw_data
.. doxygenfunction:: migraphx::internal::visit_all
tensor_view
-----------
.. doxygenstruct:: migraphx::internal::tensor_view
Operators
=========
operation
---------
.. doxygenstruct:: migraphx::internal::operation
.. doxygenfunction:: migraphx::internal::is_context_free
.. doxygenfunction:: migraphx::internal::has_finalize
operators
---------
.. doxygennamespace:: migraphx::internal::op
...@@ -4,64 +4,64 @@ Passes ...@@ -4,64 +4,64 @@ Passes
pass pass
---- ----
.. doxygenstruct:: migraphx::pass .. doxygenstruct:: migraphx::internal::pass
dead_code_elimination dead_code_elimination
--------------------- ---------------------
.. doxygenstruct:: migraphx::dead_code_elimination .. doxygenstruct:: migraphx::internal::dead_code_elimination
eliminate_common_subexpression eliminate_common_subexpression
------------------------------ ------------------------------
.. doxygenstruct:: migraphx::eliminate_common_subexpression .. doxygenstruct:: migraphx::internal::eliminate_common_subexpression
eliminate_concat eliminate_concat
---------------- ----------------
.. doxygenstruct:: migraphx::eliminate_concat .. doxygenstruct:: migraphx::internal::eliminate_concat
eliminate_contiguous eliminate_contiguous
-------------------- --------------------
.. doxygenstruct:: migraphx::eliminate_contiguous .. doxygenstruct:: migraphx::internal::eliminate_contiguous
eliminate_identity eliminate_identity
------------------ ------------------
.. doxygenstruct:: migraphx::eliminate_identity .. doxygenstruct:: migraphx::internal::eliminate_identity
eliminate_pad eliminate_pad
------------- -------------
.. doxygenstruct:: migraphx::eliminate_pad .. doxygenstruct:: migraphx::internal::eliminate_pad
propagate_constant propagate_constant
------------------ ------------------
.. doxygenstruct:: migraphx::propagate_constant .. doxygenstruct:: migraphx::internal::propagate_constant
rewrite_batchnorm rewrite_batchnorm
----------------- -----------------
.. doxygenstruct:: migraphx::rewrite_batchnorm .. doxygenstruct:: migraphx::internal::rewrite_batchnorm
rewrite_rnn rewrite_rnn
----------- -----------
.. doxygenstruct:: migraphx::rewrite_rnn .. doxygenstruct:: migraphx::internal::rewrite_rnn
schedule schedule
-------- --------
.. doxygenstruct:: migraphx::schedule .. doxygenstruct:: migraphx::internal::schedule
simplify_algebra simplify_algebra
---------------- ----------------
.. doxygenstruct:: migraphx::simplify_algebra .. doxygenstruct:: migraphx::internal::simplify_algebra
simplify_reshapes simplify_reshapes
----------------- -----------------
.. doxygenstruct:: migraphx::simplify_reshapes .. doxygenstruct:: migraphx::internal::simplify_reshapes
...@@ -4,36 +4,36 @@ Program ...@@ -4,36 +4,36 @@ Program
instruction instruction
----------- -----------
.. doxygenstruct:: migraphx::instruction .. doxygenstruct:: migraphx::internal::instruction
instruction_ref instruction_ref
--------------- ---------------
.. cpp:type:: migraphx::instruction_ref .. cpp:type:: migraphx::internal::instruction_ref
References an instruction in the program. References an instruction in the program.
program program
------- -------
.. doxygenstruct:: migraphx::program .. doxygenstruct:: migraphx::internal::program
parse_onnx parse_onnx
---------- ----------
.. doxygenfunction:: migraphx::MIGRAPHX_INLINE_NS::parse_onnx .. doxygenfunction:: migraphx::internal::parse_onnx
parse_tf parse_tf
-------- --------
.. doxygenfunction:: migraphx::MIGRAPHX_INLINE_NS::parse_tf .. doxygenfunction:: migraphx::internal::parse_tf
onnx_options onnx_options
------------ ------------
.. doxygenstruct:: migraphx::onnx_options .. doxygenstruct:: migraphx::internal::onnx_options
tf_options tf_options
---------- ----------
.. doxygenstruct:: migraphx::tf_options .. doxygenstruct:: migraphx::internal::tf_options
...@@ -4,10 +4,10 @@ Quantization ...@@ -4,10 +4,10 @@ Quantization
quantize_fp16 quantize_fp16
------------- -------------
.. doxygenfunction:: migraphx::MIGRAPHX_INLINE_NS::quantize_fp16 .. doxygenfunction:: migraphx::internal::quantize_fp16
quantize_int8 quantize_int8
------------- -------------
.. doxygenfunction:: migraphx::MIGRAPHX_INLINE_NS::quantize_int8 .. doxygenfunction:: migraphx::internal::quantize_int8
...@@ -4,15 +4,15 @@ Targets ...@@ -4,15 +4,15 @@ Targets
target target
------ ------
.. doxygenstruct:: migraphx::target .. doxygenstruct:: migraphx::internal::target
gpu::target gpu::target
----------- -----------
.. doxygenstruct:: migraphx::gpu::target .. doxygenstruct:: migraphx::internal::gpu::target
cpu::target cpu::target
----------- -----------
.. doxygenstruct:: migraphx::cpu::target .. doxygenstruct:: migraphx::internal::cpu::target
...@@ -5,4 +5,11 @@ Developer Guide ...@@ -5,4 +5,11 @@ Developer Guide
:maxdepth: 2 :maxdepth: 2
:caption: Contents: :caption: Contents:
overview
dev/data
dev/operators
dev/program
dev/targets
dev/quantization
dev/pass
dev/matchers dev/matchers
MIGraphX Driver
===============
read
----
.. program:: migraphx-driver read
Loads and prints input graph.
.. include:: ./driver/read.rst
compile
-------
.. program:: migraphx-driver compile
Compiles and prints input graph.
.. include:: ./driver/compile.rst
run
---
.. program:: migraphx-driver run
Loads and prints input graph.
.. include:: ./driver/compile.rst
perf
----
.. program:: migraphx-driver perf
Compiles and runs input graph then prints performance report.
.. include:: ./driver/compile.rst
.. option:: --iterations, -n [unsigned int]
Number of iterations to run for perf report (Default: 100)
verify
------
.. program:: migraphx-driver verify
Runs reference and CPU or GPU implementations and checks outputs for consistency.
.. include:: ./driver/compile.rst
.. option:: --tolerance [double]
Tolerance for errors (Default: 80)
.. option:: -i, --per-instruction
Verify each instruction
.. option:: -r, --reduce
Reduce program and verify
.. include:: ./driver/read.rst
.. option:: --fill0 [std::vector<std::string>]
Fill parameter with 0s
.. option:: --fill1 [std::vector<std::string>]
Fill parameter with 1s
.. option:: --gpu
Compile on the gpu
.. option:: --cpu
Compile on the cpu
.. option:: --ref
Compile on the reference implementation
.. option:: --enable-offload-copy
Enable implicit offload copying
.. option:: --disable-fast-math
Disable fast math optimization
.. option:: --fp16
Quantize for fp16
.. option:: --int8
Quantize for int8
.. option:: <input file>
File to load
.. option:: --model [resnet50|inceptionv3|alexnet]
Load model
.. option:: --onnx
Load as onnx
.. option:: --tf
Load as tensorflow
.. option:: --migraphx
Load as MIGraphX
.. option:: --migraphx-json
Load as MIGraphX JSON
.. option:: --batch [unsigned int] (Default: 1)
Set batch size for model
.. option:: --nhwc
Treat tensorflow format as nhwc
.. option:: --skip-unknown-operators
Skip unknown operators when parsing and continue to parse.
.. option:: --nchw
Treat tensorflow format as nchw
.. option:: --trim, -t [unsigned int]
Trim instructions from the end (Default: 0)
.. option:: --input-dim [std::vector<std::string>]
Dim of a parameter (format: "@name d1 d2 dn")
.. option:: --optimize, -O
Optimize when reading
.. option:: --graphviz, -g
Print out a graphviz representation.
.. option:: --brief
Make the output brief.
.. option:: --cpp
Print out the program as cpp program.
.. option:: --json
Print out program as json.
.. option:: --text
Print out program in text format.
.. option:: --binary
Print out program in binary format.
.. option:: --output, -o [std::string]
Output to file.
...@@ -12,6 +12,7 @@ Welcome to AMD MIGraphX's documentation! ...@@ -12,6 +12,7 @@ Welcome to AMD MIGraphX's documentation!
py_user_guide py_user_guide
cpp_user_guide cpp_user_guide
driver
developer_guide developer_guide
......
C++ Reference
=============
shape
-----
.. doxygenenum:: migraphx_shape_datatype_t
.. doxygenstruct:: migraphx::shape
argument
--------
.. doxygenstruct:: migraphx::argument
target
------
.. doxygenstruct:: migraphx::target
program
-------
.. doxygenstruct:: migraphx::program_parameter_shapes
.. doxygenstruct:: migraphx::program_parameters
.. doxygenstruct:: migraphx_compile_options
.. doxygenstruct:: migraphx::program
quantize
--------
.. doxygenstruct:: migraphx::quantize_op_names
.. doxygenfunction:: migraphx::quantize_fp16(const program&)
.. doxygenfunction:: migraphx::quantize_fp16(const program&, const quantize_op_names&)
.. doxygenstruct:: migraphx::quantize_int8_options
.. doxygenfunction:: migraphx::quantize_int8
parse_onnx
----------
.. doxygenstruct:: migraphx::onnx_options
.. doxygenfunction:: migraphx::parse_onnx(const char *)
.. doxygenfunction:: migraphx::parse_onnx(const char *, const migraphx::onnx_options&)
.. doxygenfunction:: migraphx::parse_onnx_buffer(const std::string&)
.. doxygenfunction:: migraphx::parse_onnx_buffer(const std::string&, const migraphx::onnx_options&)
.. doxygenfunction:: migraphx::parse_onnx_buffer(const void *, size_t)
.. doxygenfunction:: migraphx::parse_onnx_buffer(const void *, size_t, const migraphx::onnx_options&)
load
----
.. doxygenstruct:: migraphx_file_options
.. doxygenfunction:: migraphx::load(const char *)
.. doxygenfunction:: migraphx::load(const char *, migraphx_file_options)
save
----
.. doxygenfunction:: migraphx::save(const program&, const char *)
.. doxygenfunction:: migraphx::save(const program&, const char *, migraphx_file_options)
Data types
==========
shape
-----
.. doxygenstruct:: migraphx::shape
literal
-------
.. doxygenstruct:: migraphx::literal
argument
--------
.. doxygenstruct:: migraphx::argument
raw_data
--------
.. doxygenstruct:: migraphx::raw_data
.. doxygenfunction:: migraphx::MIGRAPHX_INLINE_NS::visit_all
tensor_view
-----------
.. doxygenstruct:: migraphx::tensor_view
Operators
=========
operation
---------
.. doxygenstruct:: migraphx::operation
.. doxygenfunction:: migraphx::MIGRAPHX_INLINE_NS::is_context_free
.. doxygenfunction:: migraphx::MIGRAPHX_INLINE_NS::has_finalize
operators
---------
.. doxygennamespace:: migraphx::op
...@@ -111,7 +111,7 @@ argument ...@@ -111,7 +111,7 @@ argument
target target
-------- ------
.. py:class:: target() .. py:class:: target()
...@@ -131,7 +131,7 @@ program ...@@ -131,7 +131,7 @@ program
.. py:class:: program() .. py:class:: program()
Represents the computation graph to compiled and run. Represents the computation graph to be compiled and run.
.. py:method:: clone() .. py:method:: clone()
...@@ -206,7 +206,7 @@ parse_onnx ...@@ -206,7 +206,7 @@ parse_onnx
:rtype: program :rtype: program
parse_tf parse_tf
---------- --------
.. py:function:: parse_tf(filename, is_nhwc=True, batch_size=1) .. py:function:: parse_tf(filename, is_nhwc=True, batch_size=1)
......
...@@ -9,7 +9,9 @@ ...@@ -9,7 +9,9 @@
#include <iostream> #include <iostream>
namespace migraphx { namespace migraphx {
#ifndef DOXYGEN
inline namespace api { // NOLINT inline namespace api { // NOLINT
#endif
template <class T, class F, class... Ts> template <class T, class F, class... Ts>
T* make(F f, Ts&&... xs) T* make(F f, Ts&&... xs)
...@@ -192,16 +194,24 @@ struct handle_base ...@@ -192,16 +194,24 @@ struct handle_base
std::shared_ptr<T> m_handle; std::shared_ptr<T> m_handle;
}; };
#ifdef DOXYGEN
#define MIGRAPHX_DETAIL_HANDLE_BASE(name, const_) handle_base<>
#else
#define MIGRAPHX_DETAIL_HANDLE_BASE(name, const_) \ #define MIGRAPHX_DETAIL_HANDLE_BASE(name, const_) \
handle_base<const_ migraphx_##name, \ handle_base<const_ migraphx_##name, \
decltype(&migraphx_##name##_destroy), \ decltype(&migraphx_##name##_destroy), \
migraphx_##name##_destroy> migraphx_##name##_destroy>
#endif
// NOLINTNEXTLINE // NOLINTNEXTLINE
#define MIGRAPHX_HANDLE_BASE(name) MIGRAPHX_DETAIL_HANDLE_BASE(name, ) #define MIGRAPHX_HANDLE_BASE(name) MIGRAPHX_DETAIL_HANDLE_BASE(name, )
// NOLINTNEXTLINE // NOLINTNEXTLINE
#define MIGRAPHX_CONST_HANDLE_BASE(name) MIGRAPHX_DETAIL_HANDLE_BASE(name, const) #define MIGRAPHX_CONST_HANDLE_BASE(name) MIGRAPHX_DETAIL_HANDLE_BASE(name, const)
/**
* @brief Describe shape of tensor
* @details A shape consists of a data type, lengths of multi-dimension tensor, and strides
*
*/
struct shape : MIGRAPHX_CONST_HANDLE_BASE(shape) struct shape : MIGRAPHX_CONST_HANDLE_BASE(shape)
{ {
shape() {} shape() {}
...@@ -212,11 +222,14 @@ struct shape : MIGRAPHX_CONST_HANDLE_BASE(shape) ...@@ -212,11 +222,14 @@ struct shape : MIGRAPHX_CONST_HANDLE_BASE(shape)
shape(migraphx_shape* p, borrow) { this->set_handle(p, borrow{}); } shape(migraphx_shape* p, borrow) { this->set_handle(p, borrow{}); }
/// Construct a scalar shape
shape(migraphx_shape_datatype_t type) shape(migraphx_shape_datatype_t type)
{ {
this->make_handle(&migraphx_shape_create_scalar, type); this->make_handle(&migraphx_shape_create_scalar, type);
} }
/// Construct a shape with its type and lengths. The strides are
/// automatically computed assumming a packed layout.
shape(migraphx_shape_datatype_t type, std::vector<size_t> plengths) shape(migraphx_shape_datatype_t type, std::vector<size_t> plengths)
{ {
this->make_handle(&migraphx_shape_create, type, plengths.data(), plengths.size()); this->make_handle(&migraphx_shape_create, type, plengths.data(), plengths.size());
...@@ -274,6 +287,12 @@ struct shape : MIGRAPHX_CONST_HANDLE_BASE(shape) ...@@ -274,6 +287,12 @@ struct shape : MIGRAPHX_CONST_HANDLE_BASE(shape)
friend bool operator!=(const shape& px, const shape& py) { return !(px == py); } friend bool operator!=(const shape& px, const shape& py) { return !(px == py); }
}; };
/**
* @brief Arguments to be passed to an migraphx arguments
*
* An `argument` represents a raw buffer of data with a shape.
*
*/
struct argument : MIGRAPHX_CONST_HANDLE_BASE(argument) struct argument : MIGRAPHX_CONST_HANDLE_BASE(argument)
{ {
argument() {} argument() {}
...@@ -303,6 +322,7 @@ struct argument : MIGRAPHX_CONST_HANDLE_BASE(argument) ...@@ -303,6 +322,7 @@ struct argument : MIGRAPHX_CONST_HANDLE_BASE(argument)
return pout; return pout;
} }
/// Generate an argument using random data
static argument generate(shape ps, size_t pseed = 0) static argument generate(shape ps, size_t pseed = 0)
{ {
return argument( return argument(
...@@ -320,6 +340,7 @@ struct argument : MIGRAPHX_CONST_HANDLE_BASE(argument) ...@@ -320,6 +340,7 @@ struct argument : MIGRAPHX_CONST_HANDLE_BASE(argument)
friend bool operator!=(const argument& px, const argument& py) { return !(px == py); } friend bool operator!=(const argument& px, const argument& py) { return !(px == py); }
}; };
/// A target for compilation
struct target : MIGRAPHX_HANDLE_BASE(target) struct target : MIGRAPHX_HANDLE_BASE(target)
{ {
target() {} target() {}
...@@ -328,6 +349,7 @@ struct target : MIGRAPHX_HANDLE_BASE(target) ...@@ -328,6 +349,7 @@ struct target : MIGRAPHX_HANDLE_BASE(target)
target(migraphx_target* p, borrow) { this->set_handle(p, borrow{}); } target(migraphx_target* p, borrow) { this->set_handle(p, borrow{}); }
/// Construct a target from its name
target(const char* name) { this->make_handle(&migraphx_target_create, name); } target(const char* name) { this->make_handle(&migraphx_target_create, name); }
}; };
...@@ -370,6 +392,7 @@ struct program_parameter_shapes : MIGRAPHX_HANDLE_BASE(program_parameter_shapes) ...@@ -370,6 +392,7 @@ struct program_parameter_shapes : MIGRAPHX_HANDLE_BASE(program_parameter_shapes)
} }
}; };
/// A class to construct the inputs parameters for a program
struct program_parameters : MIGRAPHX_HANDLE_BASE(program_parameters) struct program_parameters : MIGRAPHX_HANDLE_BASE(program_parameters)
{ {
program_parameters(migraphx_program_parameters* p, own) { this->set_handle(p, own{}); } program_parameters(migraphx_program_parameters* p, own) { this->set_handle(p, own{}); }
...@@ -380,6 +403,7 @@ struct program_parameters : MIGRAPHX_HANDLE_BASE(program_parameters) ...@@ -380,6 +403,7 @@ struct program_parameters : MIGRAPHX_HANDLE_BASE(program_parameters)
program_parameters() { this->make_handle(&migraphx_program_parameters_create); } program_parameters() { this->make_handle(&migraphx_program_parameters_create); }
/// Construct the parameters from initializer_list
program_parameters(std::initializer_list<std::pair<std::string, argument>> l) program_parameters(std::initializer_list<std::pair<std::string, argument>> l)
{ {
this->make_handle(&migraphx_program_parameters_create); this->make_handle(&migraphx_program_parameters_create);
...@@ -387,6 +411,7 @@ struct program_parameters : MIGRAPHX_HANDLE_BASE(program_parameters) ...@@ -387,6 +411,7 @@ struct program_parameters : MIGRAPHX_HANDLE_BASE(program_parameters)
this->add(p.first.c_str(), p.second); this->add(p.first.c_str(), p.second);
} }
/// Add a new parameter
void add(const char* pname, const argument& pargument) const void add(const char* pname, const argument& pargument) const
{ {
call(&migraphx_program_parameters_add, call(&migraphx_program_parameters_add,
...@@ -469,6 +494,7 @@ struct module ...@@ -469,6 +494,7 @@ struct module
void print() const { call(&migraphx_module_print, mm); } void print() const { call(&migraphx_module_print, mm); }
}; };
/// A program represents the all computation graphs to be compiled and executed
struct program : MIGRAPHX_HANDLE_BASE(program) struct program : MIGRAPHX_HANDLE_BASE(program)
{ {
program() {} program() {}
...@@ -477,17 +503,20 @@ struct program : MIGRAPHX_HANDLE_BASE(program) ...@@ -477,17 +503,20 @@ struct program : MIGRAPHX_HANDLE_BASE(program)
program(migraphx_program* p, borrow) { this->set_handle(p, borrow{}); } program(migraphx_program* p, borrow) { this->set_handle(p, borrow{}); }
/// Compile the program for a specific target to be ran on
void compile(const target& ptarget, migraphx_compile_options poptions) const void compile(const target& ptarget, migraphx_compile_options poptions) const
{ {
call( call(
&migraphx_program_compile, this->get_handle_ptr(), ptarget.get_handle_ptr(), &poptions); &migraphx_program_compile, this->get_handle_ptr(), ptarget.get_handle_ptr(), &poptions);
} }
/// Compile the program for a specific target to be ran on
void compile(const target& ptarget) const void compile(const target& ptarget) const
{ {
call(&migraphx_program_compile, this->get_handle_ptr(), ptarget.get_handle_ptr(), nullptr); call(&migraphx_program_compile, this->get_handle_ptr(), ptarget.get_handle_ptr(), nullptr);
} }
/// Return the shapes for the input parameters
program_parameter_shapes get_parameter_shapes() const program_parameter_shapes get_parameter_shapes() const
{ {
migraphx_program_parameter_shapes_t pout; migraphx_program_parameter_shapes_t pout;
...@@ -495,6 +524,7 @@ struct program : MIGRAPHX_HANDLE_BASE(program) ...@@ -495,6 +524,7 @@ struct program : MIGRAPHX_HANDLE_BASE(program)
return program_parameter_shapes(pout, own{}); return program_parameter_shapes(pout, own{});
} }
/// Get the shapes of all the outputs returned by this program
shapes get_output_shapes() const shapes get_output_shapes() const
{ {
migraphx_shapes_t pout; migraphx_shapes_t pout;
...@@ -502,6 +532,7 @@ struct program : MIGRAPHX_HANDLE_BASE(program) ...@@ -502,6 +532,7 @@ struct program : MIGRAPHX_HANDLE_BASE(program)
return shapes(pout, own{}); return shapes(pout, own{});
} }
/// Run the program using the inputs passed in
arguments eval(const program_parameters& pparams) const arguments eval(const program_parameters& pparams) const
{ {
migraphx_arguments_t pout; migraphx_arguments_t pout;
...@@ -553,32 +584,38 @@ struct operation : MIGRAPHX_HANDLE_BASE(operation) ...@@ -553,32 +584,38 @@ struct operation : MIGRAPHX_HANDLE_BASE(operation)
} }
}; };
/// Load a saved migraphx program from a file
inline program load(const char* filename, migraphx_file_options options) inline program load(const char* filename, migraphx_file_options options)
{ {
return program(make<migraphx_program>(&migraphx_load, filename, &options), own{}); return program(make<migraphx_program>(&migraphx_load, filename, &options), own{});
} }
/// Load a saved migraphx program from a file
inline program load(const char* filename) inline program load(const char* filename)
{ {
return program(make<migraphx_program>(&migraphx_load, filename, nullptr), own{}); return program(make<migraphx_program>(&migraphx_load, filename, nullptr), own{});
} }
/// Save a program to a file
inline void save(const program& p, const char* filename, migraphx_file_options options) inline void save(const program& p, const char* filename, migraphx_file_options options)
{ {
call(&migraphx_save, p.get_handle_ptr(), filename, &options); call(&migraphx_save, p.get_handle_ptr(), filename, &options);
} }
/// Save a program to a file
inline void save(const program& p, const char* filename) inline void save(const program& p, const char* filename)
{ {
call(&migraphx_save, p.get_handle_ptr(), filename, nullptr); call(&migraphx_save, p.get_handle_ptr(), filename, nullptr);
} }
/// Options for parsing onnx options
struct onnx_options : MIGRAPHX_HANDLE_BASE(onnx_options) struct onnx_options : MIGRAPHX_HANDLE_BASE(onnx_options)
{ {
onnx_options() { this->make_handle(&migraphx_onnx_options_create); } onnx_options() { this->make_handle(&migraphx_onnx_options_create); }
onnx_options(migraphx_onnx_options* p, own) { this->set_handle(p, own{}); } onnx_options(migraphx_onnx_options* p, own) { this->set_handle(p, own{}); }
/// Make onnx parser treat an inputs with a certain dimensions
void set_input_parameter_shape(const std::string& name, std::vector<std::size_t> dim) void set_input_parameter_shape(const std::string& name, std::vector<std::size_t> dim)
{ {
call(&migraphx_onnx_options_set_input_parameter_shape, call(&migraphx_onnx_options_set_input_parameter_shape,
...@@ -588,18 +625,21 @@ struct onnx_options : MIGRAPHX_HANDLE_BASE(onnx_options) ...@@ -588,18 +625,21 @@ struct onnx_options : MIGRAPHX_HANDLE_BASE(onnx_options)
dim.size()); dim.size());
} }
/// When there is a dimension parameter than use this default value
void set_default_dim_value(unsigned int value) void set_default_dim_value(unsigned int value)
{ {
call(&migraphx_onnx_options_set_default_dim_value, this->get_handle_ptr(), value); call(&migraphx_onnx_options_set_default_dim_value, this->get_handle_ptr(), value);
} }
}; };
/// Parse an onnx file into a migraphx program
inline program parse_onnx(const char* filename, const migraphx::onnx_options& options) inline program parse_onnx(const char* filename, const migraphx::onnx_options& options)
{ {
return program(make<migraphx_program>(&migraphx_parse_onnx, filename, options.get_handle_ptr()), return program(make<migraphx_program>(&migraphx_parse_onnx, filename, options.get_handle_ptr()),
own{}); own{});
} }
/// Parse an onnx file into a migraphx program
inline program parse_onnx(const char* filename) inline program parse_onnx(const char* filename)
{ {
migraphx::onnx_options options; migraphx::onnx_options options;
...@@ -607,6 +647,7 @@ inline program parse_onnx(const char* filename) ...@@ -607,6 +647,7 @@ inline program parse_onnx(const char* filename)
own{}); own{});
} }
/// Parse a buffer of memory as an onnx file
inline program inline program
parse_onnx_buffer(const void* data, size_t size, const migraphx::onnx_options& options) parse_onnx_buffer(const void* data, size_t size, const migraphx::onnx_options& options)
{ {
...@@ -615,6 +656,7 @@ parse_onnx_buffer(const void* data, size_t size, const migraphx::onnx_options& o ...@@ -615,6 +656,7 @@ parse_onnx_buffer(const void* data, size_t size, const migraphx::onnx_options& o
own{}); own{});
} }
/// Parse a buffer of memory as an onnx file
inline program parse_onnx_buffer(const void* data, size_t size) inline program parse_onnx_buffer(const void* data, size_t size)
{ {
migraphx::onnx_options options; migraphx::onnx_options options;
...@@ -623,6 +665,7 @@ inline program parse_onnx_buffer(const void* data, size_t size) ...@@ -623,6 +665,7 @@ inline program parse_onnx_buffer(const void* data, size_t size)
own{}); own{});
} }
/// Parse a buffer of memory as an onnx file
inline program parse_onnx_buffer(const std::string& buffer, const migraphx::onnx_options& options) inline program parse_onnx_buffer(const std::string& buffer, const migraphx::onnx_options& options)
{ {
return program( return program(
...@@ -631,6 +674,7 @@ inline program parse_onnx_buffer(const std::string& buffer, const migraphx::onnx ...@@ -631,6 +674,7 @@ inline program parse_onnx_buffer(const std::string& buffer, const migraphx::onnx
own{}); own{});
} }
/// Parse a buffer of memory as an onnx file
inline program parse_onnx_buffer(const std::string& buffer) inline program parse_onnx_buffer(const std::string& buffer)
{ {
migraphx::onnx_options options; migraphx::onnx_options options;
...@@ -652,17 +696,19 @@ struct quantize_op_names : MIGRAPHX_HANDLE_BASE(quantize_op_names) ...@@ -652,17 +696,19 @@ struct quantize_op_names : MIGRAPHX_HANDLE_BASE(quantize_op_names)
} }
}; };
// fp16 quantization apis /// Quantize program to use fp16
inline void quantize_fp16(const program& prog, const quantize_op_names& names) inline void quantize_fp16(const program& prog, const quantize_op_names& names)
{ {
call(&migraphx_quantize_fp16_with_op_names, prog.get_handle_ptr(), names.get_handle_ptr()); call(&migraphx_quantize_fp16_with_op_names, prog.get_handle_ptr(), names.get_handle_ptr());
} }
/// Quantize program to use fp16
inline void quantize_fp16(const program& prog) inline void quantize_fp16(const program& prog)
{ {
call(&migraphx_quantize_fp16, prog.get_handle_ptr()); call(&migraphx_quantize_fp16, prog.get_handle_ptr());
} }
/// Options to be passed when quantizing for int8
struct quantize_int8_options : MIGRAPHX_HANDLE_BASE(quantize_int8_options) struct quantize_int8_options : MIGRAPHX_HANDLE_BASE(quantize_int8_options)
{ {
quantize_int8_options() { this->make_handle(&migraphx_quantize_int8_options_create); } quantize_int8_options() { this->make_handle(&migraphx_quantize_int8_options_create); }
...@@ -674,11 +720,13 @@ struct quantize_int8_options : MIGRAPHX_HANDLE_BASE(quantize_int8_options) ...@@ -674,11 +720,13 @@ struct quantize_int8_options : MIGRAPHX_HANDLE_BASE(quantize_int8_options)
this->set_handle(p, borrow{}); this->set_handle(p, borrow{});
} }
/// Add an operator that should be quantized
void add_op_name(const std::string& name) void add_op_name(const std::string& name)
{ {
call(&migraphx_quantize_int8_options_add_op_name, this->get_handle_ptr(), name.c_str()); call(&migraphx_quantize_int8_options_add_op_name, this->get_handle_ptr(), name.c_str());
} }
/// Add calibrartion data to be used for quantizing
void add_calibration_data(const program_parameters& pp) void add_calibration_data(const program_parameters& pp)
{ {
call(&migraphx_quantize_int8_options_add_calibration_data, call(&migraphx_quantize_int8_options_add_calibration_data,
...@@ -687,6 +735,7 @@ struct quantize_int8_options : MIGRAPHX_HANDLE_BASE(quantize_int8_options) ...@@ -687,6 +735,7 @@ struct quantize_int8_options : MIGRAPHX_HANDLE_BASE(quantize_int8_options)
} }
}; };
/// Quantize program to use int8
inline void inline void
quantize_int8(const program& prog, const target& ptarget, const quantize_int8_options& options) quantize_int8(const program& prog, const target& ptarget, const quantize_int8_options& options)
{ {
...@@ -696,7 +745,9 @@ quantize_int8(const program& prog, const target& ptarget, const quantize_int8_op ...@@ -696,7 +745,9 @@ quantize_int8(const program& prog, const target& ptarget, const quantize_int8_op
options.get_handle_ptr()); options.get_handle_ptr());
} }
#ifndef DOXYGEN
} // namespace api } // namespace api
#endif
} // namespace migraphx } // namespace migraphx
#endif #endif
...@@ -7,6 +7,10 @@ namespace migraphx { ...@@ -7,6 +7,10 @@ namespace migraphx {
#define MIGRAPHX_INLINE_NS version_1 #define MIGRAPHX_INLINE_NS version_1
#endif #endif
#ifdef DOXYGEN
#define MIGRAPHX_INLINE_NS internal
#endif
#ifdef MIGRAPHX_USE_CLANG_TIDY #ifdef MIGRAPHX_USE_CLANG_TIDY
#define MIGRAPHX_TIDY_CONST const #define MIGRAPHX_TIDY_CONST const
#else #else
......
...@@ -34,19 +34,29 @@ typedef enum { ...@@ -34,19 +34,29 @@ typedef enum {
} migraphx_status; } migraphx_status;
#define MIGRAPHX_SHAPE_GENERATE_ENUM_TYPES(x, t) migraphx_shape_##x, #define MIGRAPHX_SHAPE_GENERATE_ENUM_TYPES(x, t) migraphx_shape_##x,
/// An enum to represent the different data type inputs
typedef enum { typedef enum {
MIGRAPHX_SHAPE_VISIT_TYPES(MIGRAPHX_SHAPE_GENERATE_ENUM_TYPES) MIGRAPHX_SHAPE_VISIT_TYPES(MIGRAPHX_SHAPE_GENERATE_ENUM_TYPES)
} migraphx_shape_datatype_t; } migraphx_shape_datatype_t;
#undef MIGRAPHX_SHAPE_GENERATE_ENUM_TYPES #undef MIGRAPHX_SHAPE_GENERATE_ENUM_TYPES
/// Options to be passed when compiling
typedef struct typedef struct
{ {
/// For targets with offloaded memory(such as the gpu), this will insert
/// instructions during compilation to copy the input parameters to the
/// offloaded memory and to copy the final result from the offloaded
/// memory back to main memory.
bool offload_copy; bool offload_copy;
/// Optimize math functions to use faster approximate versions. There may
/// be slight accuracy degredation when enabled.
bool fast_math; bool fast_math;
} migraphx_compile_options; } migraphx_compile_options;
/// Options for saving and loading files
typedef struct typedef struct
{ {
/// Format to be used for file. It can either be json or msgpack
const char* format; const char* format;
} migraphx_file_options; } migraphx_file_options;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment