v4.16.2
This commit is contained in:
committed by
GitHub
parent
e6984f5eab
commit
f2aad5079a
@@ -31,7 +31,7 @@ endif()
|
|||||||
# Set firmware version
|
# Set firmware version
|
||||||
add_definitions( -DFIRMWARE_VERSION_MAJOR=4 )
|
add_definitions( -DFIRMWARE_VERSION_MAJOR=4 )
|
||||||
add_definitions( -DFIRMWARE_VERSION_MINOR=16 )
|
add_definitions( -DFIRMWARE_VERSION_MINOR=16 )
|
||||||
add_definitions( -DFIRMWARE_VERSION_REVISION=1 )
|
add_definitions( -DFIRMWARE_VERSION_REVISION=2 )
|
||||||
if(HAILO_BUILD_SERVICE)
|
if(HAILO_BUILD_SERVICE)
|
||||||
add_definitions( -DHAILO_SUPPORT_MULTI_PROCESS )
|
add_definitions( -DHAILO_SUPPORT_MULTI_PROCESS )
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
|
|
||||||
set(HAILORT_MAJOR_VERSION 4)
|
set(HAILORT_MAJOR_VERSION 4)
|
||||||
set(HAILORT_MINOR_VERSION 16)
|
set(HAILORT_MINOR_VERSION 16)
|
||||||
set(HAILORT_REVISION_VERSION 1)
|
set(HAILORT_REVISION_VERSION 2)
|
||||||
|
|
||||||
# Add the cmake folder so the modules there are found
|
# Add the cmake folder so the modules there are found
|
||||||
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
|
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ if(NOT CMAKE_HOST_UNIX)
|
|||||||
message(FATAL_ERROR "Only unix hosts are supported, stopping build")
|
message(FATAL_ERROR "Only unix hosts are supported, stopping build")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
# GST_PLUGIN_DEFINE needs PACKAGE to be defined
|
# GST_PLUGIN_DEFINE needs PACKAGE to be defined
|
||||||
set(GST_HAILO_PACKAGE_NAME "hailo")
|
set(GST_HAILO_PACKAGE_NAME "hailo")
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ enum
|
|||||||
PROP_INPUT_FROM_META,
|
PROP_INPUT_FROM_META,
|
||||||
PROP_NO_TRANSFORM,
|
PROP_NO_TRANSFORM,
|
||||||
PROP_MULTI_PROCESS_SERVICE,
|
PROP_MULTI_PROCESS_SERVICE,
|
||||||
|
PROP_PASS_THROUGH,
|
||||||
|
|
||||||
// Deprecated
|
// Deprecated
|
||||||
PROP_VDEVICE_KEY,
|
PROP_VDEVICE_KEY,
|
||||||
@@ -332,6 +333,7 @@ static hailo_status gst_hailonet2_allocate_infer_resources(GstHailoNet2 *self)
|
|||||||
buffer = static_cast<GstBuffer*>(gst_queue_array_pop_head(self->thread_queue));
|
buffer = static_cast<GstBuffer*>(gst_queue_array_pop_head(self->thread_queue));
|
||||||
self->buffers_in_thread_queue--;
|
self->buffers_in_thread_queue--;
|
||||||
}
|
}
|
||||||
|
self->thread_cv.notify_all();
|
||||||
if (GST_IS_PAD(self->srcpad)) { // Checking because we fail here when exiting the application
|
if (GST_IS_PAD(self->srcpad)) { // Checking because we fail here when exiting the application
|
||||||
GstFlowReturn ret = gst_pad_push(self->srcpad, buffer);
|
GstFlowReturn ret = gst_pad_push(self->srcpad, buffer);
|
||||||
if ((GST_FLOW_OK != ret) && (GST_FLOW_FLUSHING != ret) && (!self->has_got_eos)) {
|
if ((GST_FLOW_OK != ret) && (GST_FLOW_FLUSHING != ret) && (!self->has_got_eos)) {
|
||||||
@@ -482,9 +484,12 @@ static void gst_hailonet2_set_property(GObject *object, guint property_id, const
|
|||||||
case PROP_IS_ACTIVE:
|
case PROP_IS_ACTIVE:
|
||||||
(void)gst_hailonet2_toggle_activation(self, self->props.m_is_active.get(), g_value_get_boolean(value));
|
(void)gst_hailonet2_toggle_activation(self, self->props.m_is_active.get(), g_value_get_boolean(value));
|
||||||
break;
|
break;
|
||||||
|
case PROP_PASS_THROUGH:
|
||||||
|
self->props.m_pass_through = g_value_get_boolean(value);
|
||||||
|
break;
|
||||||
case PROP_OUTPUTS_MIN_POOL_SIZE:
|
case PROP_OUTPUTS_MIN_POOL_SIZE:
|
||||||
if (self->is_configured) {
|
if (self->is_configured) {
|
||||||
g_warning("The network was already configured so changing the outputs minimum pool size will not take place!");
|
g_warning("The network has already been configured, the output's minimum pool size cannot be changed!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
self->props.m_outputs_min_pool_size = g_value_get_uint(value);
|
self->props.m_outputs_min_pool_size = g_value_get_uint(value);
|
||||||
@@ -620,6 +625,9 @@ static void gst_hailonet2_get_property(GObject *object, guint property_id, GValu
|
|||||||
case PROP_IS_ACTIVE:
|
case PROP_IS_ACTIVE:
|
||||||
g_value_set_boolean(value, self->props.m_is_active.get());
|
g_value_set_boolean(value, self->props.m_is_active.get());
|
||||||
break;
|
break;
|
||||||
|
case PROP_PASS_THROUGH:
|
||||||
|
g_value_set_boolean(value, self->props.m_pass_through.get());
|
||||||
|
break;
|
||||||
case PROP_OUTPUTS_MIN_POOL_SIZE:
|
case PROP_OUTPUTS_MIN_POOL_SIZE:
|
||||||
g_value_set_uint(value, self->props.m_outputs_min_pool_size.get());
|
g_value_set_uint(value, self->props.m_outputs_min_pool_size.get());
|
||||||
break;
|
break;
|
||||||
@@ -725,6 +733,11 @@ static void gst_hailonet2_class_init(GstHailoNet2Class *klass)
|
|||||||
"By default, the hailonet element will not be active unless it is the only one. "
|
"By default, the hailonet element will not be active unless it is the only one. "
|
||||||
"Setting this property in combination with 'scheduling-algorithm' different than HAILO_SCHEDULING_ALGORITHM_NONE is not supported.", false,
|
"Setting this property in combination with 'scheduling-algorithm' different than HAILO_SCHEDULING_ALGORITHM_NONE is not supported.", false,
|
||||||
(GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
|
(GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
|
||||||
|
g_object_class_install_property(gobject_class, PROP_PASS_THROUGH,
|
||||||
|
g_param_spec_boolean("pass-through", "Is Element pass-through", "Controls whether the element will perform inference or simply pass buffers through. "
|
||||||
|
"By default, the hailonet element will not be pass-through. "
|
||||||
|
"Setting this property to true disables inference, regardless of the scheduler settings.", false,
|
||||||
|
(GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
|
||||||
|
|
||||||
g_object_class_install_property(gobject_class, PROP_SCHEDULING_ALGORITHM,
|
g_object_class_install_property(gobject_class, PROP_SCHEDULING_ALGORITHM,
|
||||||
g_param_spec_enum("scheduling-algorithm", "Scheduling policy for automatic network group switching", "Controls the Model Scheduler algorithm of HailoRT. "
|
g_param_spec_enum("scheduling-algorithm", "Scheduling policy for automatic network group switching", "Controls the Model Scheduler algorithm of HailoRT. "
|
||||||
@@ -798,6 +811,9 @@ static void gst_hailonet2_push_buffer_to_thread(GstHailoNet2 *self, GstBuffer *b
|
|||||||
{
|
{
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> lock(self->thread_queue_mutex);
|
std::unique_lock<std::mutex> lock(self->thread_queue_mutex);
|
||||||
|
self->thread_cv.wait(lock, [self] () {
|
||||||
|
return self->buffers_in_thread_queue < self->props.m_outputs_max_pool_size.get();
|
||||||
|
});
|
||||||
gst_queue_array_push_tail(self->thread_queue, buffer);
|
gst_queue_array_push_tail(self->thread_queue, buffer);
|
||||||
self->buffers_in_thread_queue++;
|
self->buffers_in_thread_queue++;
|
||||||
}
|
}
|
||||||
@@ -1010,7 +1026,7 @@ static GstFlowReturn gst_hailonet2_chain(GstPad * /*pad*/, GstObject * parent, G
|
|||||||
GstHailoNet2 *self = GST_HAILONET2(parent);
|
GstHailoNet2 *self = GST_HAILONET2(parent);
|
||||||
std::unique_lock<std::mutex> lock(self->infer_mutex);
|
std::unique_lock<std::mutex> lock(self->infer_mutex);
|
||||||
|
|
||||||
if (!self->props.m_is_active.get() || (nullptr == self->configured_infer_model)) {
|
if (self->props.m_pass_through.get() || !self->props.m_is_active.get()) {
|
||||||
gst_hailonet2_push_buffer_to_thread(self, buffer);
|
gst_hailonet2_push_buffer_to_thread(self, buffer);
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ struct HailoNet2Properties final
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
HailoNet2Properties() : m_hef_path(nullptr), m_batch_size(HAILO_DEFAULT_BATCH_SIZE),
|
HailoNet2Properties() : m_hef_path(nullptr), m_batch_size(HAILO_DEFAULT_BATCH_SIZE),
|
||||||
m_device_id(nullptr), m_device_count(0), m_vdevice_group_id(nullptr), m_is_active(false),
|
m_device_id(nullptr), m_device_count(0), m_vdevice_group_id(nullptr), m_is_active(false), m_pass_through(false),
|
||||||
m_outputs_min_pool_size(MIN_OUTPUTS_POOL_SIZE), m_outputs_max_pool_size(MAX_OUTPUTS_POOL_SIZE),
|
m_outputs_min_pool_size(MIN_OUTPUTS_POOL_SIZE), m_outputs_max_pool_size(MAX_OUTPUTS_POOL_SIZE),
|
||||||
m_scheduling_algorithm(HAILO_SCHEDULING_ALGORITHM_ROUND_ROBIN), m_scheduler_timeout_ms(HAILO_DEFAULT_SCHEDULER_TIMEOUT_MS),
|
m_scheduling_algorithm(HAILO_SCHEDULING_ALGORITHM_ROUND_ROBIN), m_scheduler_timeout_ms(HAILO_DEFAULT_SCHEDULER_TIMEOUT_MS),
|
||||||
m_scheduler_threshold(HAILO_DEFAULT_SCHEDULER_THRESHOLD), m_scheduler_priority(HAILO_SCHEDULER_PRIORITY_NORMAL),
|
m_scheduler_threshold(HAILO_DEFAULT_SCHEDULER_THRESHOLD), m_scheduler_priority(HAILO_SCHEDULER_PRIORITY_NORMAL),
|
||||||
@@ -95,6 +95,7 @@ public:
|
|||||||
HailoElemProperty<guint16> m_device_count;
|
HailoElemProperty<guint16> m_device_count;
|
||||||
HailoElemProperty<gchar*> m_vdevice_group_id;
|
HailoElemProperty<gchar*> m_vdevice_group_id;
|
||||||
HailoElemProperty<gboolean> m_is_active;
|
HailoElemProperty<gboolean> m_is_active;
|
||||||
|
HailoElemProperty<gboolean> m_pass_through;
|
||||||
HailoElemProperty<guint> m_outputs_min_pool_size;
|
HailoElemProperty<guint> m_outputs_min_pool_size;
|
||||||
HailoElemProperty<guint> m_outputs_max_pool_size;
|
HailoElemProperty<guint> m_outputs_max_pool_size;
|
||||||
HailoElemProperty<hailo_scheduling_algorithm_t> m_scheduling_algorithm;
|
HailoElemProperty<hailo_scheduling_algorithm_t> m_scheduling_algorithm;
|
||||||
|
|||||||
@@ -1488,7 +1488,7 @@ class HailoFormatFlags(_pyhailort.FormatFlags):
|
|||||||
SUPPORTED_PROTOCOL_VERSION = 2
|
SUPPORTED_PROTOCOL_VERSION = 2
|
||||||
SUPPORTED_FW_MAJOR = 4
|
SUPPORTED_FW_MAJOR = 4
|
||||||
SUPPORTED_FW_MINOR = 16
|
SUPPORTED_FW_MINOR = 16
|
||||||
SUPPORTED_FW_REVISION = 1
|
SUPPORTED_FW_REVISION = 2
|
||||||
|
|
||||||
MEGA_MULTIPLIER = 1000.0 * 1000.0
|
MEGA_MULTIPLIER = 1000.0 * 1000.0
|
||||||
|
|
||||||
|
|||||||
@@ -69,6 +69,6 @@ if __name__ == "__main__":
|
|||||||
"linux_aarch64",
|
"linux_aarch64",
|
||||||
],
|
],
|
||||||
url="https://hailo.ai/",
|
url="https://hailo.ai/",
|
||||||
version="4.16.1",
|
version="4.16.2",
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ set_target_properties(_pyhailort PROPERTIES
|
|||||||
# VISIBILITY_INLINES_HIDDEN YES
|
# VISIBILITY_INLINES_HIDDEN YES
|
||||||
)
|
)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
target_link_libraries(_pyhailort PRIVATE HailoRT::libhailort)
|
target_link_libraries(_pyhailort PRIVATE HailoRT::libhailort)
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(data_quantization_example.c PROPERTIES LANGUAGE C)
|
SET_SOURCE_FILES_PROPERTIES(data_quantization_example.c PROPERTIES LANGUAGE C)
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(infer_pipeline_example.c PROPERTIES LANGUAGE C)
|
SET_SOURCE_FILES_PROPERTIES(infer_pipeline_example.c PROPERTIES LANGUAGE C)
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(multi_device_example.c PROPERTIES LANGUAGE C)
|
SET_SOURCE_FILES_PROPERTIES(multi_device_example.c PROPERTIES LANGUAGE C)
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(multi_network_vstream_example.c PROPERTIES LANGUAGE C)
|
SET_SOURCE_FILES_PROPERTIES(multi_network_vstream_example.c PROPERTIES LANGUAGE C)
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(notification_callback_example.c PROPERTIES LANGUAGE C)
|
SET_SOURCE_FILES_PROPERTIES(notification_callback_example.c PROPERTIES LANGUAGE C)
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.0.0)
|
cmake_minimum_required(VERSION 3.0.0)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(power_measurement_example.c PROPERTIES LANGUAGE C)
|
SET_SOURCE_FILES_PROPERTIES(power_measurement_example.c PROPERTIES LANGUAGE C)
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.0.0)
|
cmake_minimum_required(VERSION 3.0.0)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(raw_async_streams_single_thread_example.c PROPERTIES LANGUAGE C)
|
SET_SOURCE_FILES_PROPERTIES(raw_async_streams_single_thread_example.c PROPERTIES LANGUAGE C)
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(raw_streams_example.c PROPERTIES LANGUAGE C)
|
SET_SOURCE_FILES_PROPERTIES(raw_streams_example.c PROPERTIES LANGUAGE C)
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(switch_network_groups_example.c PROPERTIES LANGUAGE C)
|
SET_SOURCE_FILES_PROPERTIES(switch_network_groups_example.c PROPERTIES LANGUAGE C)
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(switch_network_groups_manually_example.c PROPERTIES LANGUAGE C)
|
SET_SOURCE_FILES_PROPERTIES(switch_network_groups_manually_example.c PROPERTIES LANGUAGE C)
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(vstreams_example.c PROPERTIES LANGUAGE C)
|
SET_SOURCE_FILES_PROPERTIES(vstreams_example.c PROPERTIES LANGUAGE C)
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.0.0)
|
cmake_minimum_required(VERSION 3.0.0)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
add_executable(cpp_async_infer_example async_infer_example.cpp)
|
add_executable(cpp_async_infer_example async_infer_example.cpp)
|
||||||
target_link_libraries(cpp_async_infer_example PRIVATE HailoRT::libhailort)
|
target_link_libraries(cpp_async_infer_example PRIVATE HailoRT::libhailort)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.0.0)
|
cmake_minimum_required(VERSION 3.0.0)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
add_executable(cpp_async_infer_functionality_example async_infer_functionality_example.cpp)
|
add_executable(cpp_async_infer_functionality_example async_infer_functionality_example.cpp)
|
||||||
target_link_libraries(cpp_async_infer_functionality_example PRIVATE HailoRT::libhailort)
|
target_link_libraries(cpp_async_infer_functionality_example PRIVATE HailoRT::libhailort)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.0.0)
|
cmake_minimum_required(VERSION 3.0.0)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
add_executable(cpp_infer_pipeline_example infer_pipeline_example.cpp)
|
add_executable(cpp_infer_pipeline_example infer_pipeline_example.cpp)
|
||||||
target_link_libraries(cpp_infer_pipeline_example PRIVATE HailoRT::libhailort)
|
target_link_libraries(cpp_infer_pipeline_example PRIVATE HailoRT::libhailort)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
add_executable(cpp_multi_device_example multi_device_example.cpp)
|
add_executable(cpp_multi_device_example multi_device_example.cpp)
|
||||||
target_link_libraries(cpp_multi_device_example PRIVATE HailoRT::libhailort Threads::Threads)
|
target_link_libraries(cpp_multi_device_example PRIVATE HailoRT::libhailort Threads::Threads)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
add_executable(cpp_multi_network_vstream_example multi_network_vstream_example.cpp)
|
add_executable(cpp_multi_network_vstream_example multi_network_vstream_example.cpp)
|
||||||
target_link_libraries(cpp_multi_network_vstream_example PRIVATE HailoRT::libhailort Threads::Threads)
|
target_link_libraries(cpp_multi_network_vstream_example PRIVATE HailoRT::libhailort Threads::Threads)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
add_executable(cpp_multi_process_example multi_process_example.cpp)
|
add_executable(cpp_multi_process_example multi_process_example.cpp)
|
||||||
target_link_libraries(cpp_multi_process_example PRIVATE HailoRT::libhailort Threads::Threads)
|
target_link_libraries(cpp_multi_process_example PRIVATE HailoRT::libhailort Threads::Threads)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.0.0)
|
cmake_minimum_required(VERSION 3.0.0)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
add_executable(cpp_notification_callback_example notification_callback_example.cpp)
|
add_executable(cpp_notification_callback_example notification_callback_example.cpp)
|
||||||
target_link_libraries(cpp_notification_callback_example PRIVATE HailoRT::libhailort)
|
target_link_libraries(cpp_notification_callback_example PRIVATE HailoRT::libhailort)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.0.0)
|
cmake_minimum_required(VERSION 3.0.0)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
add_executable(cpp_power_measurement_example power_measurement_example.cpp)
|
add_executable(cpp_power_measurement_example power_measurement_example.cpp)
|
||||||
target_link_libraries(cpp_power_measurement_example PRIVATE HailoRT::libhailort)
|
target_link_libraries(cpp_power_measurement_example PRIVATE HailoRT::libhailort)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
add_executable(cpp_raw_async_streams_multi_thread_example raw_async_streams_multi_thread_example.cpp)
|
add_executable(cpp_raw_async_streams_multi_thread_example raw_async_streams_multi_thread_example.cpp)
|
||||||
target_link_libraries(cpp_raw_async_streams_multi_thread_example PRIVATE HailoRT::libhailort Threads::Threads)
|
target_link_libraries(cpp_raw_async_streams_multi_thread_example PRIVATE HailoRT::libhailort Threads::Threads)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
add_executable(cpp_raw_async_streams_single_thread_example raw_async_streams_single_thread_example.cpp)
|
add_executable(cpp_raw_async_streams_single_thread_example raw_async_streams_single_thread_example.cpp)
|
||||||
target_link_libraries(cpp_raw_async_streams_single_thread_example PRIVATE HailoRT::libhailort Threads::Threads)
|
target_link_libraries(cpp_raw_async_streams_single_thread_example PRIVATE HailoRT::libhailort Threads::Threads)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
add_executable(cpp_raw_streams_example raw_streams_example.cpp)
|
add_executable(cpp_raw_streams_example raw_streams_example.cpp)
|
||||||
target_link_libraries(cpp_raw_streams_example PRIVATE HailoRT::libhailort Threads::Threads)
|
target_link_libraries(cpp_raw_streams_example PRIVATE HailoRT::libhailort Threads::Threads)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
add_executable(cpp_switch_network_groups_example switch_network_groups_example.cpp)
|
add_executable(cpp_switch_network_groups_example switch_network_groups_example.cpp)
|
||||||
target_link_libraries(cpp_switch_network_groups_example PRIVATE HailoRT::libhailort Threads::Threads)
|
target_link_libraries(cpp_switch_network_groups_example PRIVATE HailoRT::libhailort Threads::Threads)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
add_executable(cpp_switch_network_groups_manually_example switch_network_groups_manually_example.cpp)
|
add_executable(cpp_switch_network_groups_manually_example switch_network_groups_manually_example.cpp)
|
||||||
target_link_libraries(cpp_switch_network_groups_manually_example PRIVATE HailoRT::libhailort Threads::Threads)
|
target_link_libraries(cpp_switch_network_groups_manually_example PRIVATE HailoRT::libhailort Threads::Threads)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0.0)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(HailoRT 4.16.1 EXACT REQUIRED)
|
find_package(HailoRT 4.16.2 EXACT REQUIRED)
|
||||||
|
|
||||||
add_executable(cpp_vstreams_example vstreams_example.cpp)
|
add_executable(cpp_vstreams_example vstreams_example.cpp)
|
||||||
target_link_libraries(cpp_vstreams_example PRIVATE HailoRT::libhailort Threads::Threads)
|
target_link_libraries(cpp_vstreams_example PRIVATE HailoRT::libhailort Threads::Threads)
|
||||||
|
|||||||
@@ -88,6 +88,14 @@ Expected<hailo_device_identity_t> control__parse_identify_results(CONTROL_PROTOC
|
|||||||
|
|
||||||
board_info.device_architecture = static_cast<hailo_device_architecture_t>(BYTE_ORDER__ntohl(identify_response->device_architecture));
|
board_info.device_architecture = static_cast<hailo_device_architecture_t>(BYTE_ORDER__ntohl(identify_response->device_architecture));
|
||||||
|
|
||||||
|
// Device architecture can be HAILO_ARCH_HAILO15H or HAILO_ARCH_HAILO15M - but the FW will always return HAILO_ARCH_HAILO15H
|
||||||
|
// Based on a file the SCU gives us we can deduce the actual type
|
||||||
|
if (HAILO_ARCH_HAILO15H == board_info.device_architecture) {
|
||||||
|
auto dev_arch_exp = PartialClusterReader::get_actual_dev_arch_from_fuse(board_info.device_architecture);
|
||||||
|
CHECK_EXPECTED(dev_arch_exp);
|
||||||
|
board_info.device_architecture = dev_arch_exp.release();
|
||||||
|
}
|
||||||
|
|
||||||
/* Write identify results to log */
|
/* Write identify results to log */
|
||||||
LOGGER__INFO("firmware_version is: {}.{}.{}",
|
LOGGER__INFO("firmware_version is: {}.{}.{}",
|
||||||
board_info.fw_version.major,
|
board_info.fw_version.major,
|
||||||
@@ -3065,15 +3073,22 @@ Expected<uint32_t> Control::get_partial_clusters_layout_bitmap(Device &device)
|
|||||||
return std::stoi(std::string(force_layout_env));
|
return std::stoi(std::string(force_layout_env));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto device_arch_exp = device.get_architecture();
|
auto dev_arch_exp = device.get_architecture();
|
||||||
CHECK_EXPECTED(device_arch_exp);
|
CHECK_EXPECTED(dev_arch_exp);
|
||||||
if (HAILO_ARCH_HAILO8L != device_arch_exp.value() && HAILO_ARCH_HAILO15M != device_arch_exp.value()) {
|
const auto dev_arch = dev_arch_exp.release();
|
||||||
|
// In Both cases of Hailo15H and Hailo15M read fuse file (If no file found will return default value of all clusters)
|
||||||
|
if ((HAILO_ARCH_HAILO15H == dev_arch) || (HAILO_ARCH_HAILO15M == dev_arch)) {
|
||||||
|
auto bitmap_exp = PartialClusterReader::get_partial_clusters_layout_bitmap(dev_arch);
|
||||||
|
CHECK_EXPECTED(bitmap_exp);
|
||||||
|
const auto bitmap = bitmap_exp.release();
|
||||||
|
if (PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15_DEFAULT == bitmap) {
|
||||||
|
return Expected<uint32_t>(PARTIAL_CLUSTERS_LAYOUT_IGNORE);
|
||||||
|
} else {
|
||||||
|
return Expected<uint32_t>(bitmap);
|
||||||
|
}
|
||||||
|
} else if (HAILO_ARCH_HAILO8L != dev_arch) {
|
||||||
// Partial clusters layout is only relevant in HAILO_ARCH_HAILO8L and HAILO_ARCH_HAILO15M arch
|
// Partial clusters layout is only relevant in HAILO_ARCH_HAILO8L and HAILO_ARCH_HAILO15M arch
|
||||||
return Expected<uint32_t>(PARTIAL_CLUSTERS_LAYOUT_IGNORE);
|
return Expected<uint32_t>(PARTIAL_CLUSTERS_LAYOUT_IGNORE);
|
||||||
}
|
|
||||||
|
|
||||||
if (HAILO_ARCH_HAILO15M == device_arch_exp.value()) {
|
|
||||||
return PartialClusterReader::get_partial_clusters_layout_bitmap(device_arch_exp.value());
|
|
||||||
} else {
|
} else {
|
||||||
auto extended_device_info_response = get_extended_device_info_response(device);
|
auto extended_device_info_response = get_extended_device_info_response(device);
|
||||||
CHECK_EXPECTED(extended_device_info_response);
|
CHECK_EXPECTED(extended_device_info_response);
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
**/
|
**/
|
||||||
|
|
||||||
#include "hailo/hailort_common.hpp"
|
#include "hailo/hailort_common.hpp"
|
||||||
|
#include "common/filesystem.hpp"
|
||||||
#include "partial_cluster_reader.hpp"
|
#include "partial_cluster_reader.hpp"
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
@@ -17,12 +17,24 @@
|
|||||||
namespace hailort
|
namespace hailort
|
||||||
{
|
{
|
||||||
|
|
||||||
Expected<uint32_t> PartialClusterReader::get_arch_default_bitmap(const hailo_device_architecture_t dev_arch)
|
// SKU is three bit value in fuse file in order to differentiate the different kind of boards
|
||||||
|
#define SKU_VALUE_BITMAP (0x7)
|
||||||
|
#define HAILO15H_SKU_VALUE (0x0)
|
||||||
|
#define HAILO15M_SKU_VALUE (0x3)
|
||||||
|
|
||||||
|
// SKU and partial cluster layout bitmap are located at specific locations in the fuse file according to the spec
|
||||||
|
// Located in issue HRT-12971
|
||||||
|
#define SKU_BYTE_INDEX_IN_FUSE_FILE (32)
|
||||||
|
#define SKU_BIT_INDEX_IN_WORD (18)
|
||||||
|
#define ACTIVE_CLUSTER_LAYOUT_BITMAP_INDEX_IN_FUSE_FILE (80)
|
||||||
|
|
||||||
|
Expected<uint32_t> PartialClusterReader::get_arch_default_bitmap(hailo_device_architecture_t dev_arch)
|
||||||
{
|
{
|
||||||
switch(dev_arch) {
|
switch(dev_arch) {
|
||||||
// Currently only supported architecture for this function is HAILO15M - but in future can add more
|
// Currently only supported architectures for this function are HAILO15H and HAILO15M - but in future can add
|
||||||
|
case HAILO_ARCH_HAILO15H:
|
||||||
case HAILO_ARCH_HAILO15M:
|
case HAILO_ARCH_HAILO15M:
|
||||||
return static_cast<uint32_t>(PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_DEFAULT);
|
return static_cast<uint32_t>(PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15_DEFAULT);
|
||||||
default:
|
default:
|
||||||
LOGGER__ERROR("Error, Given architecture {} doesnt support partial cluster layout",
|
LOGGER__ERROR("Error, Given architecture {} doesnt support partial cluster layout",
|
||||||
HailoRTCommon::get_device_arch_str(dev_arch));
|
HailoRTCommon::get_device_arch_str(dev_arch));
|
||||||
@@ -30,49 +42,133 @@ Expected<uint32_t> PartialClusterReader::get_arch_default_bitmap(const hailo_dev
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PartialClusterReader::validate_arch_partial_clusters_bitmap(const hailo_device_architecture_t dev_arch,
|
bool PartialClusterReader::validate_arch_partial_clusters_bitmap(uint32_t bitmap, uint8_t sku_value)
|
||||||
const uint32_t bitmap)
|
|
||||||
{
|
{
|
||||||
switch(dev_arch) {
|
// Currently only supported architectures for this function are HAILO15H and HAILO15M - but in future can add
|
||||||
// Currently only supported architecture for this function is HAILO15M - but in future can add more
|
switch (sku_value) {
|
||||||
case HAILO_ARCH_HAILO15M:
|
case HAILO15H_SKU_VALUE:
|
||||||
|
return (PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15_DEFAULT == bitmap);
|
||||||
|
case HAILO15M_SKU_VALUE:
|
||||||
return (std::find(HAILO15M__PARTIAL_CLUSTERS_LAYOUT_BITMAP_ARRAY.begin(),
|
return (std::find(HAILO15M__PARTIAL_CLUSTERS_LAYOUT_BITMAP_ARRAY.begin(),
|
||||||
HAILO15M__PARTIAL_CLUSTERS_LAYOUT_BITMAP_ARRAY.end(), bitmap) !=
|
HAILO15M__PARTIAL_CLUSTERS_LAYOUT_BITMAP_ARRAY.end(), bitmap) !=
|
||||||
HAILO15M__PARTIAL_CLUSTERS_LAYOUT_BITMAP_ARRAY.end());
|
HAILO15M__PARTIAL_CLUSTERS_LAYOUT_BITMAP_ARRAY.end());
|
||||||
default:
|
default:
|
||||||
LOGGER__ERROR("Error, Given architecture {} doesnt support partial cluster layout",
|
|
||||||
HailoRTCommon::get_device_arch_str(dev_arch));
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Expected<uint32_t> PartialClusterReader::get_partial_clusters_layout_bitmap(const hailo_device_architecture_t dev_arch)
|
// NOTE: This Function assumes fuse file exists - and file not being able to be opened is considered error
|
||||||
|
Expected<std::pair<uint32_t, uint8_t>> PartialClusterReader::read_fuse_file()
|
||||||
{
|
{
|
||||||
std::ifstream layout_bitmap_file;
|
std::ifstream layout_bitmap_file;
|
||||||
layout_bitmap_file.open(PARTIAL_CLUSTER_READER_CLUSTER_LAYOUT_FILE_PATH, std::ios::binary);
|
layout_bitmap_file.open(PARTIAL_CLUSTER_READER_CLUSTER_LAYOUT_FILE_PATH, std::ios::binary);
|
||||||
if (!layout_bitmap_file.is_open()) {
|
|
||||||
LOGGER__WARNING("partial cluster layout bitmap file not found, Enabling all clusters by default");
|
CHECK_AS_EXPECTED(layout_bitmap_file.is_open(), HAILO_OPEN_FILE_FAILURE, "Failed Opening layout bitmap file {}",
|
||||||
return get_arch_default_bitmap(dev_arch);
|
PARTIAL_CLUSTER_READER_CLUSTER_LAYOUT_FILE_PATH);
|
||||||
}
|
|
||||||
|
// SKU is located at SKU_BYTE_INDEX_IN_FUSE_FILE
|
||||||
|
layout_bitmap_file.seekg(SKU_BYTE_INDEX_IN_FUSE_FILE, std::ios::beg);
|
||||||
|
CHECK_AS_EXPECTED(layout_bitmap_file.good(), HAILO_FILE_OPERATION_FAILURE, "Failed seek in fuse file");
|
||||||
|
|
||||||
|
// Read SKU value from file as well to validate arch type
|
||||||
|
uint32_t misc_word = 0;
|
||||||
|
layout_bitmap_file.read(reinterpret_cast<char*>(&misc_word), sizeof(misc_word));
|
||||||
|
CHECK_AS_EXPECTED(layout_bitmap_file.good(), HAILO_FILE_OPERATION_FAILURE, "Failed reading fuse file");
|
||||||
|
uint8_t sku_value = ((misc_word >> SKU_BIT_INDEX_IN_WORD) & SKU_VALUE_BITMAP);
|
||||||
|
|
||||||
|
// active clusters bitmap is located at ACTIVE_CLUSTER_LAYOUT_BITMAP_INDEX_IN_FUSE_FILE
|
||||||
|
layout_bitmap_file.seekg(ACTIVE_CLUSTER_LAYOUT_BITMAP_INDEX_IN_FUSE_FILE, std::ios::beg);
|
||||||
|
CHECK_AS_EXPECTED(layout_bitmap_file.good(), HAILO_FILE_OPERATION_FAILURE, "Failed seek in fuse file");
|
||||||
|
|
||||||
uint32_t partial_clusters_layout_bitmap = 0;
|
uint32_t partial_clusters_layout_bitmap = 0;
|
||||||
layout_bitmap_file.read(reinterpret_cast<char*>(&partial_clusters_layout_bitmap),
|
layout_bitmap_file.read(reinterpret_cast<char*>(&partial_clusters_layout_bitmap),
|
||||||
sizeof(partial_clusters_layout_bitmap));
|
sizeof(partial_clusters_layout_bitmap));
|
||||||
|
CHECK_AS_EXPECTED(layout_bitmap_file.good(), HAILO_FILE_OPERATION_FAILURE, "Failed reading fuse file");
|
||||||
|
|
||||||
// Fuse file represents clusters that are enabled with 0 in bit value and clusters that are disabled with 1
|
|
||||||
// We also ignore all the MSB's that dont represent clusters.
|
|
||||||
// Therefore, after reading the uint32 layout - we mask with the default bitmap and bitwise flip the
|
|
||||||
// relevant bits so that 1 will represent enabled clusters
|
|
||||||
const auto arch_bitmap_mask_exp = get_arch_default_bitmap(dev_arch);
|
|
||||||
CHECK_EXPECTED(arch_bitmap_mask_exp);
|
|
||||||
partial_clusters_layout_bitmap = (~partial_clusters_layout_bitmap & arch_bitmap_mask_exp.value());
|
|
||||||
layout_bitmap_file.close();
|
layout_bitmap_file.close();
|
||||||
|
|
||||||
CHECK_AS_EXPECTED(validate_arch_partial_clusters_bitmap(dev_arch, partial_clusters_layout_bitmap),
|
CHECK_AS_EXPECTED(validate_arch_partial_clusters_bitmap(partial_clusters_layout_bitmap, sku_value),
|
||||||
HAILO_INTERNAL_FAILURE, "Error, Invalid partial clusters bitmap value given {}",
|
HAILO_INTERNAL_FAILURE, "Error, Given SKU value {} doesnt support partial cluster layout {}", sku_value,
|
||||||
partial_clusters_layout_bitmap);
|
partial_clusters_layout_bitmap);
|
||||||
|
|
||||||
return partial_clusters_layout_bitmap;
|
return std::make_pair(partial_clusters_layout_bitmap, static_cast<uint8_t>(sku_value));
|
||||||
|
}
|
||||||
|
|
||||||
|
Expected<uint8_t> PartialClusterReader::get_sku_value_from_arch(hailo_device_architecture_t dev_arch)
|
||||||
|
{
|
||||||
|
switch(dev_arch) {
|
||||||
|
// Currently only supported architectures for this function are HAILO15H and HAILO15M - but in future can add
|
||||||
|
case HAILO_ARCH_HAILO15H:
|
||||||
|
return HAILO15H_SKU_VALUE;
|
||||||
|
case HAILO_ARCH_HAILO15M:
|
||||||
|
return HAILO15M_SKU_VALUE;
|
||||||
|
default:
|
||||||
|
LOGGER__ERROR("Error, Unknown sku value for Given architecture {}",
|
||||||
|
HailoRTCommon::get_device_arch_str(dev_arch));
|
||||||
|
return make_unexpected(HAILO_INTERNAL_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Expected<uint32_t> PartialClusterReader::get_partial_clusters_layout_bitmap(hailo_device_architecture_t dev_arch)
|
||||||
|
{
|
||||||
|
std::pair<uint32_t, uint8_t> fuse_file_data;
|
||||||
|
|
||||||
|
// If file does not exist - get default values for dev_arch
|
||||||
|
if (!Filesystem::does_file_exists(std::string(PARTIAL_CLUSTER_READER_CLUSTER_LAYOUT_FILE_PATH))) {
|
||||||
|
LOGGER__INFO("partial cluster layout bitmap file not found, Enabling all clusters by default");
|
||||||
|
auto default_bitmap_exp = get_arch_default_bitmap(dev_arch);
|
||||||
|
CHECK_EXPECTED(default_bitmap_exp);
|
||||||
|
fuse_file_data.first = default_bitmap_exp.release();
|
||||||
|
|
||||||
|
auto sku_value_exp = get_sku_value_from_arch(dev_arch);
|
||||||
|
CHECK_EXPECTED(sku_value_exp);
|
||||||
|
fuse_file_data.second = sku_value_exp.release();
|
||||||
|
} else {
|
||||||
|
// This will read bitmap and verify with SKU value
|
||||||
|
auto fuse_file_exp = read_fuse_file();
|
||||||
|
CHECK_EXPECTED(fuse_file_exp);
|
||||||
|
fuse_file_data = fuse_file_exp.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto sku_value = fuse_file_data.second;
|
||||||
|
switch (dev_arch) {
|
||||||
|
case HAILO_ARCH_HAILO15H:
|
||||||
|
CHECK_AS_EXPECTED((HAILO15H_SKU_VALUE == sku_value), HAILO_INTERNAL_FAILURE,
|
||||||
|
"Device arch is of type {} but sku is {}", dev_arch, sku_value);
|
||||||
|
break;
|
||||||
|
case HAILO_ARCH_HAILO15M:
|
||||||
|
CHECK_AS_EXPECTED((HAILO15M_SKU_VALUE == sku_value), HAILO_INTERNAL_FAILURE,
|
||||||
|
"Device arch is of type {} but sku is {}", dev_arch, sku_value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOGGER__ERROR("Error, Device architecture {} doesnt support partial cluster layout", dev_arch);
|
||||||
|
return make_unexpected(HAILO_INTERNAL_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Expected<uint32_t>(fuse_file_data.first);
|
||||||
|
}
|
||||||
|
|
||||||
|
Expected<hailo_device_architecture_t> PartialClusterReader::get_actual_dev_arch_from_fuse(hailo_device_architecture_t fw_dev_arch)
|
||||||
|
{
|
||||||
|
// If fuse file does not exist - and fw_dev_arch is HAILO_ARCH_HAILO15H - then it is HAILO_ARCH_HAILO15H
|
||||||
|
if (!Filesystem::does_file_exists(std::string(PARTIAL_CLUSTER_READER_CLUSTER_LAYOUT_FILE_PATH))
|
||||||
|
&& (HAILO_ARCH_HAILO15H == fw_dev_arch)) {
|
||||||
|
return HAILO_ARCH_HAILO15H;
|
||||||
|
} else {
|
||||||
|
auto fuse_file_exp = read_fuse_file();
|
||||||
|
CHECK_EXPECTED(fuse_file_exp);
|
||||||
|
const auto fuse_file_data = fuse_file_exp.release();
|
||||||
|
|
||||||
|
const auto sku_value = fuse_file_data.second;
|
||||||
|
if (HAILO15M_SKU_VALUE == sku_value) {
|
||||||
|
return HAILO_ARCH_HAILO15M;
|
||||||
|
} else if (HAILO15H_SKU_VALUE == sku_value) {
|
||||||
|
return HAILO_ARCH_HAILO15H;
|
||||||
|
} else {
|
||||||
|
LOGGER__ERROR("Error, Invalid sku received {}", sku_value);
|
||||||
|
return make_unexpected(HAILO_INVALID_ARGUMENT);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* namespace hailort */
|
} /* namespace hailort */
|
||||||
|
|||||||
@@ -25,23 +25,34 @@ namespace hailort
|
|||||||
#define PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_0 ((0x1 << 1) | (0x1 << 2) | (0x1 << 3))
|
#define PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_0 ((0x1 << 1) | (0x1 << 2) | (0x1 << 3))
|
||||||
#define PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_1 ((0x1 << 0) | (0x1 << 2) | (0x1 << 3))
|
#define PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_1 ((0x1 << 0) | (0x1 << 2) | (0x1 << 3))
|
||||||
#define PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_2 ((0x1 << 0) | (0x1 << 1) | (0x1 << 4))
|
#define PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_2 ((0x1 << 0) | (0x1 << 1) | (0x1 << 4))
|
||||||
// Default is all clusters are enabled
|
|
||||||
#define PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_DEFAULT ((0x1 << 0) | (0x1 << 1) | (0x1 << 2) | (0x1 << 3) | (0x1 << 4))
|
|
||||||
|
|
||||||
constexpr const char* PARTIAL_CLUSTER_READER_CLUSTER_LAYOUT_FILE_PATH = "/sys/devices/platform/fuse";
|
#define HAILO15M_PARTIAL_CLUSTER_LAYOUTS_LIST PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_0,\
|
||||||
|
PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_1, PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_2
|
||||||
|
|
||||||
|
// Default is all clusters are enabled
|
||||||
|
#define PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15_DEFAULT ((0x1 << 0) | (0x1 << 1) | (0x1 << 2) | (0x1 << 3) | (0x1 << 4))
|
||||||
|
|
||||||
|
constexpr const char* PARTIAL_CLUSTER_READER_CLUSTER_LAYOUT_FILE_PATH = "/sys/devices/soc0/fuse";
|
||||||
|
|
||||||
// Array that has all the valid layouts for Hailo15M
|
// Array that has all the valid layouts for Hailo15M
|
||||||
static constexpr std::array<uint32_t, 4> HAILO15M__PARTIAL_CLUSTERS_LAYOUT_BITMAP_ARRAY = {
|
static constexpr std::array<uint32_t, 3> HAILO15M__PARTIAL_CLUSTERS_LAYOUT_BITMAP_ARRAY = {
|
||||||
PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_0, PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_1,
|
HAILO15M_PARTIAL_CLUSTER_LAYOUTS_LIST
|
||||||
PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_2, PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15M_DEFAULT
|
};
|
||||||
|
|
||||||
|
// Array that has all the valid layouts for Hailo15 (Either Hailo15M or Hailo15H)
|
||||||
|
static constexpr std::array<uint32_t, 4> HAILO15__PARTIAL_CLUSTERS_LAYOUT_BITMAP_ARRAY = {
|
||||||
|
HAILO15M_PARTIAL_CLUSTER_LAYOUTS_LIST, PARTIAL_CLUSTERS_LAYOUT_BITMAP__HAILO15_DEFAULT
|
||||||
};
|
};
|
||||||
|
|
||||||
class PartialClusterReader {
|
class PartialClusterReader {
|
||||||
public:
|
public:
|
||||||
static Expected<uint32_t> get_partial_clusters_layout_bitmap(const hailo_device_architecture_t dev_arch);
|
static Expected<uint32_t> get_partial_clusters_layout_bitmap(hailo_device_architecture_t dev_arch);
|
||||||
|
static Expected<hailo_device_architecture_t> get_actual_dev_arch_from_fuse(hailo_device_architecture_t fw_dev_arch);
|
||||||
private:
|
private:
|
||||||
static Expected<uint32_t> get_arch_default_bitmap(const hailo_device_architecture_t dev_arch);
|
static Expected<uint32_t> get_arch_default_bitmap(hailo_device_architecture_t dev_arch);
|
||||||
static bool validate_arch_partial_clusters_bitmap(const hailo_device_architecture_t dev_arch, const uint32_t bitmap);
|
static Expected<uint8_t> get_sku_value_from_arch(hailo_device_architecture_t dev_arch);
|
||||||
|
static bool validate_arch_partial_clusters_bitmap(uint32_t bitmap, uint8_t sku_value);
|
||||||
|
static Expected<std::pair<uint32_t, uint8_t>> read_fuse_file();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
@ECHO OFF
|
@ECHO OFF
|
||||||
|
|
||||||
set BASE_URI=https://hailo-hailort.s3.eu-west-2.amazonaws.com
|
set BASE_URI=https://hailo-hailort.s3.eu-west-2.amazonaws.com
|
||||||
set HRT_VERSION=4.16.1
|
set HRT_VERSION=4.16.2
|
||||||
set FW_DIR=Hailo8/%HRT_VERSION%/FW
|
set FW_DIR=Hailo8/%HRT_VERSION%/FW
|
||||||
set FW=hailo8_fw.%HRT_VERSION%_eth.bin
|
set FW=hailo8_fw.%HRT_VERSION%_eth.bin
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
readonly BASE_URI="https://hailo-hailort.s3.eu-west-2.amazonaws.com"
|
readonly BASE_URI="https://hailo-hailort.s3.eu-west-2.amazonaws.com"
|
||||||
readonly HRT_VERSION=4.16.1
|
readonly HRT_VERSION=4.16.2
|
||||||
readonly FW_AWS_DIR="Hailo8/${HRT_VERSION}/FW"
|
readonly FW_AWS_DIR="Hailo8/${HRT_VERSION}/FW"
|
||||||
readonly FW="hailo8_fw.${HRT_VERSION}_eth.bin"
|
readonly FW="hailo8_fw.${HRT_VERSION}_eth.bin"
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
:: cmd
|
:: cmd
|
||||||
@ECHO OFF
|
@ECHO OFF
|
||||||
set BASE_URI=https://hailo-hailort.s3.eu-west-2.amazonaws.com
|
set BASE_URI=https://hailo-hailort.s3.eu-west-2.amazonaws.com
|
||||||
set HRT_VERSION=4.16.1
|
set HRT_VERSION=4.16.2
|
||||||
set REMOTE_HEF_DIR=Hailo8/%HRT_VERSION%/HEFS
|
set REMOTE_HEF_DIR=Hailo8/%HRT_VERSION%/HEFS
|
||||||
set LOCAL_EXAMPLES_HEF_DIR=..\libhailort\examples\hefs
|
set LOCAL_EXAMPLES_HEF_DIR=..\libhailort\examples\hefs
|
||||||
set LOCAL_TUTORIALS_HEF_DIR=..\libhailort\bindings\python\platform\hailo_tutorials\hefs
|
set LOCAL_TUTORIALS_HEF_DIR=..\libhailort\bindings\python\platform\hailo_tutorials\hefs
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
readonly BASE_URI="https://hailo-hailort.s3.eu-west-2.amazonaws.com"
|
readonly BASE_URI="https://hailo-hailort.s3.eu-west-2.amazonaws.com"
|
||||||
readonly HRT_VERSION=4.16.1
|
readonly HRT_VERSION=4.16.2
|
||||||
readonly REMOTE_HEF_DIR="Hailo8/${HRT_VERSION}/HEFS"
|
readonly REMOTE_HEF_DIR="Hailo8/${HRT_VERSION}/HEFS"
|
||||||
readonly LOCAL_EXAMPLES_HEF_DIR="../libhailort/examples/hefs"
|
readonly LOCAL_EXAMPLES_HEF_DIR="../libhailort/examples/hefs"
|
||||||
readonly LOCAL_TUTORIALS_HEF_DIR="../libhailort/bindings/python/platform/hailo_tutorials/hefs"
|
readonly LOCAL_TUTORIALS_HEF_DIR="../libhailort/bindings/python/platform/hailo_tutorials/hefs"
|
||||||
|
|||||||
Reference in New Issue
Block a user