|
|
@@ -0,0 +1,662 @@ |
|
|
|
/** |
|
|
|
* Copyright 2021 Huawei Technologies Co., Ltd |
|
|
|
* |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
* You may obtain a copy of the License at |
|
|
|
* |
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
|
|
* |
|
|
|
* Unless required by applicable law or agreed to in writing, software |
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
|
|
* See the License for the specific language governing permissions and |
|
|
|
* limitations under the License. |
|
|
|
*/ |
|
|
|
|
|
|
|
#include <gtest/gtest.h> |
|
|
|
|
|
|
|
#define private public |
|
|
|
#define protected public |
|
|
|
|
|
|
|
#include "graph/load/model_manager/task_info/ffts_plus_task_info.h" |
|
|
|
#include "cce/aicpu_engine_struct.h" |
|
|
|
#include "common/ge/ge_util.h" |
|
|
|
#include "common/properties_manager.h" |
|
|
|
#include "framework/common/debug/ge_log.h" |
|
|
|
#include "framework/common/fmk_error_codes.h" |
|
|
|
#include "graph/attr_value.h" |
|
|
|
#include "graph/load/model_manager/davinci_model.h" |
|
|
|
#include "graph/load/model_manager/model_manager.h" |
|
|
|
|
|
|
|
namespace ge { |
|
|
|
extern OpDescPtr CreateOpDesc(string name, string type); |
|
|
|
|
|
|
|
class UtestFftsPlusTaskInfo : public testing::Test { |
|
|
|
protected: |
|
|
|
void SetUp() {} |
|
|
|
|
|
|
|
void TearDown() {} |
|
|
|
|
|
|
|
public: |
|
|
|
void InitTaskSQEInfo(domi::FftsPlusTaskDef *task_def) { |
|
|
|
domi::FftsPlusSqeDef *sqedef = task_def->mutable_ffts_plus_sqe(); |
|
|
|
//header |
|
|
|
domi::StarsSqeHeaderDef *headerdef = sqedef->mutable_sqe_header(); |
|
|
|
headerdef->set_l1_lock(1); |
|
|
|
headerdef->set_l1_unlock(1); |
|
|
|
headerdef->set_block_dim(1); |
|
|
|
//sqe |
|
|
|
sqedef->set_pmg(1); |
|
|
|
sqedef->set_ns(1); |
|
|
|
sqedef->set_part_id(1); |
|
|
|
sqedef->set_qos(1); |
|
|
|
|
|
|
|
sqedef->set_total_context_num(2); |
|
|
|
sqedef->set_ready_context_num(1); |
|
|
|
sqedef->set_preload_context_num(1); |
|
|
|
|
|
|
|
sqedef->set_dsplit_unit(1); |
|
|
|
sqedef->set_prefetch_ost_num(1); |
|
|
|
sqedef->set_cmaint_ost_num(1); |
|
|
|
|
|
|
|
sqedef->set_aic_prefetch_lower(1); |
|
|
|
sqedef->set_aic_prefetch_upper(1); |
|
|
|
sqedef->set_aiv_prefetch_lower(1); |
|
|
|
sqedef->set_aiv_prefetch_upper(1); |
|
|
|
} |
|
|
|
|
|
|
|
void InitTaskAdditionalDataInfo(domi::FftsPlusTaskDef *task_def) { |
|
|
|
domi::AdditionalDataDef *additionaldata = task_def->add_additional_data(); |
|
|
|
additionaldata->set_data_type(1); |
|
|
|
additionaldata->add_context_id(0); |
|
|
|
additionaldata->add_context_id(1); |
|
|
|
additionaldata->add_context_id(2); |
|
|
|
domi::AdditionalDataDef *additionaldata1 = task_def->add_additional_data(); |
|
|
|
additionaldata1->set_data_type(2); |
|
|
|
additionaldata1->add_context_id(0); |
|
|
|
additionaldata1->add_context_id(3); |
|
|
|
additionaldata1->add_context_id(5); |
|
|
|
} |
|
|
|
|
|
|
|
void InitAicAivCtx(domi::FftsPlusCtxDef *fftsplusctxdef) { |
|
|
|
domi::FftsPlusAicAivCtxDef *ctxdef = fftsplusctxdef->mutable_aic_aiv_ctx(); |
|
|
|
ctxdef->set_successor_num(26); |
|
|
|
ctxdef->set_aten(1); |
|
|
|
ctxdef->set_pred_cnt_init(1); |
|
|
|
ctxdef->set_pred_cnt(1); |
|
|
|
for (int i = 0; i < RT_CTX_SUCCESSOR_NUM; ++i) { |
|
|
|
ctxdef->add_successor_list(1); // 16 bits, len = 26 |
|
|
|
} |
|
|
|
ctxdef->set_stat(1); |
|
|
|
ctxdef->set_schem(1); |
|
|
|
ctxdef->set_atm(1); |
|
|
|
ctxdef->set_prefetch_enable_bitmap(1); |
|
|
|
ctxdef->set_prefetch_once_bitmap(1); |
|
|
|
|
|
|
|
ctxdef->set_thread_id(2); |
|
|
|
ctxdef->set_thread_dim(4); |
|
|
|
|
|
|
|
ctxdef->set_non_tail_block_dim(6); |
|
|
|
ctxdef->set_tail_block_dim(5); |
|
|
|
|
|
|
|
ctxdef->set_task_param_ptr_base(0x235689); |
|
|
|
ctxdef->set_task_param_ptr_offset(32); |
|
|
|
|
|
|
|
ctxdef->add_task_addr(0x125689); |
|
|
|
ctxdef->add_task_addr_offset(32); |
|
|
|
ctxdef->set_input_output_count(3); |
|
|
|
|
|
|
|
ctxdef->add_kernel_name("aictest"); |
|
|
|
for (int j = 1; j < 4; ++j) { |
|
|
|
ctxdef->add_src_slot(1); // len = 4, context ID for source data which is out of subgraph |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void InitMixAicAivCtx(domi::FftsPlusCtxDef *fftsplusctxdef) { |
|
|
|
domi::FftsPlusMixAicAivCtxDef *ctxdef = fftsplusctxdef->mutable_mix_aic_aiv_ctx(); |
|
|
|
ctxdef->set_successor_num(26); |
|
|
|
ctxdef->set_aten(1); |
|
|
|
ctxdef->set_pred_cnt_init(1); |
|
|
|
ctxdef->set_pred_cnt(1); |
|
|
|
for (int i = 1; i < RT_CTX_SUCCESSOR_NUM; ++i) { |
|
|
|
ctxdef->add_successor_list(1); // len = 26 |
|
|
|
} |
|
|
|
ctxdef->set_stat(1); |
|
|
|
ctxdef->set_schem(1); |
|
|
|
ctxdef->set_atm(1); |
|
|
|
ctxdef->set_prefetch_enable_bitmap(1); |
|
|
|
ctxdef->set_prefetch_once_bitmap(1); |
|
|
|
|
|
|
|
ctxdef->set_non_tail_block_ratio_n(1); |
|
|
|
ctxdef->set_tail_block_ratio_n(1); |
|
|
|
|
|
|
|
ctxdef->set_thread_id(1); |
|
|
|
ctxdef->set_thread_dim(1); |
|
|
|
|
|
|
|
ctxdef->set_non_tail_block_dim(1); |
|
|
|
ctxdef->set_tail_block_dim(1); |
|
|
|
|
|
|
|
ctxdef->set_aic_task_param_ptr(1); |
|
|
|
ctxdef->set_aic_task_param_ptr_offset(1); |
|
|
|
|
|
|
|
ctxdef->set_aiv_task_param_ptr(0x147852); |
|
|
|
ctxdef->set_aiv_task_param_ptr_offset(32); |
|
|
|
|
|
|
|
ctxdef->add_kernel_name("mixaic"); |
|
|
|
|
|
|
|
ctxdef->add_task_addr(0x258745); |
|
|
|
ctxdef->add_task_addr_offset(32); |
|
|
|
ctxdef->set_input_output_count(1); |
|
|
|
for (int j = 1; j < 4; ++j) { |
|
|
|
ctxdef->add_src_slot(1); // len = 4, context ID for source data which is out of subgraph |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void InitSdmaCtx(domi::FftsPlusCtxDef *fftsplusctxdef) { |
|
|
|
domi::FftsPlusSdmaCtxDef *ctxdef = fftsplusctxdef->mutable_sdma_ctx(); |
|
|
|
ctxdef->set_successor_num(26); |
|
|
|
ctxdef->set_aten(1); |
|
|
|
ctxdef->set_pred_cnt_init(1); |
|
|
|
ctxdef->set_pred_cnt(1); |
|
|
|
for (int i = 1; i < RT_CTX_SUCCESSOR_NUM; ++i) { |
|
|
|
ctxdef->add_successor_list(1); // len = 26 |
|
|
|
} |
|
|
|
ctxdef->set_sat(1); |
|
|
|
ctxdef->set_atm(1); |
|
|
|
|
|
|
|
ctxdef->set_thread_id(1); |
|
|
|
ctxdef->set_thread_dim(1); |
|
|
|
|
|
|
|
ctxdef->set_sdma_sqe_header(1); |
|
|
|
|
|
|
|
ctxdef->set_src_stream_id(1); |
|
|
|
ctxdef->set_src_sub_stream_id(1); |
|
|
|
ctxdef->set_dst_stream_id(1); |
|
|
|
ctxdef->set_dst_sub_stream_id(1); |
|
|
|
|
|
|
|
ctxdef->set_src_addr_base(0x457878); |
|
|
|
ctxdef->set_src_addr_offset(32); |
|
|
|
ctxdef->set_dst_addr_base(0x126547); |
|
|
|
ctxdef->set_dst_addr_offset(32); |
|
|
|
|
|
|
|
ctxdef->set_non_tail_data_len(1); |
|
|
|
ctxdef->set_tail_data_len(1); |
|
|
|
} |
|
|
|
|
|
|
|
void InitNotifyCtx(domi::FftsPlusCtxDef *fftsplusctxdef) { |
|
|
|
domi::FftsPlusNotifyCtxDef *ctxdef = fftsplusctxdef->mutable_notify_ctx(); |
|
|
|
ctxdef->set_successor_num(26); |
|
|
|
ctxdef->set_aten(1); |
|
|
|
ctxdef->set_pred_cnt_init(1); |
|
|
|
ctxdef->set_pred_cnt(1); |
|
|
|
for (int i = 1; i < RT_CTX_SUCCESSOR_NUM; ++i) { |
|
|
|
ctxdef->add_successor_list(1); // len = 26 |
|
|
|
} |
|
|
|
ctxdef->set_atm(1); |
|
|
|
|
|
|
|
ctxdef->set_thread_id(1); |
|
|
|
ctxdef->set_thread_dim(1); |
|
|
|
|
|
|
|
ctxdef->set_notify_id_base(1); |
|
|
|
} |
|
|
|
|
|
|
|
void InitWriteValueCtx(domi::FftsPlusCtxDef *fftsplusctxdef) { |
|
|
|
domi::FftsPlusWriteValueCtxDef *ctxdef = fftsplusctxdef->mutable_write_value_ctx(); |
|
|
|
ctxdef->set_successor_num(26); |
|
|
|
ctxdef->set_aten(1); |
|
|
|
ctxdef->set_pred_cnt_init(1); |
|
|
|
ctxdef->set_pred_cnt(1); |
|
|
|
for (int i = 1; i < RT_CTX_SUCCESSOR_NUM; ++i) { |
|
|
|
ctxdef->add_successor_list(1); // len = 26 |
|
|
|
} |
|
|
|
ctxdef->set_atm(1); |
|
|
|
|
|
|
|
ctxdef->set_thread_id(1); |
|
|
|
ctxdef->set_thread_dim(1); |
|
|
|
|
|
|
|
ctxdef->set_aw_size(1); |
|
|
|
ctxdef->set_snoop(1); |
|
|
|
ctxdef->set_aw_cache(1); |
|
|
|
ctxdef->set_aw_prot(1); |
|
|
|
ctxdef->set_va(1); |
|
|
|
|
|
|
|
ctxdef->set_write_addr_base(0x147852); |
|
|
|
ctxdef->set_write_addr_offset(32); |
|
|
|
|
|
|
|
ctxdef->add_write_value(1); |
|
|
|
} |
|
|
|
|
|
|
|
void InitAicpuCtxCtx(domi::FftsPlusCtxDef *fftsplusctxdef) { |
|
|
|
domi::FftsPlusAicpuCtxDef *ctxdef = fftsplusctxdef->mutable_aicpu_ctx(); |
|
|
|
ctxdef->set_successor_num(26); |
|
|
|
ctxdef->set_aten(1); |
|
|
|
ctxdef->set_pred_cnt_init(1); |
|
|
|
ctxdef->set_pred_cnt(1); |
|
|
|
for (int j = 1; j < RT_CTX_SUCCESSOR_NUM; ++j) { |
|
|
|
ctxdef->add_successor_context_id(1); // len = 26 |
|
|
|
} |
|
|
|
ctxdef->set_atm(1); |
|
|
|
|
|
|
|
ctxdef->set_sqe_index(1); |
|
|
|
ctxdef->set_kernel_type(1); |
|
|
|
ctxdef->set_bm(1); |
|
|
|
ctxdef->set_topic_type(1); |
|
|
|
ctxdef->set_qos(1); |
|
|
|
|
|
|
|
ctxdef->set_thread_id(1); |
|
|
|
ctxdef->set_thread_dim(1); |
|
|
|
|
|
|
|
ctxdef->set_non_tail_block_dim(1); |
|
|
|
ctxdef->set_tail_block_dim(1); |
|
|
|
for (int i = 1; i < 9; ++i) { |
|
|
|
ctxdef->add_user_data(1); // len = 9 |
|
|
|
} |
|
|
|
ctxdef->set_sub_topic_id(1); |
|
|
|
ctxdef->set_topic_id(1); |
|
|
|
ctxdef->set_group_id(1); |
|
|
|
ctxdef->set_user_data_len(64); |
|
|
|
|
|
|
|
ctxdef->set_task_param_offset(32); |
|
|
|
} |
|
|
|
|
|
|
|
void InitDataCtx(domi::FftsPlusCtxDef *fftsplusctxdef) { |
|
|
|
domi::FftsPlusDataCtxDef *ctxdef = fftsplusctxdef->mutable_data_ctx(); |
|
|
|
ctxdef->set_successor_num(26); |
|
|
|
ctxdef->set_aten(1); |
|
|
|
ctxdef->set_cnt_init(1); |
|
|
|
ctxdef->set_cnt(1); |
|
|
|
for (int i = 1; i < RT_CTX_SUCCESSOR_NUM; ++i) { |
|
|
|
ctxdef->add_successor_list(1); // len = 26 |
|
|
|
} |
|
|
|
ctxdef->set_atm(1); |
|
|
|
|
|
|
|
ctxdef->set_orig_consumer_counter(1); |
|
|
|
ctxdef->set_run_consumer_counter(1); |
|
|
|
|
|
|
|
ctxdef->set_thread_id(1); |
|
|
|
ctxdef->set_thread_dim(1); |
|
|
|
|
|
|
|
ctxdef->set_addr_base(0x125478); |
|
|
|
ctxdef->set_addr_offset(32); |
|
|
|
|
|
|
|
ctxdef->set_non_tail_num_outter(1); |
|
|
|
ctxdef->set_non_tail_num_inner(1); |
|
|
|
ctxdef->set_non_tail_len_inner(1); |
|
|
|
ctxdef->set_non_tail_stride_outter(1); |
|
|
|
ctxdef->set_non_tail_stride_inner(1); |
|
|
|
|
|
|
|
ctxdef->set_tail_num_outter(1); |
|
|
|
ctxdef->set_tail_num_inner(1); |
|
|
|
ctxdef->set_tail_len_inner(1); |
|
|
|
ctxdef->set_tail_stride_outter(1); |
|
|
|
ctxdef->set_tail_stride_inner(1); |
|
|
|
} |
|
|
|
|
|
|
|
void InitAtStartCtx(domi::FftsPlusCtxDef *fftsplusctxdef) { |
|
|
|
domi::FftsPlusAtStartCtxDef *ctxdef = fftsplusctxdef->mutable_at_start_ctx(); |
|
|
|
ctxdef->set_successor_num(26); |
|
|
|
ctxdef->set_aten(1); |
|
|
|
ctxdef->set_pred_cnt_init(1); |
|
|
|
ctxdef->set_pred_cnt(1); |
|
|
|
for (int i = 1; i < RT_CTX_SUCCESSOR_NUM; ++i) { |
|
|
|
ctxdef->add_successor_list(i); // len = 26 |
|
|
|
} |
|
|
|
ctxdef->set_thread_id(1); |
|
|
|
ctxdef->set_thread_dim(1); |
|
|
|
|
|
|
|
ctxdef->set_thread_id_init(1); |
|
|
|
ctxdef->set_thread_window_size(1); |
|
|
|
} |
|
|
|
|
|
|
|
void InitAtEndCtx(domi::FftsPlusCtxDef *fftsplusctxdef) { |
|
|
|
domi::FftsPlusAtEndCtxDef *ctxdef = fftsplusctxdef->mutable_at_end_ctx(); |
|
|
|
ctxdef->set_at_start_slot_num(12); |
|
|
|
ctxdef->set_out_label_slot_num(12); |
|
|
|
ctxdef->set_aten(1); |
|
|
|
|
|
|
|
ctxdef->set_pred_cnt_init(1); |
|
|
|
ctxdef->set_pred_cnt(1); |
|
|
|
for (int i = 1; i < RT_CTX_SUCC_AT_START_SLOT_NUM; ++i) { |
|
|
|
ctxdef->add_succ_at_start_slot(i); // len = 12 |
|
|
|
ctxdef->add_succ_out_label_slot(1); // len = 12 |
|
|
|
} |
|
|
|
|
|
|
|
ctxdef->set_thread_id(1); |
|
|
|
} |
|
|
|
|
|
|
|
void InitLabelCtx(domi::FftsPlusCtxDef *fftsplusctxdef) { |
|
|
|
domi::FftsPlusLabelCtxDef *ctxdef = fftsplusctxdef->mutable_label_ctx(); |
|
|
|
ctxdef->set_successor_num(26); |
|
|
|
ctxdef->set_pred_cnt_init(1); |
|
|
|
ctxdef->set_pred_cnt(1); |
|
|
|
for (int i = 1; i < RT_CTX_SUCCESSOR_NUM; ++i) { |
|
|
|
ctxdef->add_successor_list(1); // len = 26 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void InitCaseSwitchCtx(domi::FftsPlusCtxDef *fftsplusctxdef) { |
|
|
|
domi::FftsPlusCaseSwitchCtxDef *ctxdef = fftsplusctxdef->mutable_case_switch_ctx(); |
|
|
|
ctxdef->set_successor_num(26); |
|
|
|
ctxdef->set_aten(32); |
|
|
|
ctxdef->set_start_label_id(32); |
|
|
|
ctxdef->set_label_list_len(32); |
|
|
|
ctxdef->set_pred_cnt_init(32); |
|
|
|
ctxdef->set_pred_cnt(32); |
|
|
|
for (int i = 1; i < RT_CTX_SUCCESSOR_NUM; ++i) { |
|
|
|
ctxdef->add_successor_list(1); // len = 26 |
|
|
|
} |
|
|
|
ctxdef->set_atm(32); |
|
|
|
|
|
|
|
ctxdef->set_thread_id(32); |
|
|
|
ctxdef->set_thread_dim(32); |
|
|
|
|
|
|
|
ctxdef->set_ar_size(32); |
|
|
|
ctxdef->set_snoop(32); |
|
|
|
ctxdef->set_ar_cache(32); |
|
|
|
ctxdef->set_ar_prot(32); |
|
|
|
ctxdef->set_va(32); |
|
|
|
|
|
|
|
ctxdef->set_load_addr0_base(0x123456); |
|
|
|
ctxdef->set_ld0_en(32); |
|
|
|
ctxdef->set_load_addr0_offset(32); |
|
|
|
|
|
|
|
ctxdef->set_load_addr1_base(0x12457); |
|
|
|
ctxdef->set_ld1_en(32); |
|
|
|
ctxdef->set_load_addr1_offset(32); |
|
|
|
} |
|
|
|
|
|
|
|
void InitCaseDefaultCtx(domi::FftsPlusCtxDef *fftsplusctxdef) { |
|
|
|
domi::FftsPlusCaseDefaultCtxDef *ctxdef = fftsplusctxdef->mutable_case_default_ctx(); |
|
|
|
ctxdef->set_successor_num(26); |
|
|
|
ctxdef->set_aten(32); |
|
|
|
ctxdef->set_start_label_id(1); |
|
|
|
ctxdef->set_label_list_len(32); |
|
|
|
ctxdef->set_pred_cnt_init(1); |
|
|
|
ctxdef->set_pred_cnt(32); |
|
|
|
for (int i = 1; i < RT_CTX_SUCCESSOR_NUM; ++i) { |
|
|
|
ctxdef->add_successor_list(2); // len = 26 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void InitCondSwitchCtx(domi::FftsPlusCtxDef *fftsplusctxdef) { |
|
|
|
domi::FftsPlusCondSwitchCtxDef *ctxdef = fftsplusctxdef->mutable_cond_switch_ctx(); |
|
|
|
ctxdef->set_true_successor_num(12); |
|
|
|
ctxdef->set_false_successor_num(14); |
|
|
|
ctxdef->set_aten(32); |
|
|
|
|
|
|
|
ctxdef->set_condition(32); |
|
|
|
ctxdef->set_pred_cnt_init(32); |
|
|
|
ctxdef->set_pred_cnt(32); |
|
|
|
|
|
|
|
for (int i = 1; i < RT_CTX_FALSE_SUCCESSOR_NUM; ++i) { |
|
|
|
if (i < RT_CTX_TRUE_SUCCESSOR_NUM) { |
|
|
|
ctxdef->add_true_successor_list(1); // len = 12 |
|
|
|
} |
|
|
|
ctxdef->add_false_successor_list(1); // len = 14 |
|
|
|
} |
|
|
|
ctxdef->set_atm(32); |
|
|
|
|
|
|
|
ctxdef->set_thread_id(1); |
|
|
|
ctxdef->set_thread_dim(32); |
|
|
|
|
|
|
|
ctxdef->set_ar_size(32); |
|
|
|
ctxdef->set_snoop(32); |
|
|
|
ctxdef->set_ar_cache(32); |
|
|
|
ctxdef->set_ar_prot(32); |
|
|
|
ctxdef->set_va(32); |
|
|
|
|
|
|
|
ctxdef->set_load_addr0_base(0x142545); |
|
|
|
ctxdef->set_ld0_en(32); |
|
|
|
ctxdef->set_load_addr0_offset(32); |
|
|
|
|
|
|
|
ctxdef->set_load_addr1_base(0x365451); |
|
|
|
ctxdef->set_ld1_en(64); |
|
|
|
ctxdef->set_load_addr1_offset(32); |
|
|
|
|
|
|
|
ctxdef->set_cmp_value_1(1); |
|
|
|
ctxdef->set_cmp_value_2(1); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// test FftsPlusTaskInfo Init software ctx |
|
|
|
TEST_F(UtestFftsPlusTaskInfo, success_ffts_plus_task_info_software_ctx) { |
|
|
|
DavinciModel davinci_model(0, nullptr); |
|
|
|
rtStream_t stream = nullptr; |
|
|
|
rtStreamCreate(&stream, 0); |
|
|
|
davinci_model.stream_list_ = { stream }; |
|
|
|
domi::TaskDef task_def; |
|
|
|
task_def.set_stream_id(0); |
|
|
|
|
|
|
|
domi::FftsPlusTaskDef *ffts_plus_task_def = task_def.mutable_ffts_plus_task(); |
|
|
|
FftsPlusTaskInfo ffts_plus_task_info; |
|
|
|
// init failed when model without op_desc |
|
|
|
EXPECT_EQ(ffts_plus_task_info.Init(task_def, &davinci_model), PARAM_INVALID); |
|
|
|
|
|
|
|
davinci_model.op_list_[0] = CreateOpDesc("test", PARTITIONEDCALL); |
|
|
|
ffts_plus_task_def->set_op_index(0); |
|
|
|
ffts_plus_task_def->set_addr_size(2); |
|
|
|
|
|
|
|
rtFftsPlusTaskInfo_t sub_task_info; |
|
|
|
ffts_plus_task_info.ffts_plus_task_info_ = sub_task_info; |
|
|
|
ffts_plus_task_info.io_addrs_ = { (void*)0x12345678, (void*)0x22345678 }; |
|
|
|
|
|
|
|
InitTaskSQEInfo(ffts_plus_task_def); |
|
|
|
InitTaskAdditionalDataInfo(ffts_plus_task_def); |
|
|
|
|
|
|
|
domi::FftsPlusCtxDef *startctx = ffts_plus_task_def->add_ffts_plus_ctx(); |
|
|
|
startctx->set_op_index(0); |
|
|
|
startctx->set_hardware_ctx_type(0); |
|
|
|
startctx->set_software_ctx_type(static_cast<uint32_t>(RT_SOFT_CTX_TYPE_AT_START)); |
|
|
|
InitAtStartCtx(startctx); |
|
|
|
|
|
|
|
EXPECT_EQ(ffts_plus_task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
startctx->at_start_ctx().add_successor_list(1); |
|
|
|
EXPECT_EQ(ffts_plus_task_info.Init(task_def, &davinci_model), SUCCESS); |
|
|
|
|
|
|
|
domi::FftsPlusCtxDef *endctx = ffts_plus_task_def->add_ffts_plus_ctx(); |
|
|
|
endctx->set_op_index(0); |
|
|
|
endctx->set_hardware_ctx_type(0); |
|
|
|
endctx->set_software_ctx_type(static_cast<uint32_t>(RT_SOFT_CTX_TYPE_AT_END)); |
|
|
|
InitAtEndCtx(endctx); |
|
|
|
|
|
|
|
EXPECT_EQ(ffts_plus_task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
endctx->at_end_ctx().add_succ_at_start_slot(1); |
|
|
|
EXPECT_EQ(ffts_plus_task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
endctx->at_end_ctx().add_succ_out_label_slot(1); |
|
|
|
EXPECT_EQ(ffts_plus_task_info.Init(task_def, &davinci_model), SUCCESS); |
|
|
|
|
|
|
|
domi::FftsPlusCtxDef *labelctx = ffts_plus_task_def->add_ffts_plus_ctx(); |
|
|
|
labelctx->set_op_index(0); |
|
|
|
labelctx->set_hardware_ctx_type(0); |
|
|
|
labelctx->set_software_ctx_type(static_cast<uint32_t>(RT_SOFT_CTX_TYPE_LABEL)); |
|
|
|
InitLabelCtx(labelctx); |
|
|
|
EXPECT_EQ(ffts_plus_task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
labelctx->label_ctx().add_successor_list(1); |
|
|
|
EXPECT_EQ(ffts_plus_task_info.Init(task_def, &davinci_model), SUCCESS); |
|
|
|
} |
|
|
|
|
|
|
|
// test FftsPlusTaskInfo Init hardware ctx |
|
|
|
TEST_F(UtestFftsPlusTaskInfo, success_ffts_plus_task_info_hardware_ctx) { |
|
|
|
DavinciModel davinci_model(0, nullptr); |
|
|
|
domi::TaskDef task_def; |
|
|
|
FftsPlusTaskInfo task_info; |
|
|
|
rtStream_t stream = nullptr; |
|
|
|
rtStreamCreate(&stream, 0); |
|
|
|
davinci_model.stream_list_ = { stream }; |
|
|
|
|
|
|
|
task_def.set_stream_id(0); |
|
|
|
|
|
|
|
domi::FftsPlusTaskDef *ffts_plus_task_def = task_def.mutable_ffts_plus_task(); |
|
|
|
rtFftsPlusTaskInfo_t sub_task_info; |
|
|
|
task_info.ffts_plus_task_info_ = sub_task_info; |
|
|
|
|
|
|
|
davinci_model.op_list_[0] = CreateOpDesc("test", PARTITIONEDCALL); |
|
|
|
ffts_plus_task_def->set_op_index(0); |
|
|
|
ffts_plus_task_def->set_addr_size(2); |
|
|
|
InitTaskSQEInfo(ffts_plus_task_def); |
|
|
|
InitTaskAdditionalDataInfo(ffts_plus_task_def); |
|
|
|
|
|
|
|
domi::FftsPlusCtxDef *aicaivctx = ffts_plus_task_def->add_ffts_plus_ctx(); |
|
|
|
aicaivctx->set_op_index(0); |
|
|
|
aicaivctx->set_hardware_ctx_type(static_cast<uint32_t>(RT_HW_CTX_TYPE_AIV)); |
|
|
|
aicaivctx->set_software_ctx_type(0); |
|
|
|
InitAicAivCtx(aicaivctx); |
|
|
|
|
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
aicaivctx->aic_aiv_ctx().add_successor_list(1); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
aicaivctx->aic_aiv_ctx().add_kernel_name("aivtest"); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
aicaivctx->aic_aiv_ctx().add_src_slot(1); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), SUCCESS); |
|
|
|
|
|
|
|
domi::FftsPlusCtxDef *mixaicaivctx = ffts_plus_task_def->add_ffts_plus_ctx(); |
|
|
|
mixaicaivctx->set_op_index(0); |
|
|
|
mixaicaivctx->set_hardware_ctx_type(static_cast<uint32_t>(RT_HW_CTX_TYPE_MIX_AIC)); |
|
|
|
mixaicaivctx->set_software_ctx_type(0); |
|
|
|
InitMixAicAivCtx(mixaicaivctx); |
|
|
|
|
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
mixaicaivctx->mix_aic_aiv_ctx().add_successor_list(1); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
mixaicaivctx->mix_aic_aiv_ctx().add_kernel_name("mixaiv"); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
mixaicaivctx->mix_aic_aiv_ctx().add_src_slot(1); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), SUCCESS); |
|
|
|
|
|
|
|
domi::FftsPlusCtxDef *notifyctx = ffts_plus_task_def->add_ffts_plus_ctx(); |
|
|
|
notifyctx->set_op_index(0); |
|
|
|
notifyctx->set_hardware_ctx_type(static_cast<uint32_t>(RT_HW_CTX_TYPE_NOTIFY_WAIT)); |
|
|
|
notifyctx->set_software_ctx_type(0); |
|
|
|
InitNotifyCtx(notifyctx); |
|
|
|
|
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
notifyctx->notify_ctx().add_successor_list(1); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), SUCCESS); |
|
|
|
|
|
|
|
domi::FftsPlusCtxDef *sdmactx = ffts_plus_task_def->add_ffts_plus_ctx(); |
|
|
|
sdmactx->set_op_index(0); |
|
|
|
sdmactx->set_hardware_ctx_type(static_cast<uint32_t>(RT_HW_CTX_TYPE_SDMA)); |
|
|
|
sdmactx->set_software_ctx_type(0); |
|
|
|
InitSdmaCtx(sdmactx); |
|
|
|
|
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
sdmactx->sdma_ctx().add_successor_list(1); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), SUCCESS); |
|
|
|
|
|
|
|
domi::FftsPlusCtxDef *writevalctx = ffts_plus_task_def->add_ffts_plus_ctx(); |
|
|
|
writevalctx->set_op_index(0); |
|
|
|
writevalctx->set_hardware_ctx_type(static_cast<uint32_t>(RT_HW_CTX_TYPE_WRITE_VALUE)); |
|
|
|
writevalctx->set_software_ctx_type(0); |
|
|
|
InitWriteValueCtx(writevalctx); |
|
|
|
|
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
writevalctx->write_value_ctx().add_successor_list(1); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), SUCCESS); |
|
|
|
|
|
|
|
domi::FftsPlusCtxDef *aicpuctx = ffts_plus_task_def->add_ffts_plus_ctx(); |
|
|
|
aicpuctx->set_op_index(0); |
|
|
|
aicpuctx->set_hardware_ctx_type(static_cast<uint32_t>(RT_HW_CTX_TYPE_AICPU)); |
|
|
|
aicpuctx->set_software_ctx_type(0); |
|
|
|
InitAicpuCtxCtx(aicpuctx); |
|
|
|
|
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
aicpuctx->aicpu_ctx().add_successor_context_id(1); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
aicpuctx->aicpu_ctx().add_user_data(1); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), SUCCESS); |
|
|
|
|
|
|
|
domi::FftsPlusCtxDef *datactx = ffts_plus_task_def->add_ffts_plus_ctx(); |
|
|
|
datactx->set_op_index(0); |
|
|
|
datactx->set_hardware_ctx_type(static_cast<uint32_t>(RT_HW_CTX_TYPE_FLUSH_DATA)); |
|
|
|
datactx->set_software_ctx_type(0); |
|
|
|
InitDataCtx(datactx); |
|
|
|
|
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
datactx->data_ctx().add_successor_list(1); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), SUCCESS); |
|
|
|
|
|
|
|
domi::FftsPlusCtxDef *caseswitchctx = ffts_plus_task_def->add_ffts_plus_ctx(); |
|
|
|
caseswitchctx->set_op_index(0); |
|
|
|
caseswitchctx->set_hardware_ctx_type(static_cast<uint32_t>(RT_HW_CTX_TYPE_LOAD)); |
|
|
|
caseswitchctx->set_software_ctx_type(static_cast<uint32_t>(RT_SOFT_CTX_TYPE_CASE_SWITCH)); |
|
|
|
InitCaseSwitchCtx(caseswitchctx); |
|
|
|
|
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
caseswitchctx->case_switch_ctx().add_successor_list(1); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), SUCCESS); |
|
|
|
|
|
|
|
domi::FftsPlusCtxDef *candswitchctx = ffts_plus_task_def->add_ffts_plus_ctx(); |
|
|
|
candswitchctx->set_op_index(0); |
|
|
|
candswitchctx->set_hardware_ctx_type(static_cast<uint32_t>(RT_HW_CTX_TYPE_LOAD)); |
|
|
|
candswitchctx->set_software_ctx_type(static_cast<uint32_t>(RT_SOFT_CTX_TYPE_COND_SWITCH)); |
|
|
|
InitCondSwitchCtx(candswitchctx); |
|
|
|
|
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
candswitchctx->cond_switch_ctx().add_true_successor_list(1); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
candswitchctx->cond_switch_ctx().add_false_successor_list(1); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), SUCCESS); |
|
|
|
} |
|
|
|
|
|
|
|
// test FftsPlusTaskInfo Init hardware ctx |
|
|
|
TEST_F(UtestFftsPlusTaskInfo, success_ffts_plus_task_info_hardware_ctx_ex) { |
|
|
|
DavinciModel davinci_model(0, nullptr); |
|
|
|
domi::TaskDef task_def; |
|
|
|
FftsPlusTaskInfo task_info; |
|
|
|
rtStream_t stream = nullptr; |
|
|
|
rtStreamCreate(&stream, 0); |
|
|
|
davinci_model.stream_list_ = { stream }; |
|
|
|
|
|
|
|
task_def.set_stream_id(0); |
|
|
|
|
|
|
|
domi::FftsPlusTaskDef *ffts_plus_task_def = task_def.mutable_ffts_plus_task(); |
|
|
|
rtFftsPlusTaskInfo_t sub_task_info; |
|
|
|
task_info.ffts_plus_task_info_ = sub_task_info; |
|
|
|
|
|
|
|
davinci_model.op_list_[0] = CreateOpDesc("test", PARTITIONEDCALL); |
|
|
|
ffts_plus_task_def->set_op_index(0); |
|
|
|
ffts_plus_task_def->set_addr_size(2); |
|
|
|
InitTaskSQEInfo(ffts_plus_task_def); |
|
|
|
InitTaskAdditionalDataInfo(ffts_plus_task_def); |
|
|
|
|
|
|
|
domi::FftsPlusCtxDef *casesdefaultctx = ffts_plus_task_def->add_ffts_plus_ctx(); |
|
|
|
casesdefaultctx->set_op_index(0); |
|
|
|
casesdefaultctx->set_hardware_ctx_type(static_cast<uint32_t>(RT_HW_CTX_TYPE_LOAD)); |
|
|
|
casesdefaultctx->set_software_ctx_type(static_cast<uint32_t>(RT_SOFT_CTX_TYPE_CASE_SWITCH)); |
|
|
|
InitCaseDefaultCtx(casesdefaultctx); |
|
|
|
|
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), FAILED); |
|
|
|
casesdefaultctx->case_default_ctx().add_successor_list(1); |
|
|
|
EXPECT_EQ(task_info.Init(task_def, &davinci_model), SUCCESS); |
|
|
|
} |
|
|
|
// test FftsPlusTaskInfo UpdateArgs |
|
|
|
TEST_F(UtestFftsPlusTaskInfo, success_ffts_plus_task_info_update_args) { |
|
|
|
DavinciModel davinci_model(0, nullptr); |
|
|
|
FftsPlusTaskInfo task_info; |
|
|
|
task_info.davinci_model_ = &davinci_model; |
|
|
|
task_info.io_addrs_ = { (void*)0x12345678, (void*)0x22345678 }; |
|
|
|
EXPECT_EQ(task_info.UpdateArgs(), SUCCESS); |
|
|
|
} |
|
|
|
|
|
|
|
// test FftsPlusTaskInfo CalculateArgs |
|
|
|
TEST_F(UtestFftsPlusTaskInfo, success_ffts_plus_task_info_calculate_args) { |
|
|
|
DavinciModel davinci_model(0, nullptr); |
|
|
|
domi::TaskDef task_def; |
|
|
|
FftsPlusTaskInfo task_info; |
|
|
|
EXPECT_EQ(task_info.CalculateArgs(task_def, &davinci_model), SUCCESS); |
|
|
|
} |
|
|
|
|
|
|
|
// test FftsPlusTaskInfo Distribute |
|
|
|
TEST_F(UtestFftsPlusTaskInfo, success_ffts_plus_task_info_distribute) { |
|
|
|
DavinciModel davinci_model(0, nullptr); |
|
|
|
FftsPlusTaskInfo task_info; |
|
|
|
rtFftsPlusTaskInfo_t sub_task_info; |
|
|
|
task_info.ffts_plus_task_info_ = sub_task_info; |
|
|
|
rtStream_t stream = nullptr; |
|
|
|
rtStreamCreate(&stream, 0); |
|
|
|
task_info.stream_ = stream; |
|
|
|
EXPECT_EQ(task_info.Distribute(), SUCCESS); |
|
|
|
} |
|
|
|
} // namespace ge |