espressif/coremark

1.1.0

uploaded 8 months ago
CoreMark Benchmark

readme

[![Component Registry](https://components.espressif.com/components/espressif/coremark/badge.svg)](https://components.espressif.com/components/espressif/coremark)

# Coremark for ESP-IDF

This component is a port of [CoreMark® benchmark](https://github.com/eembc/coremark) to ESP-IDF. It handles compiling CoreMark source files, providing necessary functions to measure timestamps, and enables various compiler to get higher performance.

# Using the benchmark

If you want to run the benchmark and see the results, create a demo project from the provided example:

```bash
idf.py create-project-from-example "espressif/coremark:coremark_example"
```

You can then build the project in `coremark_example` directory as usual. For example, to build the project for ESP32-C3:

```bash
cd coremark_example
idf.py set-target esp32c3
idf.py build
idf.py -p PORT flash monitor
```

(where `PORT` is the name of the serial port)

Refer to ESP-IDF Getting Started Guide for more information about compiling and running a project.

# Using as a component

You can also integrate CoreMark code into you project by adding dependency on `espressif/coremark` component:

```bash
idf.py add-dependency espressif/coremark
```

CoreMark benchmark entry point is an `int main(void)` function, which you can call from your application.

# Performance tweaks

This example does the following things to improve the benchmark result:

1. Enables `-O3` compiler flag for CoreMark source files.
2. Adds `-fjump-tables -ftree-switch-conversion` compiler flags for CoreMark source files. This overrides `-fno-jump-tables -fno-tree-switch-conversion` flags which get set in ESP-IDF build system by default.
3. Places CoreMark code into internal instruction RAM using [linker.lf](linker.lf) file.

For general information about optimizing performance of ESP-IDF applications, see the ["Performance" chapter of the Programming Guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/performance/index.html).

# Example output

Running on ESP32-C3, we can obtain the following output:

```
Running coremark...
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 14661
Total time (secs): 14.661000
Iterations/Sec   : 409.249028
Iterations       : 6000
Compiler version : GCC12.2.0
Compiler flags   : -ffunction-sections -fdata-sections -gdwarf-4 -ggdb -nostartfiles -nostartfiles -Og -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -std=gnu17 -O3 -fjump-tables -ftree-switch-conversion
Memory location  : IRAM
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0xa14c
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 409.249028 / GCC12.2.0 -ffunction-sections -fdata-sections -gdwarf-4 -ggdb -nostartfiles -nostartfiles -Og -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -std=gnu17 -O3 -fjump-tables -ftree-switch-conversion / IRAM
CPU frequency: 160 MHz
```

# Legal

CoreMark is a trademark of EEMBC and EEMBC is a registered trademark of the Embedded Microprocessor Benchmark Consortium.

CoreMark source code is Copyright (c) 2009 EEMBC. The source code is distributed under Apache 2.0 license with additional restrictions with regards to the use of the benchmark. See [LICENSE.md](LICENSE.md) for more details.

Any additional code in this component ("port layer") is Copyright (c) 2022-2023 Espressif Systems (Shanghai) Co. Ltd. and is licensed under Apache 2.0 license.



readme of coremark_example example

                                        
                                        # CoreMark example

This example can be used to run CoreMark benchmark on an Espressif chip.

The example doesn't require any special hardware and can run on any development board.

## Building and running

Run the application as usual for an ESP-IDF project. For example, for ESP32-C3:
```
idf.py set-target esp32c3
idf.py -p PORT flash monitor
```

After launching, the benchmark takes a few seconds to run, please be patient.

## Example output

Running on ESP32-C3, we can obtain the following output:

```
Running coremark...
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 14661
Total time (secs): 14.661000
Iterations/Sec   : 409.249028
Iterations       : 6000
Compiler version : GCC12.2.0
Compiler flags   : -ffunction-sections -fdata-sections -gdwarf-4 -ggdb -nostartfiles -nostartfiles -Og -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -std=gnu17 -O3 -fjump-tables -ftree-switch-conversion
Memory location  : IRAM
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0xa14c
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 409.249028 / GCC12.2.0 -ffunction-sections -fdata-sections -gdwarf-4 -ggdb -nostartfiles -nostartfiles -Og -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -std=gnu17 -O3 -fjump-tables -ftree-switch-conversion / IRAM
CPU frequency: 160 MHz
```

                                    

Links

Supports all targets

License: Custom

To add this component to your project, run:

idf.py add-dependency "espressif/coremark^1.1.0"

or download archive

Dependencies

  • ESP-IDF >=4.4
  • Examples:

    coremark_example

    more details

    To create a project from this example, run:

    idf.py create-project-from-example "espressif/coremark^1.1.0:coremark_example"

    or download archive

    Stats

    • Downloaded in total
      Downloaded in total 30 times
    • Downloaded this version
      This version: 30 times

    Badge

    espressif/coremark version: 1.1.0
    |