ax+by+c=0 · 5 天前

【“星睿O6”AI PC开发套件评测】新手向的开发套件上手以及性能评测

新手向的开发套件上手以及性能评测

很荣幸这次能够百里挑一获得“星睿O6”AI PC开发套件的试用资格,本篇将更侧重于普通用户的视角以及半教程向的叙述来带领读者去上手这套AI PC开发套件。

本篇将分为以下五个部分:

  • 开箱准备部分
  • CPU性能测试部分
  • GPU性能测试部分
  • 硬件编解码器评测部分
  • 结语

✿开箱准备部分✿

➤系统安装

笔者为了便捷,直接从官网上下载预安装的debian系统镜像,并使用相关软件直接还原镜像数据至磁盘扇区:
download.png
首先将NVMe固态硬盘从开发板拆下,并通过nvme硬盘盒连接到计算机。
随后使用winhex的镜像还原功能将磁盘镜像还原至固态:

winhex_restore.png

配置完毕后点击确认就进入了写入过程:

copy_done.png

写入完毕后,将固态安装回开发板:

complete.png

➤设备组装

官网标称电源最低需要有20V/3.25A的输出能力,笔者使用手头空闲的20V/5A氮化镓充电器连接开发板。
连接好所有的外设后开发板就自动上电启动了:

board.jpg

建议如果要使用无线网的话,附带的天线一定要连接。否则信号会很差,即使路由器在边上也是几乎不可用的状态。
像图片这样连接即可,连接完天线后无线信号会从随时断连变为满格:

antenna.jpg

令人惊喜的是开发板的USB-C口带有视频信号输出功能,连接我的便携式屏幕十分方便:

screen.jpg

最后配置ssh以便远程操作开发板。值得一提的是预安装的镜像已经安装了openssh-server,好评:

root@orion-o6:~# apt list --installed | grep openssh-server

openssh.png

使用windows terminal(支持控制台颜色)连接开发板:

terminal.png

至此,准备工作完成。

✿CPU部分✿

此芯CD8180的三个核心簇之间共享12MiB的三级缓存,其中所有的8个A720核心均慷慨的配备了满血的64KiB一级指令/数据缓存以及满血的512KiB二级缓存。与之CPU架构相近的有高通即将发布的骁龙8s Gen4,由于骁龙8s Gen4搭载了一颗X4超大核,此芯CD8180在单核性能上预计与骁龙8s Gen4相比有较大差距,但是骁龙8s Gen4的所有A720核心均仅配备了256KiB的二级缓存,核心簇之间也仅有8MiB的共享三级缓存,并且此芯CD8180要额外多出4个A520小核,因此此芯CD8180在CPU多核性能上或许能够弥补缺失超大核的劣势追赶上骁龙8s Gen4。

➤CPU核间访问延迟测试

Github源项目地址未提供对应Linux/AARCH64的binary,因此需要自行克隆代码并编译:

apt-get install git
git clone https://github.com/KCORES/core-to-core-latency-plus.git

安装RUST以及此项目所依赖的库:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
apt-get install libssl-dev

最后进入项目根目录编译适用于本系统的binary:

cargo build --release

编译完成后运行位于/target/release下的binary即可

ctclp_help.png

需要生成图形化图表的话还需要安装一些额外的库:

apt-get install jupyter-notebook
apt-get install python3-pandas
apt-get install python3-matplotlib

使用命令生成csv表单文件,并将文件放到与results.ipynb同级的目录下:

./core-to-core-latency-plus 5000 300 -b 1 --csv > out.csv

gen_csv.png

使用一下命令启动jupyter notebook并打开results.ipynb即可:

jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root

jupyter_web.png

为使结果更具一般意义,我使用了相对较大的samples数量以及迭代的次数以减少误差,下面是我测得的CPU核心延迟图:

./core-to-core-latency-plus 20000 2000 -b 1 --csv > ../../results/new/3.csv

latency.png

