首页 > 其他分享 >PICO 2 RP2350使用官方推荐RISC-V编译器在O3优化下的coremark跑分,与Hazard3库宣传跑分未匹配

PICO 2 RP2350使用官方推荐RISC-V编译器在O3优化下的coremark跑分,与Hazard3库宣传跑分未匹配

时间:2024-09-30 17:49:33浏览次数:9  
标签:coremark Hazard3 RISC 编译器 CoreMark GCC13.2 O3 STACK Iterations

编译环境:WSL Ubuntu22.04 GCC13.2.0

 Hazard3 存储库icon-default.png?t=O83Ahttps://github.com/Wren6991/Hazard3/

RP2350默认频率150MHz,编译内核为其RISC-V架构内核,在此频率下实测O3等级跑分453左右,O2等级跑分429左右。

在测试时,当我打开第二个核心后,并且第二个核心只用来控制led灯,此时coremark跑分明显下降,使用arm内核时未出现此现象,rp2040也并未出现此现象。

RP2350内部有两个Cortex-M33核心,两个自研RISC-V核心,虽然一共有四个但是只能选择两个核心使用,本文只使用了一个RISC-V的核心进行测试。

        移植coremark,加入TinyUSB虚拟串口打印,主函数如下:

int main(void) {
    set_sys_clock_khz(200*1000,true);
    clock_configure(clk_peri,0,CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS,200*MHZ,200*MHZ);
    stdio_init_all();
    int rc = pico_led_init();
    hard_assert(rc == PICO_OK);
    struct repeating_timer timer0;

    add_repeating_timer_us(-1000,sysTick,NULL,&timer0);
    main_core(0,0);
    while (true) {
        pico_set_led(true);
        sleep_ms(LED_DELAY_MS);
        printf("Hello, world!\n");
        sleep_ms(LED_DELAY_MS);
        pico_set_led(false);
        sleep_ms(LED_DELAY_MS);
    }
}

CMakeList.txt规则如下:

add_executable(blink
    blink.c
    )

# Release        - 添加 -O3 -DNDEBUG 标志
# Debug          - 添加 -g 标志
# MinSizeRel     - 添加 -Os -DNDEBUG
# RelWithDebInfo - 添加 -O2 -g -DNDEBUG 标志
# pull in common dependencies
add_subdirectory(coremark)
target_link_libraries(blink pico_stdlib coremark )

if (PICO_CYW43_SUPPORTED)
    target_link_libraries(blink pico_cyw43_arch_none)
endif()

pico_enable_stdio_usb(blink 1)
pico_enable_stdio_uart(blink 0)
# create map/bin/hex file etc.
pico_add_extra_outputs(blink)

# add url via pico_set_program_url
example_auto_set_url(blink)

coremark目录CMakeList.txt规则:


