已合并
fix(msprof): update task_type and mix_block_dim_ratio from bs_task_type #1057
candyhong创建于 1月7日
fix(msprof): update task_type and mix_block_dim_ratio from bs_task_type #1057
已合并
共 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 0 | 390 | 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 -1 | 392 | 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_mode | 394 | mix_mode = metadata.mix_mode |
| 394 | compile_on_910_95 = metadata.compile_on_910_95 | 395 | compile_on_910_95 = metadata.compile_on_910_95 |
| 395 | parallel_mode = metadata.parallel_mode | 396 | 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 \n | 492 | 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 ctxID | 613 | + // '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 ''} |