【问题标题】:does ARMv8 come with NEON and VFPV3 built in?ARMv8 是否内置了 NEON 和 VFPV3?
【发布时间】:2021-05-06 06:20:16
【问题描述】:

我一直在研究如何在 ARMv8 系统上优化使用 OpenCV。

通过谷歌搜索几个教程,我发现从源代码构建 OpenCV 时,很多时候 VFPV3 或 NEON 选项都没有激活。

然后我被告知“通常 GCC 将处理与处理器匹配的扩展。ARMv7 有不同的处理器版本,有些支持 VFPV3 和 NEON,因此有标志。所有 ARMv8,如 Xavier AGX,都有内置的,所以 GCC足够聪明,可以在遇到时使用/编译它们。”

这是否意味着在为 ARMv8 系统构建 OpenCV 时不需要指定 VFPV3 或 NEON?这些默认情况下是否处于活动状态?

【问题讨论】:

    标签: opencv neon armv8


    【解决方案1】:

    根据ARM documentation - AArch64 Floating-point and NEON

    Both floating-point and NEON are required in all standard ARMv8 implementations. However, implementations targeting specialized markets may support the following combinations:
    
        No NEON or floating-point.
        Full floating-point and SIMD support with exception trapping.
        Full floating-point and SIMD support without exception trapping. 
    

    也就是说,如果您使用的 Armv8-a 实现是“标准”的,而且很可能是,它应该支持全浮点和 SIMD,如果您指定 -march=armv8-a+simd,编译器应该在所有情况下都使用它们.

    似乎结果与 gcc 10.2.0 相同:

    op.c:

    double op( double value)
    {
      double v3 = v1 + v2 + value;
      return v3;
    }
    
    /opt/arm/10/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc  -march=armv8 -S op.c
    cat op.s
           .arch armv8-a
            .file   "op.c"
            .text
            .section        .rodata
            .align  3
            .type   v1, %object
            .size   v1, 8
    v1:
            .word   0
            .word   1072693248
            .align  3
            .type   v2, %object
            .size   v2, 8
    v2:
            .word   0
            .word   1073741824
            .text
            .align  2
            .global op
            .type   op, %function
    op:
    .LFB0:
            .cfi_startproc
            sub     sp, sp, #32
            .cfi_def_cfa_offset 32
            str     d0, [sp, 8]
            fmov    d1, 1.0e+0
            fmov    d0, 2.0e+0
            fadd    d0, d1, d0
            ldr     d1, [sp, 8]
            fadd    d0, d1, d0
            str     d0, [sp, 24]
            ldr     d0, [sp, 24]
            add     sp, sp, 32
            .cfi_def_cfa_offset 0
            ret
            .cfi_endproc
    .LFE0:
            .size   op, .-op
            .ident  "GCC: (GNU Toolchain for the A-profile Architecture 10.2-2020.11 (arm-10.16)) 10.2.1 20201103"
    .section        .note.GNU-stack,"",@progbits
    
    /opt/arm/10/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc  -march=armv8-a+simd -S op.c
    cat op.s
            .arch armv8-a
            .file   "a.c"
            .text
            .section        .rodata
            .align  3
            .type   v1, %object
            .size   v1, 8
    v1:
            .word   0
            .word   1072693248
            .align  3
            .type   v2, %object
            .size   v2, 8
    v2:
            .word   0
            .word   1073741824
            .text
            .align  2
            .global op
            .type   op, %function
    op:
    .LFB0:
            .cfi_startproc
            sub     sp, sp, #32
            .cfi_def_cfa_offset 32
            str     d0, [sp, 8]
            fmov    d1, 1.0e+0
            fmov    d0, 2.0e+0
            fadd    d0, d1, d0
            ldr     d1, [sp, 8]
            fadd    d0, d1, d0
            str     d0, [sp, 24]
            ldr     d0, [sp, 24]
            add     sp, sp, 32
            .cfi_def_cfa_offset 0
            ret
            .cfi_endproc
    .LFE0:
            .size   op, .-op
            .ident  "GCC: (GNU Toolchain for the A-profile Architecture 10.2-2020.11 (arm-10.16)) 10.2.1 20201103"
            .section        .note.GNU-stack,"",@progbits
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      相关资源
      最近更新 更多