CPU核间延迟表现中规中矩,平均延迟65.5ns,总体较为平均,但每个核心簇内部访问的延迟不算低,但跨核心簇之间的访问没有延迟特别高的情况发生,希望下一代可以着重优化一下每个核心簇内部的访问延迟。其中2-5号应该是A520小核心簇,在访问别的核心簇时延迟会相对偏高一些,在做一些对延迟或性能相对敏感的开发项目时可以选择利用cpu affinity将这4个核心mask off。

➤GeekBench6 CPU理论性能测试

Geekbench 是一款跨平台的性能基准测试工具,可便捷测量系统性能。

wget "https://cdn.geekbench.com/Geekbench-6.4.0-LinuxARMPreview.tar.gz"
tar -xvzf ./Geekbench-6.4.0-LinuxARMPreview.tar.gz

解压完毕后直接在控制台运行geekbench6便会自动开始测试:

gb6.png

CD8180在Geekbench6取得了单核1276 多核6197的成绩

gb6_score.png

因为近些年来手机SOC往往会搭载一颗Cortex-X系列的超大核,因此单核成绩注定在GB6榜单中不会特别亮眼,但得益于比传统8核手机SOC多出的4颗核心,在多核成绩上CD8180的性能可以逼近苹果的A15,超越高通往年发布的骁龙 8 Gen2 以及骁龙 8s Gen3。

socpk.png
(数据来源:极客湾)

✿GPU部分✿

GPU部分此芯采用了具有10个计算单元的ARM公版Immortals™ G720,和手机上同样搭载此型号GPU的联发科天玑9300相比少了两个计算单元,不过桌面端的芯片在频率以及性能持续释放方面上应该比起手机更占优势。值得一提的是该GPU支持硬件光线追踪,后续也会对其光追性能进行评测。

➤GeekBench6 GPU理论性能测试

目前gb6的preview版本仅支持通过Opencl来评估性能,尚未支持vulkan:

./geekbench6 --gpu

gb6_ocl_only.png
gb6_ocl_info.png

最终跑分与高通骁龙8Gen2所搭载的Adreno 740接近,和同为ARM公版架构的联发科天玑9200+所搭载的Immortalis-G715跑分也较为接近:

gb6_ocl_score.png

➤基于Vulkan的理论浮点性能测试

首先使用vulkan api来查询一下每个计算单元内部包含的线程个数:

VkPhysicalDeviceProperties2 device_properties = {};
device_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
device_properties.pNext = &subgroup_properties;
vkGetPhysicalDeviceProperties2(m_iPhysicalDevices(), &device_properties);
std::cout << "subgroupSize:" << subgroup_properties.subgroupSize << std::endl;

subgroupSize.png

随后使用这个大小去定义一下shader内部的workgroup大小以达到最优性能:

layout (local_size_x = 16) in;

使用GPU最拿手的乘加运算来粗略估算GPU的单精度浮点性能:

float cachedOut = inputData[idx];

for (uint i = 0; i < pushConstants.numLoop; i++)
{
    cachedOut = fma(cachedOut, cachedOut, cachedOut);
    cachedOut = fma(cachedOut, cachedOut, cachedOut);
    cachedOut = fma(cachedOut, cachedOut, cachedOut);
    ...
}

这里我设置了总共1000 * 1024 * 64个输入数据。为了避免内存带宽瓶颈,这里shader每次执行只获取一个输入数据,因此这里输入数据总数也等同于shader的执行次数,且每个shader内部执行100次循环:

uint32_t numData = 1000*1024*64;
uint32_t numLoop = 100;

将输入数据总数按照单个计算单元内的线程个数分割后定义shader的dispatch次数:

vkBeginCommandBuffer(cmdBuf.primary, &beginInfo);
{
    vkCmdBindPipeline(cmdBuf.primary, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline);
    vkCmdBindDescriptorSets(cmdBuf.primary, VK_PIPELINE_BIND_POINT_COMPUTE,
        pipelineLayout, 0, 1, descriptorSet, 0, nullptr);
    vkCmdPushConstants(cmdBuf.primary, pipelineLayout, VK_SHADER_STAGE_COMPUTE_BIT, 0, pushConstantSize, pushConstants);
    uint32_t dispatchCount = numData / 16;
    vkCmdDispatch(cmdBuf.primary, dispatchCount, 1, 1);
}
vkEndCommandBuffer(cmdBuf.primary);

