Removing iree-run-trace/iree-benchmark-trace tools.
diff --git a/.github/workflows/validate_and_publish_release.yml b/.github/workflows/validate_and_publish_release.yml
index 0d8d85a..2f9b8a8 100644
--- a/.github/workflows/validate_and_publish_release.yml
+++ b/.github/workflows/validate_and_publish_release.yml
@@ -62,9 +62,6 @@
- name: Run iree-benchmark-module
id: run_iree_benchmark_module
run: ./bin/iree-benchmark-module --help
- - name: Run iree-benchmark-trace
- id: run_iree_benchmark_trace
- run: ./bin/iree-benchmark-trace --help
- name: Run iree-dump-module
id: run_iree_dump_module
run: ./bin/iree-dump-module --help
@@ -83,9 +80,6 @@
- name: Run iree-run-module
id: run_iree_run_module
run: ./bin/iree-run-module --help
- - name: Run iree-run-trace
- id: run_iree_run_trace
- run: ./bin/iree-run-trace --help
- name: Run iree-tblgen
id: run_iree_tblgen
run: ./bin/iree-tblgen --help
@@ -96,15 +90,9 @@
- name: Py iree-run-module
id: py_iree-run-module
run: iree-run-module --help
- - name: Py iree-run-trace
- id: py_iree-run-trace
- run: iree-run-trace --help
- name: Py iree-benchmark-module
id: py_iree_benchmark_module
run: iree-benchmark-module --help
- - name: Py iree-benchmark-trace
- id: py_iree_benchmark_trace
- run: iree-benchmark-trace --help
- name: Py iree-dump-module
id: py_iree_dump_module
run: iree-dump-module --help
diff --git a/runtime/bindings/python/CMakeLists.txt b/runtime/bindings/python/CMakeLists.txt
index 44112ce..9e78fcb 100644
--- a/runtime/bindings/python/CMakeLists.txt
+++ b/runtime/bindings/python/CMakeLists.txt
@@ -162,12 +162,6 @@
iree_symlink_tool(
TARGET runtime
- FROM_TOOL_TARGET iree-benchmark-trace
- TO_EXE_NAME iree/_runtime_libs/iree-benchmark-trace
-)
-
-iree_symlink_tool(
- TARGET runtime
FROM_TOOL_TARGET iree-convert-parameters
TO_EXE_NAME iree/_runtime_libs/iree-convert-parameters
)
@@ -198,12 +192,6 @@
iree_symlink_tool(
TARGET runtime
- FROM_TOOL_TARGET iree-run-trace
- TO_EXE_NAME iree/_runtime_libs/iree-run-trace
-)
-
-iree_symlink_tool(
- TARGET runtime
FROM_TOOL_TARGET iree-run-module
TO_EXE_NAME iree/_runtime_libs/iree-run-module
)
@@ -331,13 +319,11 @@
TARGETS
iree-cpuinfo
iree-benchmark-module
- iree-benchmark-trace
iree-convert-parameters
iree-create-parameters
iree-dump-module
iree-dump-parameters
iree-run-module
- iree-run-trace
${_EXTRA_INSTALL_TOOL_TARGETS}
DESTINATION \"${_INSTALL_DIR}/iree/_runtime_libs\"
COMPONENT \"${_INSTALL_COMPONENT}\"
diff --git a/runtime/bindings/python/iree/_runtime/scripts/iree_benchmark_trace/__main__.py b/runtime/bindings/python/iree/_runtime/scripts/iree_benchmark_trace/__main__.py
deleted file mode 100644
index 51a6fe0..0000000
--- a/runtime/bindings/python/iree/_runtime/scripts/iree_benchmark_trace/__main__.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2021 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-import os
-import subprocess
-import sys
-from ... import libs
-
-
-def main(args=None):
- if args is None:
- args = sys.argv[1:]
- exe = os.path.join(libs.library_path, "iree-benchmark-trace")
- return subprocess.call(args=[exe] + args)
-
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/runtime/bindings/python/iree/_runtime/scripts/iree_run_trace/__main__.py b/runtime/bindings/python/iree/_runtime/scripts/iree_run_trace/__main__.py
deleted file mode 100644
index ea7170f..0000000
--- a/runtime/bindings/python/iree/_runtime/scripts/iree_run_trace/__main__.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2021 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-import os
-import subprocess
-import sys
-from ... import libs
-
-
-def main(args=None):
- if args is None:
- args = sys.argv[1:]
- exe = os.path.join(libs.library_path, "iree-run-trace")
- return subprocess.call(args=[exe] + args)
-
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/runtime/bindings/python/iree/runtime/_package_test.py b/runtime/bindings/python/iree/runtime/_package_test.py
index 0f7124c..f2db4f2 100644
--- a/runtime/bindings/python/iree/runtime/_package_test.py
+++ b/runtime/bindings/python/iree/runtime/_package_test.py
@@ -35,9 +35,7 @@
print("IREE version:", v.VERSION)
check_tool("iree-benchmark-module", ["--help"], "IREE: iree-benchmark-module")
-check_tool("iree-benchmark-trace", ["--help"], "IREE: iree-benchmark-trace")
check_tool("iree-run-module", ["--help"], "IREE: iree-run-module")
-check_tool("iree-run-trace", ["--help"], "IREE: iree-run-trace")
check_tool("iree-create-parameters", ["--help"], "IREE: iree-create-parameters")
check_tool("iree-convert-parameters", ["--help"], "IREE: iree-convert-parameters")
check_tool("iree-dump-module", ["--help"], "IREE: iree-dump-module")
diff --git a/runtime/setup.py b/runtime/setup.py
index e561c45..3f6aec8 100644
--- a/runtime/setup.py
+++ b/runtime/setup.py
@@ -565,9 +565,7 @@
"iree._runtime_libs": [
f"*{sysconfig.get_config_var('EXT_SUFFIX')}",
"iree-run-module*",
- "iree-run-trace*",
"iree-benchmark-module*",
- "iree-benchmark-trace*",
# These utilities are invariant wrt tracing and are only built for the default runtime.
"iree-create-parameters*",
"iree-convert-parameters*",
@@ -580,9 +578,7 @@
"iree._runtime_libs_tracy": [
f"*{sysconfig.get_config_var('EXT_SUFFIX')}",
"iree-run-module*",
- "iree-run-trace*",
"iree-benchmark-module*",
- "iree-benchmark-trace*",
]
+ (["iree-tracy-capture"] if ENABLE_TRACY_TOOLS else [])
}
@@ -592,9 +588,7 @@
entry_points={
"console_scripts": [
"iree-run-module = iree._runtime.scripts.iree_run_module.__main__:main",
- "iree-run-trace = iree._runtime.scripts.iree_run_trace.__main__:main",
"iree-benchmark-module = iree._runtime.scripts.iree_benchmark_module.__main__:main",
- "iree-benchmark-trace = iree._runtime.scripts.iree_benchmark_trace.__main__:main",
"iree-create-parameters = iree._runtime.scripts.iree_create_parameters.__main__:main",
"iree-convert-parameters = iree._runtime.scripts.iree_convert_parameters.__main__:main",
"iree-dump-module = iree._runtime.scripts.iree_dump_module.__main__:main",
diff --git a/tools/BUILD.bazel b/tools/BUILD.bazel
index 833919c..97b31a6 100644
--- a/tools/BUILD.bazel
+++ b/tools/BUILD.bazel
@@ -41,26 +41,6 @@
)
iree_runtime_cc_binary(
- name = "iree-benchmark-trace",
- srcs = ["iree-benchmark-trace-main.c"],
- deps = [
- "//runtime/src/iree/base",
- "//runtime/src/iree/base/internal:atomic_slist",
- "//runtime/src/iree/base/internal:file_io",
- "//runtime/src/iree/base/internal:flags",
- "//runtime/src/iree/base/internal:path",
- "//runtime/src/iree/hal",
- "//runtime/src/iree/testing:benchmark",
- "//runtime/src/iree/tooling:device_util",
- "//runtime/src/iree/tooling:trace_replay",
- "//runtime/src/iree/tooling:vm_util",
- "//runtime/src/iree/tooling:yaml_util",
- "//runtime/src/iree/vm",
- "@com_github_yaml_libyaml//:yaml",
- ],
-)
-
-iree_runtime_cc_binary(
name = "iree-check-module",
testonly = True,
srcs = ["iree-check-module-main.cc"],
@@ -224,23 +204,6 @@
)
iree_runtime_cc_binary(
- name = "iree-run-trace",
- srcs = ["iree-run-trace-main.c"],
- deps = [
- "//runtime/src/iree/base",
- "//runtime/src/iree/base/internal:flags",
- "//runtime/src/iree/base/internal:path",
- "//runtime/src/iree/hal",
- "//runtime/src/iree/tooling:device_util",
- "//runtime/src/iree/tooling:trace_replay",
- "//runtime/src/iree/tooling:vm_util",
- "//runtime/src/iree/tooling:yaml_util",
- "//runtime/src/iree/vm",
- "@com_github_yaml_libyaml//:yaml",
- ],
-)
-
-iree_runtime_cc_binary(
name = "iree-e2e-matmul-test",
srcs = ["iree-e2e-matmul-test.c"],
deps = [
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
index ed3453e..02cd782 100644
--- a/tools/CMakeLists.txt
+++ b/tools/CMakeLists.txt
@@ -76,30 +76,7 @@
iree::tooling::device_util
iree::tooling::vm_util
iree::vm
- INSTALL_COMPONENT IREETools-Runtime
-)
-
-iree_cc_binary(
- NAME
- iree-benchmark-trace
- SRCS
- "iree-benchmark-trace-main.c"
- DEPS
- iree::base
- iree::base::internal::atomic_slist
- iree::base::internal::file_io
- iree::base::internal::flags
- iree::base::internal::path
- iree::hal
- iree::modules::hal
- iree::testing::benchmark
- iree::tooling::device_util
- iree::tooling::trace_replay
- iree::tooling::vm_util
- iree::tooling::yaml_util
- iree::vm
- yaml
- INSTALL_COMPONENT IREETools-Runtime
+ INSTALL_COMPONENT IREETools-Runtime
)
iree_cc_binary(
@@ -136,7 +113,7 @@
iree::io::parameter_index
iree::io::scope_map
iree::tooling::parameter_util
- INSTALL_COMPONENT IREETools-Runtime
+ INSTALL_COMPONENT IREETools-Runtime
)
iree_cc_binary(
@@ -148,7 +125,7 @@
iree::base
iree::base::internal::cpu
iree::schemas::cpu_data
- INSTALL_COMPONENT IREETools-Runtime
+ INSTALL_COMPONENT IREETools-Runtime
)
iree_cc_binary(
@@ -165,7 +142,7 @@
iree::io::parameter_index
iree::io::scope_map
iree::io::stream
- INSTALL_COMPONENT IREETools-Runtime
+ INSTALL_COMPONENT IREETools-Runtime
)
iree_cc_binary(
@@ -180,7 +157,7 @@
iree::base::internal::flatcc::parsing
iree::schemas::instruments
iree::schemas::instruments::dispatch_def_c_fbs
- INSTALL_COMPONENT IREETools-Runtime
+ INSTALL_COMPONENT IREETools-Runtime
)
iree_cc_binary(
@@ -197,7 +174,7 @@
iree::base::internal::flatcc::parsing
iree::schemas::bytecode_module_def_c_fbs
iree::vm::bytecode::module
- INSTALL_COMPONENT IREETools-Runtime
+ INSTALL_COMPONENT IREETools-Runtime
)
iree_cc_binary(
@@ -212,7 +189,7 @@
iree::io::parameter_index
iree::io::scope_map
iree::tooling::parameter_util
- INSTALL_COMPONENT IREETools-Runtime
+ INSTALL_COMPONENT IREETools-Runtime
)
# Only enable fatelf tool when we're compiling it in.
@@ -230,7 +207,7 @@
iree::base::internal::file_io
iree::base::internal::path
iree::hal::local::elf::elf_module
- INSTALL_COMPONENT IREETools-Runtime
+ INSTALL_COMPONENT IREETools-Runtime
)
endif() # IREE_HAL_EXECUTABLE_*_EMBEDDED_ELF
@@ -251,26 +228,6 @@
iree_cc_binary(
NAME
- iree-run-trace
- SRCS
- "iree-run-trace-main.c"
- DEPS
- iree::base
- iree::base::internal::flags
- iree::base::internal::path
- iree::hal
- iree::modules::hal
- iree::tooling::device_util
- iree::tooling::trace_replay
- iree::tooling::vm_util
- iree::tooling::yaml_util
- iree::vm
- yaml
- INSTALL_COMPONENT IREETools-Runtime
-)
-
-iree_cc_binary(
- NAME
iree-e2e-matmul-test
SRCS
"iree-e2e-matmul-test.c"
diff --git a/tools/iree-benchmark-trace-main.c b/tools/iree-benchmark-trace-main.c
deleted file mode 100644
index 5920714..0000000
--- a/tools/iree-benchmark-trace-main.c
+++ /dev/null
@@ -1,310 +0,0 @@
-// Copyright 2021 The IREE Authors
-//
-// Licensed under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-// DISCLAIMER: this is leaky under error conditions as it's a benchmark tool and
-// not a correctness test.
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "iree/base/api.h"
-#include "iree/base/internal/file_io.h"
-#include "iree/base/internal/flags.h"
-#include "iree/base/internal/path.h"
-#include "iree/hal/api.h"
-#include "iree/testing/benchmark.h"
-#include "iree/tooling/device_util.h"
-#include "iree/tooling/trace_replay.h"
-#include "iree/tooling/vm_util.h"
-#include "iree/tooling/yaml_util.h"
-#include "iree/vm/api.h"
-
-IREE_FLAG(bool, capture_stdin, false,
- "Captures stdin up to EOF on startup to use during trace execution.");
-
-IREE_FLAG(bool, print_statistics, false,
- "Prints runtime statistics to stderr on exit.");
-
-IREE_FLAG(bool, reuse_devices, true,
- "Only creates a HAL device once and reuses it for all iterations.");
-IREE_FLAG(bool, reuse_modules, true,
- "Only loads modules once and reuses them for all iterations.");
-
-IREE_FLAG_LIST(
- string, input,
- "An input (a) value or (b) buffer of the format:\n"
- " (a) scalar value\n"
- " value\n"
- " e.g.: --input=\"3.14\"\n"
- " (b) buffer:\n"
- " [shape]xtype=[value]\n"
- " e.g.: --input=\"2x2xi32=1 2 3 4\"\n"
- "Optionally, brackets may be used to separate the element values:\n"
- " 2x2xi32=[[1 2][3 4]]\n"
- "Raw binary files can be read to provide buffer contents:\n"
- " 2x2xi32=@some/file.bin\n"
- "\n"
- "Numpy npy files from numpy.save can be read to provide 1+ values:\n"
- " @some.npy\n"
- "\n"
- "Each occurrence of the flag indicates an input in the order they were\n"
- "specified on the command line.");
-
-// Global state shared across all benchmarks and iterations.
-// Immutable and thread-safe (so much as anything contained within is).
-typedef struct iree_replay_benchmark_globals_t {
- // Shared VM instance. Unowned; callers must retain for the valid lifetime of
- // the registration.
- iree_vm_instance_t* instance;
- // Entire contents of stdin as read on startup.
- // This allows repeated benchmark calls to consume stdin.
- // Only captured if --capture_stdin is passed.
- iree_const_byte_span_t stdin_contents;
-} iree_replay_benchmark_globals_t;
-
-// A benchmark registration for each file to run.
-typedef struct iree_replay_benchmark_registration_t {
- iree_benchmark_def_t benchmark_def; // Must be first.
- // Used for relative file path lookup when referencing files in the trace.
- iree_string_view_t root_path;
- // Trace file path.
- iree_string_view_t file_path;
- // Global state shared across all benchmarks and iterations.
- const iree_replay_benchmark_globals_t* globals;
-} iree_replay_benchmark_registration_t;
-
-IREE_TRACE(static const char* IREE_REPLAY_ACTIVE_PLOT_ID = "Timing Active");
-
-static iree_status_t iree_replay_benchmark_call_before(
- void* user_data, iree_trace_replay_t* replay, yaml_document_t* document,
- yaml_node_t* event_node, iree_vm_function_t function,
- iree_vm_list_t* input_list) {
- iree_benchmark_state_t* benchmark_state = (iree_benchmark_state_t*)user_data;
- IREE_TRACE_PLOT_VALUE_I64(IREE_REPLAY_ACTIVE_PLOT_ID, 1);
- iree_benchmark_resume_timing(benchmark_state);
- return iree_ok_status();
-}
-
-static iree_status_t iree_replay_benchmark_call_after(
- void* user_data, iree_trace_replay_t* replay, yaml_document_t* document,
- yaml_node_t* event_node, iree_vm_function_t function,
- iree_vm_list_t* output_list) {
- iree_benchmark_state_t* benchmark_state = (iree_benchmark_state_t*)user_data;
- iree_benchmark_pause_timing(benchmark_state);
- IREE_TRACE_PLOT_VALUE_I64(IREE_REPLAY_ACTIVE_PLOT_ID, 0);
- return iree_ok_status();
-}
-
-static iree_status_t iree_replay_benchmark_run_documents(
- iree_trace_replay_t* replay, FILE* file,
- iree_benchmark_state_t* benchmark_state) {
- // One-pass parsing through the file.
- yaml_parser_t parser;
- if (!yaml_parser_initialize(&parser)) {
- return iree_make_status(IREE_STATUS_INTERNAL,
- "yaml_parser_initialize failed");
- }
- yaml_parser_set_input_file(&parser, file);
-
- bool have_parsed_inputs = false;
- iree_status_t status = iree_ok_status();
- for (bool document_eof = false; !document_eof;) {
- // Parse the subdocument event.
- IREE_TRACE_ZONE_BEGIN_NAMED(z_load, "yaml_parser_load");
- yaml_document_t document;
- bool did_load = yaml_parser_load(&parser, &document);
- IREE_TRACE_ZONE_END(z_load);
- if (!did_load) {
- status = iree_status_from_yaml_parser_error(&parser);
- break;
- }
-
- // Execute the event or handle EOF (empty document).
- yaml_node_t* event_node = yaml_document_get_root_node(&document);
- if (event_node) {
- status = iree_trace_replay_event(replay, &document, event_node);
- } else {
- document_eof = true;
- }
-
- // Reclaim subdocument resources before moving on to the next.
- IREE_TRACE_ZONE_BEGIN_NAMED(z_delete, "yaml_document_delete");
- yaml_document_delete(&document);
- IREE_TRACE_ZONE_END(z_delete);
-
- // If the event created a device and we haven't yet performed our input
- // loading we can do that now before processing subsequent events.
- if (iree_status_is_ok(status) && !have_parsed_inputs && replay->device) {
- status = iree_tooling_parse_into_variant_list(
- replay->device, iree_hal_device_allocator(replay->device),
- FLAG_input_list().values, FLAG_input_list().count,
- replay->host_allocator, replay->inputs);
- have_parsed_inputs = true;
- }
-
- if (!iree_status_is_ok(status)) break;
- }
-
- yaml_parser_delete(&parser);
-
- return status;
-}
-
-// Benchmark function that runs a trace file.
-static iree_status_t iree_replay_benchmark_run_file(
- const iree_benchmark_def_t* benchmark_def,
- iree_benchmark_state_t* benchmark_state) {
- const iree_replay_benchmark_registration_t* registration =
- (const iree_replay_benchmark_registration_t*)benchmark_def->user_data;
- const iree_replay_benchmark_globals_t* globals = registration->globals;
-
- iree_trace_replay_flags_t replay_flags = IREE_TRACE_REPLAY_FLAG_NONE;
- if (FLAG_print_statistics) {
- replay_flags |= IREE_TRACE_REPLAY_FLAG_PRINT_STATISTICS;
- }
- if (FLAG_reuse_devices) {
- replay_flags |= IREE_TRACE_REPLAY_FLAG_REUSE_DEVICES;
- }
- if (FLAG_reuse_modules) {
- replay_flags |= IREE_TRACE_REPLAY_FLAG_REUSE_MODULES;
- }
-
- // Setup replay state used for this benchmark.
- iree_trace_replay_t replay;
- IREE_RETURN_IF_ERROR(iree_trace_replay_initialize(
- registration->root_path, globals->instance, replay_flags,
- IREE_VM_CONTEXT_FLAG_NONE, iree_hal_available_driver_registry(),
- iree_allocator_system(), &replay));
- replay.stdin_contents = globals->stdin_contents;
-
- // Hook into all calls processed during the trace so we can time them.
- replay.call_hooks.user_data = benchmark_state;
- replay.call_hooks.before = iree_replay_benchmark_call_before;
- replay.call_hooks.after = iree_replay_benchmark_call_after;
-
- // Query device overrides, if any. When omitted the devices from the trace
- // file will be used.
- iree_trace_replay_set_hal_devices_override(&replay,
- iree_hal_device_flag_list());
-
- // Open trace YAML file from the given file_path.
- FILE* file = fopen(registration->file_path.data, "rb");
- if (!file) {
- return iree_make_status(
- iree_status_code_from_errno(errno), "failed to open trace file '%.*s'",
- (int)registration->file_path.size, registration->file_path.data);
- }
-
- // Call the functions within the trace in order.
- while (iree_benchmark_keep_running(benchmark_state,
- /*batch_count=*/1)) {
- // Pause timing that was started automatically. We'll resume/pause around
- // each call.
- // TODO(benvanik): see if we can tell benchmark to start paused?
- iree_benchmark_pause_timing(benchmark_state);
-
- // Clear replay state.
- iree_trace_replay_reset(&replay);
-
- // Run all events in the document from start to end.
- IREE_RETURN_IF_ERROR(
- iree_replay_benchmark_run_documents(&replay, file, benchmark_state));
-
- // Reset file back to the start.
- fseek(file, 0, SEEK_SET);
-
- // Resume before looping because keep_running requires it.
- iree_benchmark_resume_timing(benchmark_state);
- }
-
- iree_trace_replay_deinitialize(&replay);
- return iree_ok_status();
-}
-
-// Registers benchmarks for each trace file.
-static void iree_replay_benchmark_register_trace_files(
- int file_count, char** file_paths,
- const iree_replay_benchmark_globals_t* globals) {
- static iree_replay_benchmark_registration_t* registrations = NULL;
- if (!registrations) free(registrations);
- registrations = (iree_replay_benchmark_registration_t*)malloc(
- file_count * sizeof(iree_replay_benchmark_registration_t));
-
- for (int i = 0; i < file_count; ++i) {
- iree_string_view_t file_path = iree_make_cstring_view(file_paths[i]);
- registrations[i].root_path = iree_file_path_dirname(file_path);
- registrations[i].file_path = file_path;
- registrations[i].globals = globals;
- registrations[i].benchmark_def = (iree_benchmark_def_t){
- .flags = IREE_BENCHMARK_FLAG_MEASURE_PROCESS_CPU_TIME |
- IREE_BENCHMARK_FLAG_USE_REAL_TIME,
- .time_unit = IREE_BENCHMARK_UNIT_MILLISECOND,
- .minimum_duration_ns = 0,
- .iteration_count = 0,
- .run = iree_replay_benchmark_run_file,
- .user_data = ®istrations[i],
- };
- iree_benchmark_register(iree_file_path_stem(file_path),
- ®istrations[i].benchmark_def);
- }
-}
-
-int main(int argc, char** argv) {
- IREE_TRACE_APP_ENTER();
-
- iree_allocator_t host_allocator = iree_allocator_system();
-
- // Pass through flags to benchmark (allowing --help to fall through).
- iree_flags_set_usage(
- "iree-benchmark-trace",
- "Benchmarks a YAML trace file. See iree-run-trace for general usage.");
- iree_flags_parse_checked(IREE_FLAGS_PARSE_MODE_UNDEFINED_OK |
- IREE_FLAGS_PARSE_MODE_CONTINUE_AFTER_HELP,
- &argc, &argv);
- iree_benchmark_initialize(&argc, argv);
- if (argc <= 1) {
- fprintf(stderr,
- "no trace files provided; pass one or more yaml file paths");
- IREE_TRACE_APP_EXIT(EXIT_FAILURE);
- return EXIT_FAILURE;
- }
-
- // Used when tracing to display benchmark state.
- IREE_TRACE_SET_PLOT_TYPE(IREE_REPLAY_ACTIVE_PLOT_ID,
- IREE_TRACING_PLOT_TYPE_NUMBER,
- /*step=*/true, /*fill=*/true, /*color=*/0);
-
- // Setup shared instance used for each benchmark.
- iree_vm_instance_t* instance = NULL;
- IREE_CHECK_OK(iree_vm_instance_create(IREE_VM_TYPE_CAPACITY_DEFAULT,
- host_allocator, &instance));
-
- // Parse all of stdin right away. The traces we run may source things from it
- // and because we're running in a benchmark loop it'll quickly drain. To
- // ensure every iteration of every benchmark gets the same input we retain it.
- iree_file_contents_t* stdin_contents = NULL;
- if (FLAG_capture_stdin) {
- fprintf(stderr, "Capturing stdin contents at startup...\n");
- IREE_CHECK_OK(iree_stdin_read_contents(host_allocator, &stdin_contents));
- fprintf(stderr, "Captured %" PRIhsz " bytes of stdin content\n",
- stdin_contents->const_buffer.data_length);
- }
-
- // Register a benchmark per file provided and run them.
- iree_replay_benchmark_globals_t globals = {
- .instance = instance,
- .stdin_contents = stdin_contents ? stdin_contents->const_buffer
- : iree_const_byte_span_empty(),
- };
- iree_replay_benchmark_register_trace_files(argc - 1, argv + 1, &globals);
- iree_benchmark_run_specified();
-
- iree_file_contents_free(stdin_contents);
- iree_vm_instance_release(instance);
- IREE_TRACE_APP_EXIT(EXIT_SUCCESS);
- return EXIT_SUCCESS;
-}
diff --git a/tools/iree-run-trace-main.c b/tools/iree-run-trace-main.c
deleted file mode 100644
index 4bca457..0000000
--- a/tools/iree-run-trace-main.c
+++ /dev/null
@@ -1,396 +0,0 @@
-// Copyright 2021 The IREE Authors
-//
-// Licensed under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "iree/base/api.h"
-#include "iree/base/internal/flags.h"
-#include "iree/base/internal/path.h"
-#include "iree/hal/api.h"
-#include "iree/tooling/device_util.h"
-#include "iree/tooling/trace_replay.h"
-#include "iree/tooling/vm_util.h"
-#include "iree/tooling/yaml_util.h"
-#include "iree/vm/api.h"
-
-IREE_FLAG(bool, trace_execution, false, "Traces VM execution to stderr.");
-
-IREE_FLAG(bool, print_statistics, false,
- "Prints runtime statistics to stderr on exit.");
-
-IREE_FLAG(bool, print_calls, false, "Prints all I/O for each call to stdout.");
-IREE_FLAG(bool, print_call_inputs, false,
- "Prints all inputs for each call before they are made to stdout.");
-IREE_FLAG(bool, print_call_outputs, false,
- "Prints all outputs for each call after they are made to stdout.");
-
-IREE_FLAG_LIST(
- string, input,
- "An input (a) value or (b) buffer of the format:\n"
- " (a) scalar value\n"
- " value\n"
- " e.g.: --input=\"3.14\"\n"
- " (b) buffer:\n"
- " [shape]xtype=[value]\n"
- " e.g.: --input=\"2x2xi32=1 2 3 4\"\n"
- "Optionally, brackets may be used to separate the element values:\n"
- " 2x2xi32=[[1 2][3 4]]\n"
- "Raw binary files can be read to provide buffer contents:\n"
- " 2x2xi32=@some/file.bin\n"
- "\n"
- "Numpy npy files from numpy.save can be read to provide 1+ values:\n"
- " @some.npy\n"
- "\n"
- "Each occurrence of the flag indicates an input in the order they were\n"
- "specified on the command line.");
-
-IREE_FLAG_LIST(
- string, output,
- "Specifies how to handle an output from the invocation:\n"
- " `` (empty): ignore output\n"
- " e.g.: --output=\n"
- " `-`: print textual form to stdout\n"
- " e.g.: --output=-\n"
- " `@file.npy`: create/overwrite a numpy npy file and write buffer view\n"
- " e.g.: --output=@file.npy\n"
- " `+file.npy`: create/append a numpy npy file and write buffer view\n"
- " e.g.: --output=+file.npy\n"
- "\n"
- "Numpy npy files can be read in Python using numpy.load, for example an\n"
- "invocation producing two outputs can be concatenated as:\n"
- " --output=@file.npy --output=+file.npy\n"
- "And then loaded in Python by reading from the same file:\n"
- " with open('file.npy', 'rb') as f:\n"
- " print(numpy.load(f))\n"
- " print(numpy.load(f))\n"
- "\n"
- "Each occurrence of the flag indicates an output in the order they were\n"
- "specified on the command line.");
-
-IREE_FLAG_LIST(string, expected_output,
- "An expected function output following the same format as "
- "--input. When present the results of the "
- "invocation will be compared against these values and the "
- "tool will return non-zero if any differ. If the value of a "
- "particular output is not of interest provide `(ignored)`.");
-
-IREE_FLAG(int32_t, output_max_element_count, 1024,
- "Prints up to the maximum number of elements of output tensors, "
- "eliding the remainder.");
-
-static iree_status_t iree_trace_replay_call_before(void* user_data,
- iree_trace_replay_t* replay,
- yaml_document_t* document,
- yaml_node_t* event_node,
- iree_vm_function_t function,
- iree_vm_list_t* input_list) {
- if (FLAG_print_calls || FLAG_print_call_inputs) {
- iree_string_view_t function_name = iree_vm_function_name(&function);
- fprintf(stdout, "--- CALL[%.*s] ---\n", (int)function_name.size,
- function_name.data);
- IREE_RETURN_IF_ERROR(iree_tooling_variant_list_fprint(
- IREE_SV("arg"), input_list,
- (iree_host_size_t)FLAG_output_max_element_count, stdout));
- }
- return iree_ok_status();
-}
-
-static iree_status_t iree_trace_replay_call_after(void* user_data,
- iree_trace_replay_t* replay,
- yaml_document_t* document,
- yaml_node_t* event_node,
- iree_vm_function_t function,
- iree_vm_list_t* output_list) {
- if (FLAG_print_calls || FLAG_print_call_outputs) {
- if (!FLAG_print_calls && !FLAG_print_call_inputs) {
- iree_string_view_t function_name = iree_vm_function_name(&function);
- fprintf(stdout, "--- CALL[%.*s] ---\n", (int)function_name.size,
- function_name.data);
- }
- IREE_RETURN_IF_ERROR(iree_tooling_variant_list_fprint(
- IREE_SV("result"), output_list,
- (iree_host_size_t)FLAG_output_max_element_count, stdout));
- }
- return iree_ok_status();
-}
-
-// Runs the trace in |file| using |root_path| as the base for any path lookups
-// required for external files referenced in |file|.
-static iree_status_t iree_run_trace_file(iree_string_view_t root_path,
- FILE* file,
- iree_vm_instance_t* instance) {
- iree_trace_replay_flags_t replay_flags = IREE_TRACE_REPLAY_FLAG_NONE;
- if (FLAG_print_statistics) {
- replay_flags |= IREE_TRACE_REPLAY_FLAG_PRINT_STATISTICS;
- }
-
- iree_vm_context_flags_t context_flags = IREE_VM_CONTEXT_FLAG_NONE;
- if (FLAG_trace_execution) {
- context_flags |= IREE_VM_CONTEXT_FLAG_TRACE_EXECUTION;
- }
-
- iree_trace_replay_t replay;
- IREE_RETURN_IF_ERROR(iree_trace_replay_initialize(
- root_path, instance, replay_flags, context_flags,
- iree_hal_available_driver_registry(), iree_allocator_system(), &replay));
-
- // Hook into all calls processed during the trace.
- replay.call_hooks.user_data = NULL;
- replay.call_hooks.before = iree_trace_replay_call_before;
- replay.call_hooks.after = iree_trace_replay_call_after;
-
- // Query device overrides, if any. When omitted the devices from the trace
- // file will be used.
- iree_trace_replay_set_hal_devices_override(&replay,
- iree_hal_device_flag_list());
-
- yaml_parser_t parser;
- if (!yaml_parser_initialize(&parser)) {
- iree_trace_replay_deinitialize(&replay);
- return iree_make_status(IREE_STATUS_INTERNAL,
- "yaml_parser_initialize failed");
- }
- yaml_parser_set_input_file(&parser, file);
-
- bool have_parsed_inputs = false;
- iree_status_t status = iree_ok_status();
- for (bool document_eof = false; !document_eof;) {
- // Parse the subdocument event.
- yaml_document_t document;
- if (!yaml_parser_load(&parser, &document)) {
- status = iree_status_from_yaml_parser_error(&parser);
- break;
- }
-
- // Execute the event or handle EOF (empty document).
- yaml_node_t* event_node = yaml_document_get_root_node(&document);
- if (event_node) {
- status = iree_trace_replay_event(&replay, &document, event_node);
- } else {
- document_eof = true;
- }
-
- // Reclaim subdocument resources before moving on to the next.
- yaml_document_delete(&document);
- if (!iree_status_is_ok(status)) break;
-
- // If the event created a device and we haven't yet performed our input
- // loading we can do that now before processing subsequent events.
- if (!have_parsed_inputs && replay.device) {
- status = iree_tooling_parse_into_variant_list(
- replay.device, iree_hal_device_allocator(replay.device),
- FLAG_input_list().values, FLAG_input_list().count,
- replay.host_allocator, replay.inputs);
- have_parsed_inputs = true;
- }
- if (!iree_status_is_ok(status)) break;
- }
-
- yaml_parser_delete(&parser);
-
- // Transfer outputs to the host so they can be processed.
- if (iree_status_is_ok(status) && replay.device != NULL) {
- iree_hal_buffer_params_t target_params = {
- .usage = IREE_HAL_BUFFER_USAGE_TRANSFER | IREE_HAL_BUFFER_USAGE_MAPPING,
- .access = IREE_HAL_MEMORY_ACCESS_ALL,
- .type = IREE_HAL_MEMORY_TYPE_HOST_LOCAL |
- IREE_HAL_MEMORY_TYPE_DEVICE_VISIBLE,
- .queue_affinity = IREE_HAL_QUEUE_AFFINITY_ANY,
- .min_alignment = 0,
- };
- status = iree_tooling_transfer_variant_list(
- replay.device, replay.outputs, iree_hal_device_allocator(replay.device),
- target_params, /*wait_fence=*/NULL, /*signal_fence=*/NULL);
- }
-
- // Optionally process outputs from the replay session.
- if (iree_status_is_ok(status)) {
- if (FLAG_output_list().count == 0) {
- IREE_RETURN_IF_ERROR(
- iree_tooling_variant_list_fprint(
- IREE_SV("output"), replay.outputs,
- (iree_host_size_t)FLAG_output_max_element_count, stdout),
- "printing results");
- } else {
- IREE_RETURN_IF_ERROR(
- iree_tooling_output_variant_list(
- replay.outputs, FLAG_output_list().values,
- FLAG_output_list().count,
- (iree_host_size_t)FLAG_output_max_element_count, stdout),
- "outputting results");
- }
- }
-
- iree_trace_replay_deinitialize(&replay);
- return status;
-}
-
-// Runs each of the given traces files sequentially in isolated contexts.
-static iree_status_t iree_run_trace_files(int file_count, char** file_paths,
- iree_vm_instance_t* instance) {
- for (int i = 0; i < file_count; ++i) {
- iree_string_view_t file_path = iree_make_cstring_view(file_paths[i]);
- iree_string_view_t root_path = iree_file_path_dirname(file_path);
- FILE* file = fopen(file_paths[i], "rb");
- if (!file) {
- return iree_make_status(iree_status_code_from_errno(errno),
- "failed to open trace file '%.*s'",
- (int)file_path.size, file_path.data);
- }
- iree_status_t status = iree_run_trace_file(root_path, file, instance);
- fclose(file);
- IREE_RETURN_IF_ERROR(status, "replaying trace file '%.*s'",
- (int)file_path.size, file_path.data);
- }
- return iree_ok_status();
-}
-
-int main(int argc, char** argv) {
- IREE_TRACE_APP_ENTER();
-
- iree_flags_set_usage(
- "iree-run-trace",
- "Executes a YAML trace file containing a sequence of context operations\n"
- "and calls represented as subdocuments.\n"
- "\n"
- "Example loading a bytecode module and calling a function:\n"
- "\n"
- "```yaml\n"
- "type: context_load\n"
- "---\n"
- "type: module_load\n"
- "module:\n"
- " type: buildin\n"
- " name: hal\n"
- "---\n"
- "type: module_load\n"
- "module:\n"
- " type: bytecode\n"
- " path: ../build/some_module.vmfb\n"
- " mmap: true\n"
- "---\n"
- "type: call\n"
- "function: module.mul\n"
- "args:\n"
- "- !input.take 0\n"
- "- !input.take 1\n"
- "results:\n"
- "- !output.push\n"
- "- !output.push\n"
- "```\n"
- "\n"
- "This can be invoked like iree-run-module specifying inputs/outputs:\n"
- " iree-run-trace trace.yml \\\n"
- " --device=local-sync \\\n"
- " --input=4xf32=0,1,2,3,4 \\\n"
- " --input=@input1.npy \\\n"
- " --output=@outputs.npy \\\n"
- " --output=+outputs.npy\n"
- "\n"
- "In addition to `--input=`/`--output=` flag access a user-defined\n"
- "blackboard exists for preserving temporary values used within the\n"
- "trace. Blackboard slots are defined by ordinal and they can be used\n"
- "in any context and input/output can be, `!blackboard.get` instead of\n"
- "`!input.get` and `!blackboard.set` instead of `!output.set`.\n"
- "\n"
- "--- Events ---\n"
- "\n"
- "`type: context_load`\n"
- "Loads an empty VM context with no modules registered.\n"
- "\n"
- "`type: module_load`\n"
- "Loads a module into the current context. Modules may either be\n"
- "`builtin` (compiled into the binary) or dynamically-loaded `bytecode`.\n"
- "\n"
- "`type: blackboard_clear`\n"
- "Clears the contents of the blackboard and resets it to 0 elements.\n"
- "\n"
- "`type: assign`\n"
- "Assigns sources from a `from` sequence to targets in a `to` sequence.\n"
- "Equivalent to an identity function call and can be used to move\n"
- "between inputs, outputs, and the blackboard.\n"
- "\n"
- "`type: numpy_load`\n"
- "Loads one or more ndarrays from a .npy value. Each array has a target\n"
- "where the array will be retained such as `!blackboard.set 2`.\n"
- "\n"
- "`type: numpy_save\n"
- "Saves one or more ndarrays to a .npy value. Each array has a source\n"
- "where the array will be taken from such as `!blackboard.get 2`.\n"
- "\n"
- "`type: call`\n"
- "Invokes a function in the context by fully-qualified `function` name.\n"
- "Uses arguments from an `args` sequence and produces results into a\n"
- "`results` sequence.\n"
- "\n"
- "--- Sources ---\n"
- "\n"
- "`type: null`\n"
- "A null ref value.\n"
- "\n"
- "`!hal.buffer_view 4xf32=0,1,2,3`\n"
- "A constant iree_hal_buffer_view_t/!hal.buffer_view value using the\n"
- "same formatting as iree-run-module's `--input=` flag.\n"
- "\n"
- "`!hal.buffer 4xf32=0,1,2,3`\n"
- "An initialized iree_hal_buffer_t/!hal.buffer without the wrapping view\n"
- "metadata.\n"
- "\n"
- "`!input.get ORDINAL` / `!input.take ORDINAL`\n"
- "Returns a reference to `--input=` flag at ORDINAL. Note that a single\n"
- "npy file may expand to multiple inputs. The `take` variant transfers\n"
- "ownership and clears the slot in the list and is recommended to avoid\n"
- "keeping unneeded inputs around for the duration of the trace.\n"
- "\n"
- "`!output.get ORDINAL` / `!output.take ORDINAL`\n"
- "Returns a reference to the `--output=` flag at ORDINAL. These are\n"
- "initially empty until assigned by the trace.\n"
- "\n"
- "`!blackboard.get ORDINAL` / `!blackboard.take ORDINAL`\n"
- "Returns a reference to the blackboard slot ORDINAL. The blackboard is\n"
- "initially empty and slots must be assigned in order to define them.\n"
- "The `take` variant transfers ownership and clears the slot in the\n"
- "blackboard and is recommended to avoid keeping large resources live\n"
- "in the blackboard longer than they need to be.\n"
- "\n"
- "--- Targets ---\n"
- "\n"
- "`!output.set ORDINAL` / `!output.push`\n"
- "Sets the `--output=` flag result value at ORDINAL or pushes it to the\n"
- "back of the output list. Outputs can either be dumped to files or by\n"
- "default printed to stdout.\n"
- "\n"
- "`!blackboard.set ORDINAL` / `blackboard.push`\n"
- "Sets the value of the blackboard slot ORDINAL or pushes it to the back\n"
- "of the blackboard list. Blackboard values will be retained until they\n"
- "are consumed via `!blackboard.take` or the blackboard is cleared.\n"
- "\n");
- iree_flags_parse_checked(IREE_FLAGS_PARSE_MODE_DEFAULT, &argc, &argv);
- if (argc <= 1) {
- fprintf(stderr,
- "no trace files provided; pass one or more yaml file paths");
- IREE_TRACE_APP_EXIT(EXIT_FAILURE);
- return EXIT_FAILURE;
- }
-
- iree_vm_instance_t* instance = NULL;
- iree_status_t status = iree_vm_instance_create(
- IREE_VM_TYPE_CAPACITY_DEFAULT, iree_allocator_system(), &instance);
- if (iree_status_is_ok(status)) {
- status = iree_run_trace_files(argc - 1, argv + 1, instance);
- }
- iree_vm_instance_release(instance);
- int exit_code = EXIT_SUCCESS;
- if (!iree_status_is_ok(status)) {
- iree_status_fprint(stderr, status);
- iree_status_free(status);
- exit_code = EXIT_FAILURE;
- }
- IREE_TRACE_APP_EXIT(exit_code);
- return exit_code;
-}
diff --git a/tools/test/BUILD.bazel b/tools/test/BUILD.bazel
index c9602f1..14e39d8 100644
--- a/tools/test/BUILD.bazel
+++ b/tools/test/BUILD.bazel
@@ -32,7 +32,6 @@
"iree-run-module-inputs.mlir",
"iree-run-module-outputs.mlir",
"iree-run-module.mlir",
- "iree-run-trace.mlir",
"multiple_args.mlir",
"multiple_exported_functions.mlir",
"null_values.mlir",
@@ -49,7 +48,6 @@
cfg = "//tools:lit.cfg.py",
data = [
"echo_npy.py",
- "iree-run-trace.yml",
"parameters_a.safetensors",
"parameters_b.safetensors",
],
@@ -59,13 +57,11 @@
],
tools = [
"//tools:iree-benchmark-module",
- "//tools:iree-benchmark-trace",
"//tools:iree-compile",
"//tools:iree-dump-parameters",
"//tools:iree-opt",
"//tools:iree-run-mlir",
"//tools:iree-run-module",
- "//tools:iree-run-trace",
"@llvm-project//lld",
"@llvm-project//llvm:FileCheck",
"@llvm-project//llvm:not",
diff --git a/tools/test/CMakeLists.txt b/tools/test/CMakeLists.txt
index 6270174..dcacb08 100644
--- a/tools/test/CMakeLists.txt
+++ b/tools/test/CMakeLists.txt
@@ -28,7 +28,6 @@
"iree-run-module-inputs.mlir"
"iree-run-module-outputs.mlir"
"iree-run-module.mlir"
- "iree-run-trace.mlir"
"multiple_args.mlir"
"multiple_exported_functions.mlir"
"null_values.mlir"
@@ -40,17 +39,14 @@
${IREE_LLD_TARGET}
FileCheck
iree-benchmark-module
- iree-benchmark-trace
iree-compile
iree-dump-parameters
iree-opt
iree-run-mlir
iree-run-module
- iree-run-trace
not
DATA
echo_npy.py
- iree-run-trace.yml
parameters_a.safetensors
parameters_b.safetensors
LABELS
diff --git a/tools/test/iree-run-trace.mlir b/tools/test/iree-run-trace.mlir
deleted file mode 100644
index 030136f..0000000
--- a/tools/test/iree-run-trace.mlir
+++ /dev/null
@@ -1,33 +0,0 @@
-// Tests iree-run-trace usage by running two calls of @mul and passing the
-// result between them. The outputs of both calls are produced as outputs from
-// the trace and both are written to a .npy file for processing. Inputs can
-// also come from an .npy file. See iree-run-module usage for more information
-// on the `--input=` and `--output=` flags.
-
-// RUN: (iree-compile --iree-hal-target-backends=vmvx %s | \
-// RUN: iree-run-trace %S/iree-run-trace.yml \
-// RUN: --device=local-sync \
-// RUN: --input=4xf32=4,4,4,4 \
-// RUN: --output=@%t \
-// RUN: --output=+%t) && \
-// RUN: "%PYTHON" %S/echo_npy.py %t | \
-// RUN: FileCheck %s --check-prefix=RUN-TRACE
-// RUN-TRACE{LITERAL}: [ 0. 4. 8. 12.]
-// RUN-TRACE-NEXT{LITERAL}: [ 0. 12. 24. 36.]
-
-// Tests iree-run-benchmark usage by running the same sequence as above but with
-// benchmarking enabled. The tools are mostly interchangable except benchmarking
-// doesn't yield any output values or feature I/O printing. All traces that can
-// run with iree-run-trace *should* run with iree-benchmark-trace.
-// RUN: (iree-compile --iree-hal-target-backends=vmvx %s | \
-// RUN: iree-benchmark-trace %S/iree-run-trace.yml \
-// RUN: --capture_stdin=true \
-// RUN: --device=local-sync \
-// RUN: --input=4xf32=4,4,4,4) | \
-// RUN: FileCheck %s --check-prefix=BENCHMARK-TRACE
-// BENCHMARK-TRACE{LITERAL}: BM_iree-run-trace/process_time/real_time
-
-func.func @mul(%arg0: tensor<4xf32>, %arg1: tensor<4xf32>) -> tensor<4xf32> {
- %0 = arith.mulf %arg0, %arg1 : tensor<4xf32>
- return %0 : tensor<4xf32>
-}
diff --git a/tools/test/iree-run-trace.yml b/tools/test/iree-run-trace.yml
deleted file mode 100644
index ea71303..0000000
--- a/tools/test/iree-run-trace.yml
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright 2023 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-# Tests loading and executing a bytecode module and issuing a few calls showing
-# how to take input, produce output, and support temporary values within the
-# trace session. See iree-run-trace.mlir for how to compile the module and
-# invoke the iree-run-trace tool.
-
-# Prepare the VM context for use; effectively a reset.
-# API: iree_vm_context_create
-type: context_load
-
----
-
-# Load the builtin HAL module used to execute the program.
-# API: iree_hal_module_create
-type: module_load
-module:
- type: builtin
- name: hal
-
----
-
-# Load the compiled bytecode module.
-# API: iree_vm_bytecode_module_create
-type: module_load
-module:
- type: bytecode
- name: module
- # The test pulls the .vmfb from stdin but you can also reference relative or
- # absolute file paths:
- # path: ../iree-tmp/iree-run-trace.vmfb
- # NOTE: if using iree-benchmark-trace then --capture_stdin must be passed to
- # capture the full contents of stdin for reuse in benchmark iterations.
- path: <stdin>
-
----
-
-# Call #0 of @mul.
-# API: iree_vm_invoke
-type: call
-function: module.mul
-args:
-# arg[0]: the first `--input=` buffer. !input.get would retain the input for
-# other calls to use but otherwise prefer taking ownership.
-- !input.take 0
-# arg[1]: constant value defined inline.
-- !hal.buffer_view 4xf32=0,1,2,3
-results:
-# result[0]: store in blackboard slot 4 for later use.
-- !blackboard.set 4
-
----
-
-# Assigns one or more source values to a set of target values.
-# Effectively: outputs.push(retain(blackboard[4]))
-type: assign
-from:
-# from[0]: retain blackboard slot 4, leaving it for later use.
-- !blackboard.get 4
-to:
-# to[0]: push on to the trace output list. --output= can save off the results
-# and otherwise they are printed to stdout.
-- !output.push
-
----
-
-# Call #1 of @mul.
-# API: iree_vm_invoke
-type: call
-function: module.mul
-args:
-# arg[0]: take the previously-stored value in blackboard slot 4.
-- !blackboard.take 4
-# arg[1]: another constant.
-- !hal.buffer_view 4xf32=3,3,3,3
-results:
-# result[0]: push on to the trace output list.
-- !output.push