Commit 2f268bc2 authored by Paul's avatar Paul
Browse files

Merge branch 'develop' into mlir-c

parents f75c5a38 aa7ff911
...@@ -4,7 +4,7 @@ CheckOptions: ...@@ -4,7 +4,7 @@ CheckOptions:
- key: bugprone-unused-return-value.CheckedFunctions - key: bugprone-unused-return-value.CheckedFunctions
value: '::std::async;::std::launder;::std::remove;::std::remove_if;::std::unique;::std::unique_ptr::release;::std::basic_string::empty;::std::vector::empty;::std::find;::std::find_if;::std::find_if_not;::std::all_of;::std::any_of;::std::none_of;::std::count;::std::count_if;::std::mismatch;::std::find_end;::std::find_first_of;::std::adjacent_find;::std::search;::std::search_n;::std::nth_element;::std::lower_bound;::std::upper_bound;::std::binary_search;::std::equal_range;::std::max;::std::max_element;::std::min;::std::min_element;::std::minmax;::std::minmax_element;::std::equal;::std::lexicographical_compare;::std::accumulate;::std::inner_product' value: '::std::async;::std::launder;::std::remove;::std::remove_if;::std::unique;::std::unique_ptr::release;::std::basic_string::empty;::std::vector::empty;::std::find;::std::find_if;::std::find_if_not;::std::all_of;::std::any_of;::std::none_of;::std::count;::std::count_if;::std::mismatch;::std::find_end;::std::find_first_of;::std::adjacent_find;::std::search;::std::search_n;::std::nth_element;::std::lower_bound;::std::upper_bound;::std::binary_search;::std::equal_range;::std::max;::std::max_element;::std::min;::std::min_element;::std::minmax;::std::minmax_element;::std::equal;::std::lexicographical_compare;::std::accumulate;::std::inner_product'
- key: cppcoreguidelines-macro-usage.AllowedRegexp - key: cppcoreguidelines-macro-usage.AllowedRegexp
value: 'DEBUG|FALLTHROUGH|STRINGIZE|_HAS_|_THROW|_REQUIRES|_DECLARE_|_VISIT_|_REGISTER_|_GENERATE_|_DETAIL_|_TIDY_|_MANAGE_PTR|_MATCHER|DEVICE_SHARED|_WORKAROUND_' value: 'DEBUG|ASSERT|ASSUME|UNREACHABLE|FALLTHROUGH|DEPRECATED|STRINGIZE|_HAS_|_THROW|_REQUIRES|_DECLARE_|_VISIT_|_REGISTER_|_GENERATE_|_DETAIL_|_TIDY_|_MANAGE_PTR|_MATCHER|DEVICE_SHARED|_WORKAROUND_'
- key: modernize-loop-convert.MinConfidence - key: modernize-loop-convert.MinConfidence
value: risky value: risky
- key: modernize-loop-convert.NamingStyle - key: modernize-loop-convert.NamingStyle
......
...@@ -15,7 +15,8 @@ jobs: ...@@ -15,7 +15,8 @@ jobs:
steps: steps:
- name: Free space - name: Free space
run: sudo rm -rf /usr/local/android /usr/share/dotnet /usr/local/share/boost /opt/ghc /usr/local/share/chrom* /usr/share/swift /usr/local/julia* run: sudo rm -rf /usr/local/android /usr/share/dotnet /usr/local/share/boost /opt/ghc /usr/local/share/chrom* /usr/share/swift /usr/local/julia* /usr/local/lib/android
- uses: actions/checkout@v2 - uses: actions/checkout@v2
# In this step, this action saves a list of existing images, # In this step, this action saves a list of existing images,
...@@ -63,7 +64,7 @@ jobs: ...@@ -63,7 +64,7 @@ jobs:
steps: steps:
- name: Free space - name: Free space
run: sudo rm -rf /usr/local/android /usr/share/dotnet /usr/local/share/boost /opt/ghc /usr/local/share/chrom* /usr/share/swift /usr/local/julia* run: sudo rm -rf /usr/local/android /usr/share/dotnet /usr/local/share/boost /opt/ghc /usr/local/share/chrom* /usr/share/swift /usr/local/julia* /usr/local/lib/android
- uses: actions/checkout@v2 - uses: actions/checkout@v2
# In this step, this action saves a list of existing images, # In this step, this action saves a list of existing images,
...@@ -108,7 +109,7 @@ jobs: ...@@ -108,7 +109,7 @@ jobs:
steps: steps:
- name: Free space - name: Free space
run: sudo rm -rf /usr/local/android /usr/share/dotnet /usr/local/share/boost /opt/ghc /usr/local/share/chrom* /usr/share/swift /usr/local/julia* run: sudo rm -rf /usr/local/android /usr/share/dotnet /usr/local/share/boost /opt/ghc /usr/local/share/chrom* /usr/share/swift /usr/local/julia* /usr/local/lib/android
- uses: actions/checkout@v2 - uses: actions/checkout@v2
# In this step, this action saves a list of existing images, # In this step, this action saves a list of existing images,
...@@ -143,7 +144,7 @@ jobs: ...@@ -143,7 +144,7 @@ jobs:
steps: steps:
- name: Free space - name: Free space
run: sudo rm -rf /usr/local/android /usr/share/dotnet /usr/local/share/boost /opt/ghc /usr/local/share/chrom* /usr/share/swift /usr/local/julia* run: sudo rm -rf /usr/local/android /usr/share/dotnet /usr/local/share/boost /opt/ghc /usr/local/share/chrom* /usr/share/swift /usr/local/julia* /usr/local/lib/android
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v2 uses: actions/setup-python@v2
...@@ -182,7 +183,7 @@ jobs: ...@@ -182,7 +183,7 @@ jobs:
steps: steps:
- name: Free space - name: Free space
run: sudo rm -rf /usr/local/android /usr/share/dotnet /usr/local/share/boost /opt/ghc /usr/local/share/chrom* /usr/share/swift /usr/local/julia* run: sudo rm -rf /usr/local/android /usr/share/dotnet /usr/local/share/boost /opt/ghc /usr/local/share/chrom* /usr/share/swift /usr/local/julia* /usr/local/lib/android
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v2 uses: actions/setup-python@v2
......
...@@ -42,7 +42,7 @@ find_package(nlohmann_json 3.8.0 REQUIRED) ...@@ -42,7 +42,7 @@ find_package(nlohmann_json 3.8.0 REQUIRED)
include(ROCMSetupVersion) include(ROCMSetupVersion)
rocm_setup_version(VERSION 2.2) rocm_setup_version(VERSION 2.3)
set(MIGRAPHX_SO_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) set(MIGRAPHX_SO_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR})
option( BUILD_SHARED_LIBS "Build as a shared library" ON ) option( BUILD_SHARED_LIBS "Build as a shared library" ON )
...@@ -93,11 +93,14 @@ rocm_enable_clang_tidy( ...@@ -93,11 +93,14 @@ rocm_enable_clang_tidy(
modernize-* modernize-*
performance-* performance-*
readability-* readability-*
-bugprone-signed-char-misuse -bugprone-easily-swappable-parameters
-bugprone-implicit-widening-of-multiplication-result
-bugprone-macro-parentheses -bugprone-macro-parentheses
-bugprone-signed-char-misuse
# Disable the aliased reserved identifiers # Disable the aliased reserved identifiers
-cert-dcl37-c -cert-dcl37-c
-cert-dcl51-cpp -cert-dcl51-cpp
-cert-err33-c
-cert-str34-c -cert-str34-c
# Disable all alpha checks by default # Disable all alpha checks by default
-clang-analyzer-alpha* -clang-analyzer-alpha*
...@@ -127,6 +130,7 @@ rocm_enable_clang_tidy( ...@@ -127,6 +130,7 @@ rocm_enable_clang_tidy(
-cppcoreguidelines-pro-type-union-access -cppcoreguidelines-pro-type-union-access
-cppcoreguidelines-pro-type-vararg -cppcoreguidelines-pro-type-vararg
-cppcoreguidelines-special-member-functions -cppcoreguidelines-special-member-functions
-cppcoreguidelines-virtual-class-destructor
-google-readability-* -google-readability-*
-google-runtime-int -google-runtime-int
-google-runtime-references -google-runtime-references
...@@ -144,8 +148,10 @@ rocm_enable_clang_tidy( ...@@ -144,8 +148,10 @@ rocm_enable_clang_tidy(
-readability-convert-member-functions-to-static -readability-convert-member-functions-to-static
-readability-else-after-return -readability-else-after-return
-readability-function-cognitive-complexity -readability-function-cognitive-complexity
-readability-identifier-length
-readability-named-parameter -readability-named-parameter
-readability-redundant-string-init -readability-redundant-string-init
-readability-suspicious-call-argument
-readability-uppercase-literal-suffix -readability-uppercase-literal-suffix
-*-avoid-c-arrays -*-avoid-c-arrays
-*-explicit-constructor -*-explicit-constructor
...@@ -178,7 +184,7 @@ rocm_enable_cppcheck( ...@@ -178,7 +184,7 @@ rocm_enable_cppcheck(
style style
performance performance
portability portability
SUPPRESS SUPPRESS
ConfigurationNotChecked ConfigurationNotChecked
unmatchedSuppression unmatchedSuppression
unusedFunction unusedFunction
...@@ -197,6 +203,8 @@ rocm_enable_cppcheck( ...@@ -197,6 +203,8 @@ rocm_enable_cppcheck(
useSmartPointer:*make_shared_array.hpp useSmartPointer:*make_shared_array.hpp
constParameter:*src/targets/gpu/*.cpp constParameter:*src/targets/gpu/*.cpp
constParameter:*src/targets/gpu/*.hpp constParameter:*src/targets/gpu/*.hpp
# Suppress mlir_conv.cpp since this file will be deleted
*:*src/targets/gpu/mlir_conv.cpp
FORCE FORCE
INCONCLUSIVE INCONCLUSIVE
RULE_FILE RULE_FILE
...@@ -216,6 +224,7 @@ rocm_enable_cppcheck( ...@@ -216,6 +224,7 @@ rocm_enable_cppcheck(
CPPCHECK=1 CPPCHECK=1
__device__= __device__=
__host__= __host__=
__global__=
) )
enable_testing() enable_testing()
......
FROM ubuntu:18.04 FROM ubuntu:20.04
ARG PREFIX=/usr/local ARG PREFIX=/usr/local
...@@ -6,7 +6,7 @@ ARG PREFIX=/usr/local ...@@ -6,7 +6,7 @@ ARG PREFIX=/usr/local
RUN dpkg --add-architecture i386 RUN dpkg --add-architecture i386
# Add rocm repository # Add rocm repository
RUN sh -c 'echo deb [arch=amd64 trusted=yes] http://repo.radeon.com/rocm/apt/4.5/ ubuntu main > /etc/apt/sources.list.d/rocm.list' RUN sh -c 'echo deb [arch=amd64 trusted=yes] http://repo.radeon.com/rocm/apt/5.0.2/ ubuntu main > /etc/apt/sources.list.d/rocm.list'
# Install dependencies # Install dependencies
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-unauthenticated \ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-unauthenticated \
...@@ -16,16 +16,12 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --allow- ...@@ -16,16 +16,12 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-
cmake \ cmake \
curl \ curl \
doxygen \ doxygen \
g++-5 \
g++-7 \ g++-7 \
gdb \ gdb \
git \ git \
lcov \ lcov \
locales \ locales \
pkg-config \ pkg-config \
python \
python-dev \
python-pip \
python3 \ python3 \
python3-dev \ python3-dev \
python3-pip \ python3-pip \
......
...@@ -39,6 +39,8 @@ function(generate_embed_source EMBED_NAME) ...@@ -39,6 +39,8 @@ function(generate_embed_source EMBED_NAME)
file(WRITE "${PARSE_HEADER}" " file(WRITE "${PARSE_HEADER}" "
#include <unordered_map> #include <unordered_map>
#include <string>
#include <utility>
const std::unordered_map<std::string, std::pair<const char*,const char*>>& ${EMBED_NAME}(); const std::unordered_map<std::string, std::pair<const char*,const char*>>& ${EMBED_NAME}();
") ")
...@@ -94,5 +96,6 @@ function(add_embed_library EMBED_NAME) ...@@ -94,5 +96,6 @@ function(add_embed_library EMBED_NAME)
generate_embed_source(${EMBED_NAME} SRC ${SRC_FILE} HEADER ${HEADER_FILE} OBJECTS ${OUTPUT_FILES} SYMBOLS ${SYMBOLS}) generate_embed_source(${EMBED_NAME} SRC ${SRC_FILE} HEADER ${HEADER_FILE} OBJECTS ${OUTPUT_FILES} SYMBOLS ${SYMBOLS})
add_library(${EMBED_NAME} STATIC ${OUTPUT_FILES} "${SRC_FILE}") add_library(${EMBED_NAME} STATIC ${OUTPUT_FILES} "${SRC_FILE}")
target_include_directories(${EMBED_NAME} PUBLIC "${EMBED_DIR}/include") target_include_directories(${EMBED_NAME} PUBLIC "${EMBED_DIR}/include")
target_compile_options(${EMBED_NAME} PRIVATE -Wno-reserved-identifier)
set_target_properties(${EMBED_NAME} PROPERTIES POSITION_INDEPENDENT_CODE On) set_target_properties(${EMBED_NAME} PROPERTIES POSITION_INDEPENDENT_CODE On)
endfunction() endfunction()
...@@ -96,6 +96,7 @@ else() ...@@ -96,6 +96,7 @@ else()
-Wno-gnu-zero-variadic-macro-arguments -Wno-gnu-zero-variadic-macro-arguments
-Wno-missing-prototypes -Wno-missing-prototypes
-Wno-nested-anon-types -Wno-nested-anon-types
-Wno-option-ignored
-Wno-padded -Wno-padded
-Wno-shorten-64-to-32 -Wno-shorten-64-to-32
-Wno-sign-conversion -Wno-sign-conversion
......
...@@ -54,6 +54,10 @@ function(py_add_module NAME) ...@@ -54,6 +54,10 @@ function(py_add_module NAME)
endfunction() endfunction()
set(PYTHON_SEARCH_VERSIONS 2.7 3.5 3.6 3.7 3.8 3.9) set(PYTHON_SEARCH_VERSIONS 2.7 3.5 3.6 3.7 3.8 3.9)
set(PYTHON_DISABLE_VERSIONS "" CACHE STRING "")
foreach(PYTHON_DISABLE_VERSION ${PYTHON_DISABLE_VERSIONS})
list(REMOVE_ITEM PYTHON_SEARCH_VERSIONS ${PYTHON_DISABLE_VERSION})
endforeach()
set(_PYTHON_VERSIONS) set(_PYTHON_VERSIONS)
foreach(PYTHON_VERSION ${PYTHON_SEARCH_VERSIONS}) foreach(PYTHON_VERSION ${PYTHON_SEARCH_VERSIONS})
......
...@@ -2,6 +2,6 @@ pfultz2/rocm-recipes ...@@ -2,6 +2,6 @@ pfultz2/rocm-recipes
facebook/zstd@v1.4.5 -X subdir -DCMAKE_DIR=build/cmake facebook/zstd@v1.4.5 -X subdir -DCMAKE_DIR=build/cmake
ccache@v4.1 ccache@v4.1
pcre,pfultz2/pcre@8.45 -H sha256:d6f7182602a775a7d500a0cedca6449af0400c6493951513046d17615ed0bf11 pcre,pfultz2/pcre@8.45 -H sha256:d6f7182602a775a7d500a0cedca6449af0400c6493951513046d17615ed0bf11
danmar/cppcheck@2.6 -DHAVE_RULES=1 danmar/cppcheck@2.8 -DHAVE_RULES=1
RadeonOpenCompute/rocm-cmake@1ebf7e7bc61bb5e949c171562b421264065230a7 --build RadeonOpenCompute/rocm-cmake@1ebf7e7bc61bb5e949c171562b421264065230a7 --build
-f requirements.txt -f requirements.txt
...@@ -146,6 +146,13 @@ module ...@@ -146,6 +146,13 @@ module
:param list[module] mod_args: optional list of module arguments to the operator. :param list[module] mod_args: optional list of module arguments to the operator.
:rtype instruction :rtype instruction
.. py:method:: add_literal(data)
Adds constant or literal data of provided shape into the module from python buffer which includes numpy array.
:param py::buffer data: Python buffer or numpy array
:rtype instruction
.. py:method:: add_parameter(name, shape) .. py:method:: add_parameter(name, shape)
Adds a parameter to the module with provided name and shape. Adds a parameter to the module with provided name and shape.
......
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"!wget -nc https://github.com/onnx/models/raw/master/text/machine_comprehension/bert-squad/model/bertsquad-10.onnx" "!wget -nc https://github.com/onnx/models/raw/main/text/machine_comprehension/bert-squad/model/bertsquad-10.onnx"
] ]
}, },
{ {
......
...@@ -23,7 +23,7 @@ unzip uncased_L-12_H-768_A-12.zip ...@@ -23,7 +23,7 @@ unzip uncased_L-12_H-768_A-12.zip
``` ```
5) Get BERT ONNX model (bertsquad-10.onnx): 5) Get BERT ONNX model (bertsquad-10.onnx):
``` ```
wget https://github.com/onnx/models/raw/master/text/machine_comprehension/bert-squad/model/bertsquad-10.onnx wget https://github.com/onnx/models/raw/main/text/machine_comprehension/bert-squad/model/bertsquad-10.onnx
``` ```
6) Run the inference, it will compile and run the model on three questions and small data provided in `inputs.json`: 6) Run the inference, it will compile and run the model on three questions and small data provided in `inputs.json`:
``` ```
......
tensorflow==2.5.3 tensorflow==2.7.2
onnxruntime onnxruntime
tokenizers tokenizers
\ No newline at end of file
...@@ -106,8 +106,8 @@ ...@@ -106,8 +106,8 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"if not path.exists(\"./resnet50.onnx\"):\n", "if not path.exists(\"./resnet50.onnx\"):\n",
" !wget https://github.com/onnx/models/blob/master/vision/classification/resnet/model/resnet50-v2-7.onnx?raw=true\n", " !wget https://github.com/onnx/models/raw/main/vision/classification/resnet/model/resnet50-v2-7.onnx",
" !mv 'resnet50-v2-7.onnx?raw=true' resnet50.onnx" " !mv resnet50-v2-7.onnx resnet50.onnx"
] ]
}, },
{ {
......
...@@ -24,16 +24,16 @@ ...@@ -24,16 +24,16 @@
"import os.path\n", "import os.path\n",
"\n", "\n",
"if not os.path.exists(\"./utilities/coco.names\"):\n", "if not os.path.exists(\"./utilities/coco.names\"):\n",
" !wget https://github.com/onnx/models/raw/master/vision/object_detection_segmentation/yolov4/dependencies/coco.names -P ./utilities/\n", " !wget https://github.com/onnx/models/raw/main/vision/object_detection_segmentation/yolov4/dependencies/coco.names -P ./utilities/\n",
"if not os.path.exists(\"./utilities/yolov4_anchors.txt\"):\n", "if not os.path.exists(\"./utilities/yolov4_anchors.txt\"):\n",
" !wget https://github.com/onnx/models/raw/master/vision/object_detection_segmentation/yolov4/dependencies/yolov4_anchors.txt -P ./utilities/\n", " !wget https://github.com/onnx/models/raw/main/vision/object_detection_segmentation/yolov4/dependencies/yolov4_anchors.txt -P ./utilities/\n",
"if not os.path.exists(\"./utilities/input.jpg\"):\n", "if not os.path.exists(\"./utilities/input.jpg\"):\n",
" # The image used is from the COCO dataset (https://cocodataset.org/#explore)\n", " # The image used is from the COCO dataset (https://cocodataset.org/#explore)\n",
" # Other images can be tested by replacing the link below\n", " # Other images can be tested by replacing the link below\n",
" image_link = \"https://farm3.staticflickr.com/2009/2306189268_88cc86b30f_z.jpg\"\n", " image_link = \"https://farm3.staticflickr.com/2009/2306189268_88cc86b30f_z.jpg\"\n",
" !wget -O ./utilities/input.jpg $image_link\n", " !wget -O ./utilities/input.jpg $image_link\n",
"if not os.path.exists(\"./utilities/yolov4.onnx\"):\n", "if not os.path.exists(\"./utilities/yolov4.onnx\"):\n",
" !wget https://github.com/onnx/models/raw/master/vision/object_detection_segmentation/yolov4/model/yolov4.onnx -P ./utilities/" " !wget https://github.com/onnx/models/raw/main/vision/object_detection_segmentation/yolov4/model/yolov4.onnx -P ./utilities/"
] ]
}, },
{ {
......
FROM ubuntu:18.04 FROM ubuntu:20.04
ARG PREFIX=/usr/local ARG PREFIX=/usr/local
...@@ -6,7 +6,7 @@ ARG PREFIX=/usr/local ...@@ -6,7 +6,7 @@ ARG PREFIX=/usr/local
RUN dpkg --add-architecture i386 RUN dpkg --add-architecture i386
# Add rocm repository # Add rocm repository
RUN sh -c 'echo deb [arch=amd64 trusted=yes] http://repo.radeon.com/rocm/apt/4.5/ ubuntu main > /etc/apt/sources.list.d/rocm.list' RUN sh -c 'echo deb [arch=amd64 trusted=yes] http://repo.radeon.com/rocm/apt/5.0.2/ ubuntu main > /etc/apt/sources.list.d/rocm.list'
# Install dependencies # Install dependencies
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-unauthenticated \ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-unauthenticated \
...@@ -20,9 +20,6 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --allow- ...@@ -20,9 +20,6 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-
git \ git \
lcov \ lcov \
pkg-config \ pkg-config \
python \
python-dev \
python-pip \
python3 \ python3 \
python3-dev \ python3-dev \
python3-pip \ python3-pip \
......
...@@ -109,6 +109,7 @@ register_migraphx_ops( ...@@ -109,6 +109,7 @@ register_migraphx_ops(
flatten flatten
floor floor
gather gather
gathernd
get_tuple_elem get_tuple_elem
greater greater
gru gru
...@@ -162,10 +163,12 @@ register_migraphx_ops( ...@@ -162,10 +163,12 @@ register_migraphx_ops(
round round
rsqrt rsqrt
scalar scalar
scatter scatter_add
scatternd_none scatter_mul
scatter_none
scatternd_add scatternd_add
scatternd_mul scatternd_mul
scatternd_none
sigmoid sigmoid
sign sign
sinh sinh
......
...@@ -8,9 +8,9 @@ ...@@ -8,9 +8,9 @@
namespace migraphx { namespace migraphx {
inline namespace MIGRAPHX_INLINE_NS { inline namespace MIGRAPHX_INLINE_NS {
void adjust_allocation::apply(module& p) const void adjust_allocation::apply(module& m) const
{ {
for(auto ins : iterator_for(p)) for(auto ins : iterator_for(m))
{ {
// skip instruction with no input // skip instruction with no input
if(ins->inputs().empty()) if(ins->inputs().empty())
...@@ -27,13 +27,13 @@ void adjust_allocation::apply(module& p) const ...@@ -27,13 +27,13 @@ void adjust_allocation::apply(module& p) const
// of the instruction, reallocate and replace the previous one // of the instruction, reallocate and replace the previous one
if(alias_ins->get_shape() == ins->get_shape()) if(alias_ins->get_shape() == ins->get_shape())
continue; continue;
auto alloc_ins = p.insert_instruction(ins, model.allocate(ins->get_shape())); auto alloc_ins = m.insert_instruction(ins, model.allocate(ins->get_shape()));
p.replace_instruction(alias_ins, alloc_ins); m.replace_instruction(alias_ins, alloc_ins);
// If the memory is an output parameter then copy the memory to the parameter // If the memory is an output parameter then copy the memory to the parameter
if(alias_ins->name() == "@param") if(alias_ins->name() == "@param")
{ {
auto copy = p.insert_instruction(std::next(ins), make_op(model.copy()), ins, alias_ins); auto copy = m.insert_instruction(std::next(ins), make_op(model.copy()), ins, alias_ins);
auto tail = range(std::next(copy), p.end()); auto tail = range(std::next(copy), m.end());
for(auto i : iterator_for(tail)) for(auto i : iterator_for(tail))
{ {
if(contains(i->inputs(), ins)) if(contains(i->inputs(), ins))
......
...@@ -14,31 +14,31 @@ bool happens_before(const std::vector<std::size_t>& e1, const std::vector<std::s ...@@ -14,31 +14,31 @@ bool happens_before(const std::vector<std::size_t>& e1, const std::vector<std::s
not std::equal(e1.begin(), e1.end(), e2.begin(), e2.end(), std::greater_equal<>{}); not std::equal(e1.begin(), e1.end(), e2.begin(), e2.end(), std::greater_equal<>{});
} }
std::vector<stream_race> analyze_streams(const module& p, const stream_model& m) std::vector<stream_race> analyze_streams(const module& m, const stream_model& strmm)
{ {
using vector_clock = std::vector<std::size_t>; using vector_clock = std::vector<std::size_t>;
std::vector<stream_race> races; std::vector<stream_race> races;
auto nstream = m.get_nstream(); auto nstream = strmm.get_nstream();
std::vector<vector_clock> vclock(nstream, vector_clock(nstream)); std::vector<vector_clock> vclock(nstream, vector_clock(nstream));
std::unordered_map<instruction_ref, vector_clock> timestamp; std::unordered_map<instruction_ref, vector_clock> timestamp;
std::unordered_map<std::size_t, vector_clock> events; std::unordered_map<std::size_t, vector_clock> events;
for(auto ins : iterator_for(p)) for(auto ins : iterator_for(m))
{ {
if(not m.has_stream(ins)) if(not strmm.has_stream(ins))
continue; continue;
std::size_t s = m.get_stream(ins); std::size_t s = strmm.get_stream(ins);
assert(s < nstream); assert(s < nstream);
assert(vclock.size() == nstream); assert(vclock.size() == nstream);
assert(vclock[s].size() == nstream); assert(vclock[s].size() == nstream);
if(m.is_record(ins)) if(strmm.is_record(ins))
{ {
vclock[s][s]++; vclock[s][s]++;
auto event = m.get_event_id(ins); auto event = strmm.get_event_id(ins);
events[event] = vclock[s]; events[event] = vclock[s];
} }
else if(m.is_wait(ins)) else if(strmm.is_wait(ins))
{ {
auto event = m.get_event_id(ins); auto event = strmm.get_event_id(ins);
if(not contains(events, event)) if(not contains(events, event))
MIGRAPHX_THROW("Event is waited on before being recorded: " + MIGRAPHX_THROW("Event is waited on before being recorded: " +
std::to_string(event)); std::to_string(event));
...@@ -57,21 +57,21 @@ std::vector<stream_race> analyze_streams(const module& p, const stream_model& m) ...@@ -57,21 +57,21 @@ std::vector<stream_race> analyze_streams(const module& p, const stream_model& m)
} }
timestamp[ins] = vclock[s]; timestamp[ins] = vclock[s];
} }
for(auto ins : iterator_for(p)) for(auto ins : iterator_for(m))
{ {
if(not m.has_stream(ins)) if(not strmm.has_stream(ins))
continue; continue;
if(ins->inputs().empty()) if(ins->inputs().empty())
continue; continue;
std::size_t s = m.get_stream(ins); std::size_t s = strmm.get_stream(ins);
// Find inputs from different streams // Find inputs from different streams
std::vector<instruction_ref> inputs; std::vector<instruction_ref> inputs;
fix([&](auto self, auto start) { fix([&](auto self, auto start) {
for(auto input : start->inputs()) for(auto input : start->inputs())
{ {
if(not m.has_stream(input)) if(not strmm.has_stream(input))
self(input); self(input);
else if(m.get_stream(input) != s) else if(strmm.get_stream(input) != s)
inputs.push_back(input); inputs.push_back(input);
} }
})(ins); })(ins);
......
...@@ -401,7 +401,8 @@ extern "C" struct migraphx_instruction; ...@@ -401,7 +401,8 @@ extern "C" struct migraphx_instruction;
struct migraphx_instruction struct migraphx_instruction
{ {
template <class... Ts> template <class... Ts>
migraphx_instruction(Ts&&... xs) : object(std::forward<Ts>(xs)...) migraphx_instruction(Ts&&... xs)
: object(std::forward<Ts>(xs)...) // NOLINT(readability-redundant-member-init)
{ {
} }
migraphx::instruction_ref object; migraphx::instruction_ref object;
...@@ -411,7 +412,8 @@ extern "C" struct migraphx_instructions; ...@@ -411,7 +412,8 @@ extern "C" struct migraphx_instructions;
struct migraphx_instructions struct migraphx_instructions
{ {
template <class... Ts> template <class... Ts>
migraphx_instructions(Ts&&... xs) : object(std::forward<Ts>(xs)...) migraphx_instructions(Ts&&... xs)
: object(std::forward<Ts>(xs)...) // NOLINT(readability-redundant-member-init)
{ {
} }
std::vector<migraphx::instruction_ref> object; std::vector<migraphx::instruction_ref> object;
...@@ -421,7 +423,8 @@ extern "C" struct migraphx_modules; ...@@ -421,7 +423,8 @@ extern "C" struct migraphx_modules;
struct migraphx_modules struct migraphx_modules
{ {
template <class... Ts> template <class... Ts>
migraphx_modules(Ts&&... xs) : object(std::forward<Ts>(xs)...) migraphx_modules(Ts&&... xs)
: object(std::forward<Ts>(xs)...) // NOLINT(readability-redundant-member-init)
{ {
} }
std::vector<migraphx::module*> object; std::vector<migraphx::module*> object;
...@@ -1069,6 +1072,22 @@ migraphx_module_add_instruction_with_mod_args(migraphx_instruction_t* out, ...@@ -1069,6 +1072,22 @@ migraphx_module_add_instruction_with_mod_args(migraphx_instruction_t* out,
return api_error_result; return api_error_result;
} }
extern "C" migraphx_status migraphx_module_add_literal(migraphx_instruction_t* out,
migraphx_module_t module,
const_migraphx_shape_t shape,
const char* buffer)
{
auto api_error_result = migraphx::try_([&] {
if(module == nullptr)
MIGRAPHX_THROW(migraphx_status_bad_param, "Bad parameter module: Null pointer");
if(shape == nullptr)
MIGRAPHX_THROW(migraphx_status_bad_param, "Bad parameter shape: Null pointer");
*out = allocate<migraphx_instruction_t>(
(module->object).add_literal((shape->object), (buffer)));
});
return api_error_result;
}
extern "C" migraphx_status migraphx_module_add_parameter(migraphx_instruction_t* out, extern "C" migraphx_status migraphx_module_add_parameter(migraphx_instruction_t* out,
migraphx_module_t module, migraphx_module_t module,
const char* name, const char* name,
...@@ -1691,6 +1710,16 @@ extern "C" migraphx_status migraphx_context_finish(const_migraphx_context_t cont ...@@ -1691,6 +1710,16 @@ extern "C" migraphx_status migraphx_context_finish(const_migraphx_context_t cont
return api_error_result; return api_error_result;
} }
extern "C" migraphx_status migraphx_context_get_queue(void** out, migraphx_context_t context)
{
auto api_error_result = migraphx::try_([&] {
if(context == nullptr)
MIGRAPHX_THROW(migraphx_status_bad_param, "Bad parameter context: Null pointer");
*out = (context->object).get_queue().unsafe_get();
});
return api_error_result;
}
extern "C" migraphx_status extern "C" migraphx_status
migraphx_experimental_custom_op_destroy(migraphx_experimental_custom_op_t experimental_custom_op) migraphx_experimental_custom_op_destroy(migraphx_experimental_custom_op_t experimental_custom_op)
{ {
......
...@@ -258,6 +258,11 @@ migraphx_status migraphx_module_add_instruction_with_mod_args(migraphx_instructi ...@@ -258,6 +258,11 @@ migraphx_status migraphx_module_add_instruction_with_mod_args(migraphx_instructi
migraphx_instructions_t args, migraphx_instructions_t args,
migraphx_modules_t module_refs); migraphx_modules_t module_refs);
migraphx_status migraphx_module_add_literal(migraphx_instruction_t* out,
migraphx_module_t module,
const_migraphx_shape_t shape,
const char* buffer);
migraphx_status migraphx_module_add_parameter(migraphx_instruction_t* out, migraphx_status migraphx_module_add_parameter(migraphx_instruction_t* out,
migraphx_module_t module, migraphx_module_t module,
const char* name, const char* name,
...@@ -433,6 +438,8 @@ migraphx_status migraphx_quantize_int8(migraphx_program_t prog, ...@@ -433,6 +438,8 @@ migraphx_status migraphx_quantize_int8(migraphx_program_t prog,
migraphx_status migraphx_context_finish(const_migraphx_context_t context); migraphx_status migraphx_context_finish(const_migraphx_context_t context);
migraphx_status migraphx_context_get_queue(void** out, migraphx_context_t context);
migraphx_status migraphx_status
migraphx_experimental_custom_op_destroy(migraphx_experimental_custom_op_t experimental_custom_op); migraphx_experimental_custom_op_destroy(migraphx_experimental_custom_op_t experimental_custom_op);
......
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