(这里偷懒没有使用vulkan performance counter进行测算,仅统计了submit开始到fence返回的时间间隔,后续会进行完善修改)
总计耗时6.1s完成:

time_spent.png

numFloat * numLoop * 1000(单循环内fma指令条数)≈ 6.55T次fma运算,由于fma通常计算为2flops,因此总共为等效13.1TFLOP.

由此得出FP32大致性能为13.1/6.1s ≈ 2.15TFLOPs。

FP16根据官方文档介绍为FP32性能的两倍,因此大致为4.3TFLOPs。

由于官方文档没有给出FP64的性能,于是我修改了一下shader使用双精度浮点进行运算,但在vkCmdDispatch时遇到了Segmentation fault,不确定是否是GPU不支持FP64的缘故:

seg_fault.png

✿硬件编解码器部分✿

此芯这款芯片的硬件编解码性能堪称业界标杆,官方规格显示其支持最高8K@60fps的硬件解码,更令人惊喜的是完整兼容包括AV1和VP9在内的主流视频编码格式——这正是YouTube等流媒体平台广泛采用的编码方案。如此强大的视频处理能力,完全能够将整个PC套件轻松转型为高性能、低功耗的家庭影音中枢,即便面对未来几年的超高清视频需求也游刃有余。

➤基于FFMPEG的编解码测试

此芯提供的debian系统镜像预装了ffmpeg的包体,从ffmpeg版本信息上来看这个构筑版本是此芯内部维护开发的版本:

ffmpeg

ffmpeg.png

但在ffmpeg中未查询到硬件加速相关的支持:

ffmpeg -hide_banner -hwaccels

ffmpeg_hwaccl.png

vulkan中也未找到视频编解码相对应的扩展:

vulkaninfo | grep video

vulkan_video.png

因此目前对视频硬件加速支持完整的评测只有等后续此芯支持完善后再补上了。

不过有趣的是还是找到了一些此芯自行编写的解码器:

ffmpeg -decoders | grep cix

ffmpeg_decoders.png

首先获取一下用作测试的sample音频文件:

wget "https://github.com/rafaelreis-hotmart/Audio-Sample-files/raw/master/sample.mp3"

随后尝试调用一下此芯的mp3解码器:

time ffmpeg -hide_banner -c:a mp3 -i sample.mp3 -f null -

可以成功进行解码,但比默认的解码器慢很多,在资源监视器中发现解码过程中CPU占用非常少,尚不清楚是否是为低功耗场景专门适配的音频解码器。

cix_mp3.png

✿结语✿

➤ARM桌面市场的搅局者

目前市场上桌面级别的ARM PC以及ARM开发板产品相对较少,就算有也是类似高通X Elite那种漫天要价的产品,或者是价格相对较低但搭配的ARM核心十分古老,因此很高兴市面上能够出现这样一款价格相对亲民且拥有不俗主流性能的开源ARM开发板搅局,得益于ARM的低功耗,以及此开发板的强劲性能,星睿O6面向普通用户十分适合作为一台不间断运行的AI中枢或者是家庭影音、家庭存储中枢,同时面向开发人员也是十分强劲的得力助手。后续我将围绕vulkan部署一系列主流的AI应用,以及在时间富裕的情况下针对板子所搭载的强大NPU进行评测。

➤遇到的一些问题及改进建议

  • 目前开发板的风扇控制似乎还有问题,有时开机后风扇便会全速运转,并不会根据负载及温度情况动态调节,希望后续可以进行优化。
  • 硬件视频编解码器尚未提供软件支持,较为遗憾。
  • 希望后续周易NPU社区可以提供对llamacpp后端的支持。
推荐阅读
关注数
1323
内容数
29
搭载安谋科技“周易”NPU的此芯AI PC开发套件瑞莎星睿O6开发板文档、活动及评测等专栏,加开发者群请添加极术小姐姐(id:aijishu20))。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息