file(GLOB_RECURSE srcs CONFIGURE_DEPENDS ./*.c ./*.h)
add_library(coremark STATIC ${srcs})
target_link_libraries(coremark PUBLIC pico_stdlib)
target_include_directories(coremark PUBLIC include)

与编译rp2350的arm内核不同,需要risc-v编译器,我使用的是官方推荐的网址https://www.embecosm.com/resources/tool-chain-downloads/#riscv-stable   下载对应的版本

cmake的时候这样输入:

export PICO_SDK_PATH=我的路径
export  PICO_RISCV_TOOLCHAIN_PATH=/我的路径/riscv32-embecosm-ubuntu2204-gcc13.2.0 
export  PICO_TOOLCHAIN_PATH=/我的路径/riscv32-embecosm-ubuntu2204-gcc13.2.0 
cmake .. -DCMAKE_BUILD_TYPE=Release  -DPICO_PLATFORM=rp2350

150MHz频率跑分:

2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 22039
Total time (secs): 22.039000
Iterations/Sec   : 453.741095
Iterations       : 10000
Compiler version : GCC13.2.0
Compiler flags   : -O3
Memory location  : STACK
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0x988c
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 453.741095 / GCC13.2.0 -O3 / STACK

250MHz频率跑分:

2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 11927
Total time (secs): 11.927000
Iterations/Sec   : 838.433806
Iterations       : 10000
Compiler version : GCC13.2.0
Compiler flags   : -O3
Memory location  : STACK
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0x988c
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 838.433806 / GCC13.2.0 -O3 / STACK

320MHz频率跑分:

2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 10322
Total time (secs): 10.322000
Iterations/Sec   : 968.804495
Iterations       : 10000
Compiler version : GCC13.2.0
Compiler flags   : -O3
Memory location  : STACK
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0x988c
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 968.804495 / GCC13.2.0 -O3 / STACK

当我打开第二核心并只用来闪烁led时,频率320MHz的跑分如下:

2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 11298
Total time (secs): 11.298000
Iterations/Sec   : 885.112409
Iterations       : 10000
Compiler version : GCC13.2.0
Compiler flags   : -O3
Memory location  : STACK
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0x988c
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 885.112409 / GCC13.2.0 -O3 / STACK

在此条件下,调整到250MHz频率,跑分如下:

2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 14515
Total time (secs): 14.515000
Iterations/Sec   : 688.942473
Iterations       : 10000
Compiler version : GCC13.2.0
Compiler flags   : -O3
Memory location  : STACK
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0x988c
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 688.942473 / GCC13.2.0 -O3 / STACK

测试得到在不开第二个核心的情况下,Release模式跑分3.00CoreMark/MHz,相对于arm架构内核,有一定提升,但在打开第二个核心后跑分变成了2.75CoreMark/MHz,这一点比较奇怪,因为ARM架构的M33内核并未出现此情况,最后下次看看他们功率情况。

标签:coremark,Hazard3,RISC,编译器,CoreMark,GCC13.2,O3,STACK,Iterations
From: https://blog.csdn.net/weixin_49959979/article/details/142661223

相关文章

  • sizeof vs strlen - 关于代码可读性、性能考量和编译器优化
    1、起因经常在咱们代码里面见到sizeof(“HEADER”)这类代码来计算常量字符串的长度,例如上次的一个代码review:之所以这么写可能基于以下几点考虑:(1)sizeof()是运算符而不是函数调用,编译时确定而不是运行时执行,因此不占用运行时时间(2)strlen()是GLIBC标准库函数,运行时需要进行......
  • 应用层需要 AI 编译器
    应用层需要AI编译器从硬件角度以及底层软件的角度来看待为什么需要AI编译器的,而现在可以换一个上层应用视角来看待这个问题。以深度神经网络为技术基础的人工智能领域在近些年发展十分迅速,从10年前,AI技术可能只能解决图形分类等较为简单的任务,但如今无论是推荐系统、大语......
  • 为什么需要 AI 编译器
    为什么需要AI编译器随着硬件技术的不断进步,进入了一个新的计算加速时代,这个时代的硬件平台变得越来越复杂和多层次。现代计算加速平台采用了多层架构,包括标量、向量、多核、多包、多机架等不同层次的并行处理能力。这种设计不仅提高了性能,也增加了硬件设计的复杂性。同时,现代计......
  • 传统编译器与 AI 编译器区别
    传统编译器与AI编译器区别接下来,来了解一下AI编译器与传统编译器的区别与联系。1.区别与联系1)目标相同:AI编译器与传统编译器都是通过自动化的方式进行程序优化和代码生成,从而节省大量的人力对不同底层硬件的手动优化。2)优化方式类似:在编译优化层,AI编译器与传统编译器都......
  • RISC-V
    异常时只在与当前RISC-V线程中的指令相关联的运行时发生的不寻常条件术语trap陷阱指由RISC-V线程中发生的异常情况导致的控制同步转移到陷阱处理程序。、术语中断指与当前RISC-V线程异步发生的外部事件。当必须服务的中断发生时,一些指令被选择接收中断异常,随后遇到陷阱。数据......
  • RISC-V学习笔记
    文档介绍:https://www.cnblogs.com/mikewolf2002/p/9654946.html中文手册:http://crva.ict.ac.cn/documents/RISC-V-Reader-Chinese-v2p1.pdf所有立即数都被拓展成32位。opcode指定总体功能,同时决定了指令格式。funct指定了具体的小功能。压缩指令集......
  • 【Linux】深度解析与实战应用:GCC/G++编译器入门指南
    ......
  • JAVA基础之八-方法变量作用域和编译器
    本文主要讨论方法中变量作用域。不涉及类属性变量、静态变量、线程变量共享等。虽然知道某类变量的作用域非常重要,但是没有太多需要说的,因为许多东西是显而易见,不言自明。 在大部分情况下,或者在老一点版本中,java语法看起来都比较正常,或者说相对古典。但是随着JAVA版本的迭代,......
  • qt mvsc编译器中文乱码
    qtmvsc编译器中文乱码1.问题mvsc编译对中文不太友好,设置ui界面时显示中文会乱码。2.解决办法方法1修改qtcreator文件编码格式工具->选项->文本编辑在pro文件里添加如下代码msvc{QMAKE_CFLAGS+=/utf-8QMAKE_CXXFLAGS+=/utf-8}添加完成点击重新构建,就可......
  • 探索编译器编译c#程序神秘面纱
    编译器编译C#程序的过程可以分为以下几个主要步骤:1.词法分析(LexicalAnalysis)编译器首先将源代码文本分解成一个个的标记(tokens)。每个标记代表一个关键字、标识符、运算符、字面量或其他语法元素。空白字符和注释通常在这个阶段被忽略或移除。2.语法分析(SyntaxAnalysi......