tag 标签: iMX8QM

相关博文
  • 2025-3-21 10:51
    458 次阅读|
    0 个评论
    B y Toradex 胡珊逢 简介 Apalis iMX8QM 使用了 NXP 的 iMX8 Quad Max 处理器。该 CPU 提供 A72 和 A53 Application Processor 和 M4 MCU。文章将介绍如何在硬件层面上隔离 AP 和 MCU 的资源,从而提高系统的可靠性。 System Controller Unit (SCU)System Controller Unit 是 iMX8 Quad Max 处理器上的一个专用 M4 核,连接 PMIC 和控制处理器上的子系统,为处理器的硬件功能提供抽象接口,供子系统使用。其主要管理以下功能和资源: 系统初始化与启动系统控制器通信电源管理资源管理引脚配置定时器中断处理 默认情况下,AP 核和 M4 核均能够使用 Apalis iMX8QM 的所有资源,包括 DDR RAM。SCU 可以通过分区 partition 的方式,将 AP 和 M4 之间,以及两个 M4 核之间所使用的资源从硬件上隔离开。一个分区中除了处理器核心外,还可以有外设、引脚 Pads 和内存区域。处理器核只能访问位于同一个分区内的资源。如果尝试访问其他分区的资源,则会返回总线错误。 当 AP 核和 M4 核在同一个分区时,AP 上的 Linux 虽然可以通过 reserved memory 方式不去使用相关 RAM 区域,但是直接物理地址访问的方式仍起作用。这对于 M4 端也是如此。使用 SCU 的分区,可以从底层规避该问题。除此之外,AP 和 M4 使用独立 Power Domain,在隔离分区情况下,对于 M4 的实时关键任务和 AP 上基于富操作系统 Linux 的应用独立运行提供可能。 在刚启动时,系统会划分三个分区。 SCU:包含所有运行 SCFW 固件所需的 Pads、外设和内存区域SECO:Security Controller 运行所需的相关资源Boot:系统剩余的所有资源如 Pads、外设和内存区域都将会划分到该分区 当系统继续启动时,如果不做进一步的分区,默认情况下 AP 和 M4 核都将运行在 Boot 分区中,它们之间只能通过软件的方式隔离各自的资源。为了实现 AP 和 M4 之间的硬件隔离,可以采用下面分区。 AP0:拥有运行 U-boot,Linux 的分区MCU0 和 MCU1:两个 Cortex-M4 核各自运行的分区Shared:共享资源的分区,例如将一段用于 rpmsg 通信的 RAM 区域划分到其中,AP 和 M4 就能够相互发送消息 分区的创建和资源划分在 SCU 的固件 SCFW 中调整。 SCU 固件 SCFW SCFW 的下载和编译方法参考 Build Custom i.MX 8/8X System Controller Firmware (SCFW) 。接下来将针对上面使用 AP0、MCU0、MCU1 和 Shared 分区案例进行说明。按照上面方法下载的 SCFW 源码中,mx8qm_apalis/board.c 已经包含上面分区的实现代码,所以无需额外的修改。在组装 Boot Container 时传入特定的 Flags 值可以启用。 在 platform/board/mx8qm_apalis/board.c 中配置分区和资源。宏定义 PARTITION_NAME 命令系统启动时的设置三个分区名字。 PARTITION_NAME (SC_PT, "SCU"); PARTITION_NAME (SECO_PT, "SECO"); PARTITION_NAME (pt_boot, "BOOT"); 检测标志位判断是否需要创建 AP0、MCU0、MCU1 和 Shared 分区。 if (alt_config != SC_FALSE) { 在需要进行分区时,PARTITION_NAME 设置相应分区的名称。 PARTITION_NAME (pt_boot, "AP0"); ... PARTITION_NAME (pt_m4_0, "MCU0"); ... PARTITION_NAME (pt_m4_1, "MCU1"); ... PARTITION_NAME (pt, "Shared"); 这里以 MCU0 分区为例, rsrc_list 中包含了划分到 MCU0 分区的资源,如 M4 中断、Message Unit、定时器等。 static const sc_rsrc_t rsrc_list = { SC_R_SYSTEM, SC_R_IRQSTR_M4_0, SC_R_MU_5B, SC_R_MU_7A, SC_R_MU_8B, SC_R_GPT_4, SC_R_SECO_MU_4 }; pad_list 中包含 MCU0 分区所使用的引脚范围。 static const sc_pad_t pad_list = { RM_RANGE (SC_P_M40_I2C0_SCL, SC_P_M40_GPIO0_01) }; 结合 sc_fw_api_qm_b0.pdf 文档,index 7~10 的引脚都将在划分到 MCU0 分区。 sc_rm_mem_list_t 配置了包括 RAM 在内的可使用存储空间。 static const sc_rm_mem_list_t mem_list = { {0x088000000ULL, 0x0887FFFFFULL}, {0x008081000ULL, 0x008180FFFULL} }; rm_partition_create 使用上面配置的所有资源创建 MCU0 分区。 BRD_ERR (rm_partition_create(pt_boot, pt_m4_0, SC_FALSE, SC_TRUE, SC_FALSE, SC_TRUE, SC_FALSE, SC_R_M4_0_PID0, rsrc_list, ARRAY_SIZE(rsrc_list), pad_list, ARRAY_SIZE (pad_list), mem_list, ARRAY_SIZE (mem_list))); 组装 Boot Container NXP i.MX 8QuadMax 处理器使用前面提到的 SCU 来启动系统。启动时除了加载 SCFW,它还可以加载 ATF 和 U-Boot,以及直接加载 M4 核的固件。Boot Container 组装方法参考 Specifics: Build U-Boot for NXP i.MX 8/8X-based SoMs 。默认情况下,如网页描述,使用下面命令组装 Boot Container。该方法生成的 flash.bin 文件中并不包含 M4 核的固件,并且 AP 和 M4 在同一个分区。M4 的固件在 U-Boot 启动时,使用 bootaux 命令从 eMMC 上加载后运行。 make SOC=iMX8QM flash_b0 为了使用上面 SCFW 中划分的分区,使用下面命令组装 Boot Container。 make SOC=iMX8QM flash_regression_linux_m4 编译目标来自 imx-mkimage/iMX8QM/soc.mak 中的定义。flash_regression_linux_m4: $(MKIMG) $(AHAB_IMG) \ scfw_tcm. bin u-boot-atf. bin m4_image. bin m4_1_image. bin \ ./$( MKIMG ) -soc QM -rev B0 -append $( AHAB_IMG ) \ -c -flags 0x00200000 -scfw scfw_tcm.bin \ -ap u-boot-atf.bin a53 0x80000000 \ -p3 -m4 m4_image. bin 0 0x34FE0000 \ -p4 -m4 m4_1_image. bin 1 0x38FE0000 \ - out flash.bin -flags 0x00200000 向 SCFW 的 board.c 传递,SCU 在启动时将会创建 AP0、MCU0、MCU1 和 Shared 的分区。 if (alt_config != SC_FALSE) { sc_fw_port.pdf 中说明了 Bit 21 SCFW_SC_BD_FLAGS_ALT_CONFIG 为更改 SCFW 配置的位,对应 0x00200000。 上面命令中 m4_image.bin 和 m4_1_image.bin 为两个 M4 各自的固件,从各自的 TCML 运行。因此,在执行上面命令前,需要把两个 M4 的固件复制到 imx-mkimage/iMX8QM 目录下。 如下修改 U-boot 源码中 U-boot/cmd/booti.c,重新编译后将 u-boot.bin 复制到 imx-mkimage/iMX8QM 目录下。 if (dest gd - ram_base || dest gd - ram_top) { puts ( "kernel_comp_addr_r is outside of DRAM range!\n" ); //return -EINVAL; } Linux device tree 更新 接下来的演示中,我们在 M4 上使用 multicore_examples/rpmsg_lite_pingpong_rtos 作为演示,在 AP 上的 Linux 系统中也需要开启 rpmsg 节点并加载驱动。针对 Apalis iMX8 BSP 7 的 imx8qm-apalis-v1.1-ixora-v1.2.dtb 需要打 该补丁 。 更新 Boot Container 文件 上面命令执行成功后生成的 flash.bin,需要更新到 Apalis iMX8 模块上的 eMMC 上。对于使用 Toradex Easy Installer 进行批量烧写或者重装系统,可以将 flash.bin 重名为 imx-boot,替换原来的烧录文件中 imx-boot。在开发期间,使用 U-Boot 直接更新 flash.bin 会更加方便,免于重装整个系统镜像。 将 flash.bin 复制到的一台 TFTP 服务器的下载目录中。然后在 U-Boot 中配置 Apalis iMX8 和 TFTP 服务器 IP 地址。 Apalis iMX8 # setenv ipaddr 192.168.3.181 Apalis iMX8 # setenv serverip 192.168.3.196 Apalis iMX8 # saveenv 使用 tftpboot 和 mmc 命令将 flash.bin 下载并写入到 eMMC 上。 mmc write $loadaddr 0 0x973 中最后的数值是写入的 block 数量。tftpboot 在下载时会显示文件大小,例如这里为 1238016 字节。需要写入的 block = (1238016+511)/512,计算结果向上取整,并转为十六进制数值。 Apalis iMX8 # tftpboot $loadaddr flash.bin Using ethernet @5b040000 device TFTP from server 192.168.3.196 ; our IP address is 192.168.3.181 Filename 'flash.bin' . Load address : 0 x95400000 Loading: ################################################## 1.2 MiB 3.4 MiB/s done Bytes transferred = 1238016 ( 12 e400 hex) Apalis iMX8 # mmc dev 0 1 Apalis iMX8 # mmc write $loadaddr 0 0x973 测试 在 U-Boot 中配置启动时加载的 device tree 文件。 Apalis iMX8 # setenv fdtfile imx8qm-apalis-v1.1-ixora-v1.2.dtbApalis iMX8 # saveenvApalis iMX8 # reset 启动后可以在 Linux 和两个 M4 的调试串口上看到启动内容。 Linux 中进入 kernel modules 驱动目录 kernel/drivers/rpmsg,加载 imx_rpmsg_pingpong.ko。两个 M4 上的固件在发现 rpmsg 通道后,自动向 Linux 发送消息。 # insmod imx_rpmsg_pingpong .ko ... get 91 ( src : 0 x1f) get 101 ( src : 0 x1e) imx_rpmsg_pingpong virtio1 .rpmsg-openamp-demo-channel .-1 .30 : goodbye ! get 93 ( src : 0 x1f) get 95 ( src : 0 x1f) get 97 ( src : 0 x1f) get 99 ( src : 0 x1f) get 101 ( src : 0 x1f) imx_rpmsg_pingpong virtio3 .rpmsg-openamp-demo-channel-1 .-1 .31 : goodbye ! 总结 文章介绍了如何使用 SCU 划分不同的分区,将 AP 和 M4 之间做硬件隔离,并使用 SCFW 直接加载 M4 的固件,不仅提高系统可靠性,也将 M4 运行提前到 U-Boot 之前,加快启动速度。更多关于 SCU 的高级高级功能,可以参考 SCFW 的说明文档。 ​
  • 热度 13
    2023-2-13 10:04
    2028 次阅读|
    0 个评论
    B y Toradex 胡珊逢 A palis iMX 8 计算机模块采用了 NXP 的 i.MX 8 QuadMax 处理器。该处理器具有两个 Vivante GC7000/XSVX 单元,能够支持 OpenCL 、 Open VX 、 OpenGL ES 。本文将介绍如何使用 NXP 提供的 imx-gpu-sdk 编译能够在 A palis iMX 8 运行的 OpenCL 和 OpenCV 应用。 Toradex 的计算机模块所安装的 L inux BSP 采用 Yocto Project 编译 。为了编译和运行 OpenCL 和 OpenCV 应用,首先需要重新编译 BSP 和 SDK ,以添加相关库文件、头文件等。在 Yo cto Project 的编译目录中修改 build/conf/local.conf 文件,添加如下内容: ------------------------------------ IMAGE_INSTALL_append = " imx-gpu-viv imx-gpu-sdk fmt python3 python3-pip \ opencv" PACKAGECONFIG_append_mx8qm = " opencl" TOOLCHAIN_TARGET_TASK_append = " imx-gpu-viv imx-gpu-sdk stb fmt opencv" ------------------------------------ 然后运行下面两个命令,分别生成安装镜像和 SDK 工具。 ------------------------------------ bitbake tdx-reference-multimedia-image bitbake tdx-reference-multimedia-image -c populate_sdk ------------------------------------ 使用 Toradex Easy Installer 安装生成的镜像。复制生成的 SDK 安装文件 tdx-xwayland-glibc-x86_64-Reference-Multimedia-Image-aarch64-apalis-imx8-toolchain-5.7.0.sh 到 L inux 电脑,如 Ubuntu 20.04 。这里安装到 /opt/SDK/ 路径,当然也可以换成其他合适的目录。由于 SDK 中缺少了 stb 库相关的头文件,因此,需要将 Yocto Project 编译路的 build/tmp/sysroots-components/aarch64/stb/usr/ inc lude / 里面所有 .h 头文件复制到 SDK 的安装路径 sysroots/aarch64-tdx-linux/usr/include/stb / 下面。同时,在 environment-setup-aarch64-tdx-linux 文件里添加 CPATH 变量。 ------------------------------------ export ARCH=arm64 export CROSS_COMPILE=aarch64-tdx-linux- export CPATH=/opt/SDK/sysroots/aarch64-tdx-linux/usr/include/stb ------------------------------------ 接下来下载 OpenCL 和 OpenCV 应用代码。 ------------------------------------ git clone -b master https://github.com/nxpmicro/gtec-demo-framework.git ------------------------------------ 安装编译代码所需的其他工具, py thon 版本需要 3.6 以及以上。 ------------------------------------ apt install build-essential ninja-build c make ------------------------------------ 编译 OpenCL 应用。其中 ROOTFS 的路径需要结合 SDK 的实际安装位置而修改,这里为 /opt/SDK/sysroots/aarch64-tdx-linux 。 ------------------------------------ source /opt/SDK/environment-setup-aarch64-tdx-linux cd /opt/SDK/gtec-demo-framework export FSL_PLATFORM_NAME=Yocto export ROOTFS=/opt/SDK/sysroots/aarch64-tdx-linux source prepare.sh c d DemoApps/OpenCL/FastFourierTransform FslBuild.py ------------------------------------ 编译 OpenC V 应用。由于 Apalis iMX8 的图形框架采用 wayland ,因此在编译时添加 --Variants 参数。 ------------------------------------ source /opt/SDK/environment-setup-aarch64-tdx-linux cd /opt/SDK/gtec-demo-framework export FSL_PLATFORM_NAME=Yocto export ROOTFS=/opt/SDK/sysroots/aarch64-tdx-linux source prepare.sh c d DemoApps/OpenCV/OpenCV101 FslBuild.py --Variants ------------------------------------ 编译完成后在 gtec-demo-framework 文件夹的 build 目录生成了对应的项目文件。 ------------------------------------ root@3b368d78738f:/opt/SDK/gtec-demo-framework/build/Yocto/Ninja/release/DemoApps# tree -L 3 . |-- OpenCL | `-- FastFourierTransform | |-- CMakeFiles | |-- Content | |-- OpenCL.FastFourierTransform | |-- OpenCL.FastFourierTransformConfigVersion.cmake | |-- cmake_install.cmake | `-- content_deps.txt `-- OpenCV `-- OpenCV101 |-- CMakeFiles |-- Content |-- OpenCV.OpenCV101 |-- OpenCV.OpenCV101ConfigVersion.cmake |-- cmake_install.cmake `-- content_deps.txt ------------------------------------ 将 gtec-demo-framework/build/Yocto/Ninja/release/DemoApps 下的两个文件夹复制到 Apalis iMX8 上即可运行。 ------------------------------------ root@apalis-imx8:~/DemoApps/OpenCV/OpenCV101# ./OpenCV.OpenCV101 Simple Linear Blender ----------------------- libpng warning: iCCP: known incorrect sRGB profile ------------------------------------ O penCV 应用在显示器上可以看到如下内容。 Open CL FastFourierTransform 显示在 GPU 上运行状况。 ------------------------------------ root@apalis-imx8-06852111:~/DemoApps/OpenCL/FastFourierTransform# ./OpenCL.FastFourierTransform Block size: 16 Length: 16 Print result: yes Initializing device(s)... Get the Device info and select Device... # of Devices Available = 1 # of Compute Units = 2 # compute units = 2 Getting device id... …… Kernel execution time on GPU (kernel 0): 0.000146 seconds Kernel execution time on GPU (kernel 1): 7.70000e-05 seconds Kernel execution time on GPU (kernel 2): 7.80000e-05 seconds Kernel execution time on GPU (kernel 3): 8.40000e-05 seconds Total Kernel execution time on GPU: 0.000385 seconds Successful. ------------------------------------ 更多关于 OpenCL 、 O penCV 等应用开发的内容可以参考 gtec-demo-framework 的网页说明,从而开发用户自己的应用。
  • 热度 2
    2019-11-12 12:28
    4995 次阅读|
    1 个评论
    By Toradex 胡珊逢 1). 简介 NXP 发布的 i.MX8 处理器具有多种规格,最高配置的 i.MX8QM 具有双核 Cortex-A72 和四核 Cortex-A53 。这种大小核组合的处理器,为用户带来更大的性能灵活性,利用高性能的大核快速完成运算,低性能小核则提供优化的功耗表现。下面我们将以 Apalis iMX8QM 核心板为例,介绍如何利用这种特性,并观察功耗差异。 2). 单核性能测试 a). Cortex-A72 最高时钟 1.6GHz , Cortex-A53 最高为 1.2GHz 。 Cortex-A72 和 Cortex-A53 在架构也上存在很大的 差异 ,虽然同属于 ARMv8.0-A ,但是在流水线深度、乱序执行、缓存等特性上却有所不同,从而带来处理性能的差异。理论上 Cortex-A72 性能会高于 Cortex-A53 。 b). 为了测试在 Cortex-A72 和 Cortex-A53 上的单核性能表现 , 我们将使用 encode-flac , 测试压缩一个 WAV 音频文件所消耗的时间。该工具是单线程运行,适合做单核计算测试。 ./ 首先下载 SDK ,编译 encode-flac 。 ------------------------------- $ . environment-setup-aarch64-tdx-linux $ cd encode-flac $ ./configure --prefix=~/encode-flac-bin --host=aarch64-tdx-linux --build=x86_64-linux $ make $ make install ------------------------------- ./ 在 ~/encode-flac-bin 能找到到本次测试所需的 flac 程序。 Taskset 工具能够指定应用运行在哪个处理器上面。 Taskset 通过设置 CPU 掩码来选择 CPU 。我们可以用 cpufreq-info 命令查看所有可用的 CPU 。 ------------------------------- # cpufreq-info cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009 Report errors and bugs to cpufreq@vger.kernel.org, please. analyzing CPU 0: driver: imx8-cpufreq CPUs which run at the same hardware frequency: 0 1 2 3 CPUs which need to have their frequency coordinated by software: 0 1 2 3 maximum transition latency: 61.0 us. hardware limits: 600 MHz - 1.20 GHz available frequency steps: 600 MHz, 900 MHz, 1.10 GHz, 1.20 GHz available cpufreq governors: interactive, conservative, userspace, powersave, ondemand, performance, schedutil current policy: frequency should be within 600 MHz and 1.20 GHz. The governor "performance" may decide which speed to use within this range. current CPU frequency is 1.20 GHz (asserted by call to hardware). cpufreq stats: 600 MHz:59.80%, 900 MHz:0.06%, 1.10 GHz:0.04%, 1.20 GHz:40.11% (240) ...... analyzing CPU 5: driver: imx8-cpufreq CPUs which run at the same hardware frequency: 4 5 CPUs which need to have their frequency coordinated by software: 4 5 maximum transition latency: 61.0 us. hardware limits: 600 MHz - 1.60 GHz available frequency steps: 600 MHz, 1.06 GHz, 1.30 GHz, 1.60 GHz available cpufreq governors: interactive, conservative, userspace, powersave, ondemand, performance, schedutil current policy: frequency should be within 600 MHz and 1.60 GHz. The governor "performance" may decide which speed to use within this range. current CPU frequency is 1.60 GHz (asserted by call to hardware). cpufreq stats: 600 MHz:69.45%, 1.06 GHz:0.05%, 1.30 GHz:0.01%, 1.60 GHz:30.49% (153) ------------------------------- ./ 这里总共有 CPU 0 到 CPU 5 ,其中 CPU 0 ~ CPU 3 为 Cortex-A53 , CPU 4 ~ CPU 5 为 Cortex-A72 。 例如 0x30 表示允许使用两个 A72 核心, 0x10 表示只使用一个 A72 ,同样 0x01 表示只使用一个 A53 ,而 0x3F 则表示使用所有的处理器核心。需要注意的是,这里是指用 taskset 工具指定某一个程序所使用的处理器核心,不被指定的处理器核心仍处于工作状态,只是不用其来运行该程序。因此 taskset 并不能启到关闭处理器核心的功能。 c). 我们将配合编译好的 encode-flac 和 taskset 工具来观察 i.MX8QM 不同核心的计算机能力以及功耗的差异。 在空闲状态下,我们通过功率计查看 Ixora 底板和 Apalis iMX8QM 模块以及电源适配器的功耗(本文测试仅连接以太网和调试串口和散热器风扇,不连接包括显示器在内的其他设备)为 7.6W 。 ./ 在一个 A53 内核上运行 ------------------------------- &1 flac 1.3.2 Copyright (C) 2000-2009 Josh Coalson, 2011-2016 Xiph.Org Foundation flac comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Type `flac' for details. Perfect.wav: WARNING: skipping unknown chunk 'LIST' (use --keep-foreign-metadata to keep) Perfect.wav: wrote 29478930 bytes, ratio=0.634 real 0m 41.21s user 0m 40.90s sys 0m 0.21s ------------------------------- 压缩一个 wav 文件耗时 41.2 秒,功耗 7.9W 。 上图我们看到,单线程的 encode-flac 仅在一个 A53 处理器上满负荷运行。 ./ 在一个 A72 内核上运行 ------------------------------- &1 flac 1.3.2 Copyright (C) 2000-2009 Josh Coalson, 2011-2016 Xiph.Org Foundation flac comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Type `flac' for details. Perfect.wav: WARNING: skipping unknown chunk 'LIST' (use --keep-foreign-metadata to keep) Perfect.wav: wrote 29478930 bytes, ratio=0.634 real 0m 9.23s user 0m 9.06s sys 0m 0.13s ------------------------------- 压缩一个 wav 文件耗时 9.2 秒,功耗 9.5W 。 上图我们看到,单线程的 encode-flac 仅在一个 A72 处理器上满负荷运行。 单核性能和功耗对比 3). 多核性能测试 a). 我们将使用一个简单 C++ 全局光照渲染器 smallpt 在多个 CPU 上借助 OpenMP 实现多线程运算,测量在不同核心上完成渲染所需要的时间以及功耗。通过下面命令编译 smallpt ------------------------------- $ ./configure --prefix=/home/ben/temp_ram --host=aarch64-tdx-linux --build=x86_64-linux $ make ------------------------------- b). 为了充分释放所有核心的计算能力 , 我们将所有的 CPU 都配置为可用的最高时钟 , 这时候请务必使用良好的散热器件为处理器降温。 ------------------------------- /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor ------------------------------- 此时空闲状态下的 Ixora 底板和 Apalis iMX8QM 模块以及电源适配器的功耗为 7.9W 。 ./ 在 4 个 A53 同时运行 ------------------------------- root@apalis-imx8:~# taskset 0x0f time ./smallpt 100 Rendering (100 spp) 100.00% real 3m 19.25s user 13m 9.33s sys 0m 0.09s ------------------------------- 功耗为 8.9W ,耗时 3 分 19 秒。上图中看到 4 个 A53 核心处于满负荷状态。 ./ 在 2 个 A72 同时运行 ------------------------------- root@apalis-imx8:~# taskset 0x30 time ./smallpt 100 Rendering (100 spp) 100.00% real 2m 58.71s user 5m 56.20s sys 0m 0.03s ------------------------------- 功耗为 10.3W ,耗时 2 分 58 秒。上图中看到 2 个 A72 核心处于满负荷状态。 ./ 在 4 个 A53 和 2 个 A72 同时运行 ------------------------------- root@apalis-imx8:~# taskset 0x3f time ./smallpt 100 Rendering (100 spp) 100.00% real 1m34.648s user 9m20.123s sys 0m0.127s ------------------------------- 功耗为 11.4W ,耗时 1 分 34 秒。上图中看到 2 个 A72 和 4 个 A53 核心处于均满负荷状态。 多核性能和功耗对比 4). 总结 Apalis iMX8QM 计算机模块能够利用 A72 核心强劲的计算能力迅速完成运算任务,甚至是调用 iMX8QM 所有 6 个核心 发挥其最大的 CPU 计算能力 ,而在 A53 核心上则能够以较低的功耗执行,这种组合方式为嵌入式产品在功耗和性能上提供了灵活的选择。除此之外 Apalis iMX8QM 还具有 DSP 、双核 GPU 以及 Cortex-M4 ,能够借助 DSP 指令、 OpenCL 并行计算带来更多的算力,同时 M4 还可以以更低的功耗运行。 本次测试采用了 Toradex Linux v3.0b2 BSP , 随着模块本身和软件的进一步完善 , 该模块会有更佳的表现。 ​
相关资源