Translation 算法示例
源码位置: samples/algorithms/translation 查看源码
功能说明
本示例演示 ARCS 双核架构下 Translation 的完整调用链路。CP 侧 sample 通过 acomp_translation 向 AP 侧翻译服务发送文本翻译请求,AP 侧按需从 Flash/eMMC 加载词典与模型资源,完成翻译后再通过 IPC 回传状态和结果。
本示例同时覆盖以下关键能力:
CP 侧 Translation 控制命令下发
AP/CP 间 IPC 与翻译结果回传
Translation Flash/eMMC 资源布局与烧录
AP 侧运行时资源占用评估
硬件连接
无需额外连接 AP/CP,两核均运行在同一颗芯片内部
sdmmc0:用于访问 eMMC/SD 存储上的algo_emmc.bin资源镜像调试串口:默认查看 AP、CP 两侧日志
示例内容
CP 侧初始化
ic_messageCP 侧获取
sdmmc0并执行lisa_sdmmc_probe(),确保后续disk_mem可正常访问 eMMC 资源CP 侧启动
disk_mem服务、acomp框架和本地 Translation sampleCP 侧调用
acomp_translation_do_prepare(),向 AP 侧同步 20 个资源描述AP 侧 Translation 服务按需加载 18 个 eMMC 模型资源,并从 Flash
resmgr获取trandb和dictCP 侧依次执行两次固定文本翻译:
CN2EN:这是一个 translation 算法 sample。EN2CN:This is a translation sample running on CP.AP 侧返回翻译状态和结果,CP 侧打印日志并清理 Translation 上下文
AP/CP 分工
核心 |
主要职责 |
|---|---|
AP 侧 |
运行 Translation 算法服务、按需从 Flash/eMMC 加载资源、执行翻译、回传状态和结果 |
CP 侧 |
初始化 |
AP 侧配套说明
配套 AP 工程参考路径:
/home/hiker/listenai/voiceassistant/voiceassistant/apps/remote-apTranslation 相关模块:
acomp/translation/translation.cacomp/translation/trans_algo.cacomp/translation/trans_algo.h
编译
重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:
arcs_evb - ARCS EVB 评估板
arcs_mini - ARCS Mini 开发板
根据您的开发板型号,选择对应的编译命令:
在 SDK 根目录执行编译:
# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb
# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini
Note
确保已安装对应的工具链。
烧录
本示例需要同时准备 Boot、AP 固件、Flash 算法资源、CP 固件以及 eMMC 资源镜像。请按下表地址烧录:
镜像 |
介质 |
烧录地址 |
说明 |
|---|---|---|---|
|
Flash |
|
Boot 固件 |
|
Flash |
|
AP 固件 |
|
Flash |
|
Flash 常驻算法资源 |
|
Flash |
|
本 sample 生成的 CP 固件 |
|
eMMC |
|
eMMC 资源镜像,地址为基于 |
地址信息与 res_info.md 保持一致。
烧录顺序建议
烧录
boot.bin烧录
ap.bin烧录
algo.bin烧录
arcs.bin烧录
algo_emmc.bin
预期输出
CP 侧日志
I/main CP=======! Hard ID: 1
I/main ic_message_init done!
I/main sdmmc probe success
I/main disk_mem_urpc_init done!
I/trans_res init ret:0
I/trans_res prepare ret:0
I/trans_res start ret:0
I/app_trans CN2EN input: 这是一个 translation 算法 sample。
I/app_trans translation result: This is a translation algorithm sample.
I/app_trans EN2CN input: This is a translation sample running on CP.
I/app_trans translation result: 这是一个运行在 CP 上的翻译示例。
I/app_trans translation sample finished: 0
AP 侧日志
AP Hard ID: 0
I/translation translation_prepare enter
I/trans_algo trans_algo_prepare: res_cnt=20
I/trans_algo pool: addr=..., size=7614976 (from shared pool)
I/trans_algo loading dec_emb from eMMC ...
I/translation translation_work_handler: text[...]=...
I/trans_algo lstrans_process done, ret=0
核心 API
API |
说明 |
|---|---|
|
获取 SDMMC 设备实例 |
|
初始化 |
|
启动 CP 侧 |
|
初始化 Translation、同步资源描述并启动服务 |
|
设置翻译方向 |
|
下发待翻译文本 |
|
停止并清理 Translation 上下文 |
|
翻译结果回调 |
|
翻译状态回调 |
功能详解
Translation 资源布局
本示例使用两类 Translation 资源:
Flash 常驻资源:
trandb、dict,由algo.bin提供,并通过resmgr获取eMMC 大资源:18 个模型资源,由
algo_emmc.bin提供,按固定偏移从 eMMC 按需读取
当前使用的 eMMC 资源如下:
资源 |
偏移地址 |
大小(字节) |
|---|---|---|
|
|
3306480 |
|
|
3286864 |
|
|
3286864 |
|
|
3286864 |
|
|
3286864 |
|
|
3561152 |
|
|
4429216 |
|
|
1936384 |
|
|
1936384 |
|
|
3306480 |
|
|
3286864 |
|
|
3286864 |
|
|
3286864 |
|
|
3286864 |
|
|
3561152 |
|
|
4429216 |
|
|
1936384 |
|
|
1936384 |
Translation 当前使用的 eMMC 资源总量为 56634144 字节,约 54.01 MiB。
AP 侧算法资源占用
AP 侧 Translation 算法主要占用共享 PSRAM 资源池,关键数据如下:
项目 |
大小(字节) |
说明 |
|---|---|---|
|
8349696 |
AP 侧总 PSRAM heap |
|
7618560 |
AP 侧算法资源缓冲池上限 |
|
1228800 |
Translation 工作区 |
|
4096 |
Embedding tokens 输出缓冲 |
|
16384 |
Embedding position 输出缓冲 |
|
4429312 |
Decoder 资源缓冲,对齐后大小 |
|
1936384 |
Decoder embedding 预加载缓冲 |
共享池峰值占用 |
7614976 |
|
共享池剩余余量 |
3584 |
相对 |
|
393216 |
固定使用 AP SRAM,不占共享 PSRAM 池 |
|
1024 |
单次翻译临时结果缓冲,由 |
按当前配置,Translation 的共享 PSRAM 资源池几乎被占满。如果 AP 侧继续叠加算法或调整资源大小,需要同步重新评估这部分预算。
关键代码
CP 侧启动顺序
ic_message_init();
sdmmc = lisa_device_get("sdmmc0");
ret = lisa_sdmmc_probe(sdmmc);
disk_mem_urpc_init();
acomp_init();
app_translation_init();
Translation 执行流程
ret = acomp_translation_do_prepare(translation_event_handler, NULL);
ret = acomp_translation_set_res_type(TRANS_TYPE_CN2EN);
ret = acomp_translation_translate(cn_text, strlen(cn_text));
ret = acomp_translation_set_res_type(TRANS_TYPE_EN2CN);
ret = acomp_translation_translate(en_text, strlen(en_text));
acomp_translation_do_cleanup();
配置说明
本示例的关键配置位于 prj.conf:
配置项 |
说明 |
|---|---|
|
将 CP 固件链接到 Flash |
|
不生成 AP 启动 CP 的 boot 合并镜像 |
|
编入 |
|
开启 |
|
在 CP 侧启用 |
|
开启磁盘驱动与 SDMMC 后端 |
|
开启 Translation |
|
固定 18 个 Translation eMMC 资源地址和大小 |
注意事项
algo_emmc.bin必须正确烧录到 eMMC;若未烧录或资源内容不匹配,AP 侧 Translation 会在按需加载模型时失败disk_mem访问 eMMC 之前,CP 侧必须先完成lisa_sdmmc_probe();否则会出现Disk device not initialized本 sample 只在
prj.conf中固定 18 个 eMMC 资源地址,trandb和dict仍来自algo.bin中的 FlashresmgrAP 侧 Translation 共享
PSRAM资源池只剩3584字节余量,修改 AP 配置或模型版本后应重新核算AP 和 CP 固件、
algo.bin、algo_emmc.bin需要来自同一套资源版本,避免地址、大小或模型内容不匹配
相关文档
res_info.md:镜像烧录地址说明
main.c:CP 侧启动与
sdmmc0/disk_mem初始化入口app_translation.c:CP 侧 Translation 控制逻辑