已合并
fix(msprof): update task_type and mix_block_dim_ratio from bs_task_type #1057
fix(msprof): update task_type and mix_block_dim_ratio from bs_task_type #1057
已合并
candyhong创建于 1月7日
共 2 个文件变更+31-5
@@ -461,6 +461,7 @@ def linalg_to_bin_enable_npu_compile_910_95(linalg: str, metadata, opt):
461 metadata["required_ub_bits"] = int(match.group(1))461 metadata["required_ub_bits"] = int(match.group(1))
462 if Path(callback_path).is_file():462 if Path(callback_path).is_file():
463 lib = ctypes.CDLL(callback_path)463 lib = ctypes.CDLL(callback_path)
464+ __get_metadata_attr_by_callback(lib, "_infer_task_type_function", metadata, "bs_task_type")
464 __get_metadata_attr_by_callback(lib, "_infer_workspace_shape_function", metadata, "workspace_size")465 __get_metadata_attr_by_callback(lib, "_infer_workspace_shape_function", metadata, "workspace_size")
465 __get_metadata_attr_by_callback(lib, "_infer_sync_block_lock_num_function", metadata, "lock_num")466 __get_metadata_attr_by_callback(lib, "_infer_sync_block_lock_num_function", metadata, "lock_num")
466 __get_metadata_attr_by_callback(lib, "_infer_sync_block_lock_init_function", metadata, "lock_init_val")467 __get_metadata_attr_by_callback(lib, "_infer_sync_block_lock_init_function", metadata, "lock_init_val")
@@ -581,6 +582,7 @@ def linalg_to_bin_enable_npu_compile_A2_A3(linalg: str, metadata, opt):
581 metadata["required_ub_bits"] = int(match.group(1))582 metadata["required_ub_bits"] = int(match.group(1))
582 if Path(callback_path).is_file():583 if Path(callback_path).is_file():
583 lib = ctypes.CDLL(callback_path)584 lib = ctypes.CDLL(callback_path)
585+ __get_metadata_attr_by_callback(lib, "_infer_task_type_function", metadata, "bs_task_type")
584 __get_metadata_attr_by_callback(lib, "_infer_workspace_shape_function", metadata, "workspace_size")586 __get_metadata_attr_by_callback(lib, "_infer_workspace_shape_function", metadata, "workspace_size")
585 __get_metadata_attr_by_callback(lib, "_infer_sync_block_lock_num_function", metadata, "lock_num")587 __get_metadata_attr_by_callback(lib, "_infer_sync_block_lock_num_function", metadata, "lock_num")
586 __get_metadata_attr_by_callback(lib, "_infer_sync_block_lock_init_function", metadata, "lock_init_val")588 __get_metadata_attr_by_callback(lib, "_infer_sync_block_lock_init_function", metadata, "lock_init_val")
@@ -390,6 +390,7 @@ def generate_npu_wrapper_src(constants, signature, metadata):
390 if hasattr(metadata, 'lock_init_value') else 0390 if hasattr(metadata, 'lock_init_value') else 0
391 lock_num = int(metadata.lock_num) \391 lock_num = int(metadata.lock_num) \
392 if hasattr(metadata, 'lock_num') else -1392 if hasattr(metadata, 'lock_num') else -1
393+ bs_task_type = metadata.bs_task_type if hasattr(metadata, 'bs_task_type') else 0
393 mix_mode = metadata.mix_mode394 mix_mode = metadata.mix_mode
394 compile_on_910_95 = metadata.compile_on_910_95395 compile_on_910_95 = metadata.compile_on_910_95
395 parallel_mode = metadata.parallel_mode396 parallel_mode = metadata.parallel_mode
@@ -441,6 +442,24 @@ def generate_npu_wrapper_src(constants, signature, metadata):
441 "int64_t": "L",442 "int64_t": "L",
442 }[ty]443 }[ty]
443 444 
445+ def _format_of_msprof_task_type_ratio(bs_task_type, mix_mode):
446+ # Default fallback based on mix_mode
447+ default_task_type = "MSPROF_GE_TASK_TYPE_AIV" if mix_mode == "aiv" else "MSPROF_GE_TASK_TYPE_AI_CORE"
448+ 
449+ if not bs_task_type:
450+ return default_task_type, 0
451+ 
452+ task_type_num, mix_block_dim_ratio = divmod(int(bs_task_type), 10)
453+ task_type_map = {
454+ 1: "MSPROF_GE_TASK_TYPE_AIV",
455+ 2: "MSPROF_GE_TASK_TYPE_AI_CORE",
456+ 3: "MSPROF_GE_TASK_TYPE_MIX_AIC",
457+ 4: "MSPROF_GE_TASK_TYPE_MIX_AIV",
458+ }
459+ 
460+ task_type = task_type_map.get(task_type_num, default_task_type)
461+ return task_type, mix_block_dim_ratio
462+ 
444 arg_decls = ', '.join(f"{_ty_to_cpp(ty)} arg{i}" for i, ty in signature.items())463 arg_decls = ', '.join(f"{_ty_to_cpp(ty)} arg{i}" for i, ty in signature.items())
445 """464 """
446 args:465 args:
@@ -468,7 +487,8 @@ def generate_npu_wrapper_src(constants, signature, metadata):
468 npu_utils = NPUUtils()487 npu_utils = NPUUtils()
469 num_physical_blocks = npu_utils.get_aivector_core_num(488 num_physical_blocks = npu_utils.get_aivector_core_num(
470 ) if mix_mode == "aiv" else npu_utils.get_aicore_num()489 ) if mix_mode == "aiv" else npu_utils.get_aicore_num()
471- task_type = "MSPROF_GE_TASK_TYPE_AIV" if mix_mode == "aiv" else "MSPROF_GE_TASK_TYPE_AI_CORE"490+ task_type, mix_block_dim_ratio = _format_of_msprof_task_type_ratio(bs_task_type, mix_mode)
491+ is_mix_task_type = "true" if ("MIX" in task_type) else "false"
472 LINE_CHANGE_CHAR = chr(10) # it is \n492 LINE_CHANGE_CHAR = chr(10) # it is \n
473 alloc_success_code = 'return 1;'493 alloc_success_code = 'return 1;'
474 sync_lock_fail_code = 'fprintf(stderr, "Error: syncBlockLock allocation failed\\n"); return;'494 sync_lock_fail_code = 'fprintf(stderr, "Error: syncBlockLock allocation failed\\n"); return;'
@@ -587,11 +607,11 @@ extern "C" {
587 nodeBasicInfo.data.nodeBasicInfo.opName = opNameHashID;607 nodeBasicInfo.data.nodeBasicInfo.opName = opNameHashID;
588 nodeBasicInfo.data.nodeBasicInfo.opType = opNameHashID;608 nodeBasicInfo.data.nodeBasicInfo.opType = opNameHashID;
589 nodeBasicInfo.data.nodeBasicInfo.taskType = {task_type};609 nodeBasicInfo.data.nodeBasicInfo.taskType = {task_type};
590- nodeBasicInfo.data.nodeBasicInfo.blockDim = blockNum;610+ nodeBasicInfo.data.nodeBasicInfo.blockDim = nodeBasicBlockDim;
591 MsprofReportCompactInfo(0, static_cast<void *>(&nodeBasicInfo), sizeof(MsprofCompactInfo));611 MsprofReportCompactInfo(0, static_cast<void *>(&nodeBasicInfo), sizeof(MsprofCompactInfo));
592 612 
593- // workspace > 0 indicates a 'mix' kernel, which requires reporting the ctxID613+ // 'mix' kernel need to report the ctxID
594- if ({workspace_size} > 0) {{614+ if ({is_mix_task_type} > 0) {{
595 MsprofAdditionalInfo info;615 MsprofAdditionalInfo info;
596 info.level = MSPROF_REPORT_NODE_LEVEL;616 info.level = MSPROF_REPORT_NODE_LEVEL;
597 info.type = MSPROF_REPORT_NODE_CONTEXT_ID_INFO_TYPE;617 info.type = MSPROF_REPORT_NODE_CONTEXT_ID_INFO_TYPE;
@@ -607,7 +627,7 @@ extern "C" {
607 if (copyLen > MSPROF_ADDTIONAL_INFO_DATA_LENGTH) {{627 if (copyLen > MSPROF_ADDTIONAL_INFO_DATA_LENGTH) {{
608 copyLen = MSPROF_ADDTIONAL_INFO_DATA_LENGTH;628 copyLen = MSPROF_ADDTIONAL_INFO_DATA_LENGTH;
609 }}629 }}
610- std::memcpy(info.data, &ctxId, copyLen);630+ memcpy(info.data, &ctxId, copyLen);
611 MsprofReportAdditionalInfo(false, static_cast<void *>(&info), sizeof(MsprofAdditionalInfo));631 MsprofReportAdditionalInfo(false, static_cast<void *>(&info), sizeof(MsprofAdditionalInfo));
612 }}632 }}
613 633 
@@ -707,6 +727,10 @@ static void _launch(const char* kernelName, const void* func, rtStream_t stream,
707 #endif 727 #endif
708 {get_backend_func("pre_launch")}728 {get_backend_func("pre_launch")}
709 {'blockNum = std::min(blockNum, (uint32_t)' + str(num_physical_blocks) + ');' if enable_auto_map_parallel_blocks else ''}729 {'blockNum = std::min(blockNum, (uint32_t)' + str(num_physical_blocks) + ');' if enable_auto_map_parallel_blocks else ''}
730+ // set mixBlockNumRation for nodeBasicBlockDim for msprof report
731+ uint32_t mixBlockNumRation = {mix_block_dim_ratio};
732+ uint32_t nodeBasicBlockDim = (mixBlockNumRation << 16) + blockNum;
733+ 
710 {'cce::internal::DebugTunnelData *DTData = cce::internal::DebugTunnel::Open(blockNum);' if enable_device_print else ''}734 {'cce::internal::DebugTunnelData *DTData = cce::internal::DebugTunnel::Open(blockNum);' if enable_device_print else ''}
711 rtError_t ret;735 rtError_t ret;
712 {'void *ffts_addr = NULL; uint32_t ffts_len; ret = rtGetC2cCtrlAddr((uint64_t*)&ffts_addr, &ffts_len);' if target_support_ffts else ''}736 {'void *ffts_addr = NULL; uint32_t ffts_len; ret = rtGetC2cCtrlAddr((uint64_t*)&ffts_addr, &ffts_len);' if target_support_ffts else ''}