[Buildroot] [PATCH v2 2/2] package/coremark-pro: new package

Chris Packham judge.packham at gmail.com
Fri Jan 8 08:04:22 UTC 2021


On Fri, 8 Jan 2021, 11:00 AM Arnout Vandecappelle, <arnout at mind.be> wrote:

>
>
> On 11/11/2020 23:41, Chris Packham wrote:
> > CoreMark-Pro is a comprehensive, advanced processor benchmark that
> > works with and enhances the market-proven industry-standard EEMBC
> > CoreMark benchmark.
> >
> > https://www.eembc.org/coremark-pro/
> >
> > Signed-off-by: Chris Packham <judge.packham at gmail.com>
> > ---
> > Changes in v2:
> > - Add depends on BR2_USE_MMU (thanks Matt)
> >
> [snip]
> > diff --git a/package/coremark-pro/coremark-pro.hash
> b/package/coremark-pro/coremark-pro.hash
> > new file mode 100644
> > index 0000000000..16b121edb3
> > --- /dev/null
> > +++ b/package/coremark-pro/coremark-pro.hash
> > @@ -0,0 +1,3 @@
> > +#locally computed
>
>  (nitpick)
>
> # Locally computed
>

Noted


> > +sha256
> 440223554134832efec4ad220795611769ded3869fbc3ce3c59b05b7ddeb9f6d
> coremark-pro-1.1.2743.tar.gz
> > +sha256
> 0d7775bd793ea71fef3594c18164a08ed2f5f66c898958d0644f7a236a536f2b  LICENSE.md
> > diff --git a/package/coremark-pro/coremark-pro.mk
> b/package/coremark-pro/coremark-pro.mk
> > new file mode 100644
> > index 0000000000..d3e99fcdfd
> > --- /dev/null
> > +++ b/package/coremark-pro/coremark-pro.mk
> > @@ -0,0 +1,42 @@
> >
> +################################################################################
> > +#
> > +# CoreMark-PRO
> > +#
> >
> +################################################################################
> > +
> > +COREMARK_PRO_VERSION = 1.1.2743
> > +COREMARK_PRO_SITE = $(call
> github,eembc,coremark-pro,v$(COREMARK_PRO_VERSION))
> > +COREMARK_PRO_LICENSE = Apache-2.0
> > +COREMARK_PRO_LICENSE_FILES = LICENSE.md
> > +COREMARK_PRO_DEPENDENCIES = perl
> > +
> > +ifeq ($(BR2_ENDIAN),"BIG")
> > +COREMARK_PRO_MAKE_OPTS += PLATFORM_DEFINES='EE_BIG_ENDIAN=1
> EE_LITTLE_ENDIAN=0'
> > +else
> > +COREMARK_PRO_MAKE_OPTS += PLATFORM_DEFINES='EE_BIG_ENDIAN=0
> EE_LITTLE_ENDIAN=1'
> > +endif
> > +
> > +COREMARK_PRO_MAKE_OPTS += \
> > +     TARGET=linux$(if $(BR2_ARCH_IS_64),64) \
> > +     EXE=
> > +
> > +define COREMARK_PRO_BUILD_CMDS
> > +     $(TARGET_MAKE_ENV) $(MAKE) CC="$(TARGET_CC)" LD="$(TARGET_CC)" -C
> $(@D) \
> > +             $(COREMARK_PRO_MAKE_OPTS) build
> > +endef
> > +
> > +COREMARK_PRO_MARKS = cjpeg-rose7-preset core linear_alg-mid-100x100-sp
> loops-all-mid-10k-sp nnet_test parser-125k radix2-big-64k sha-test zip-test
> > +COREMARK_PRO_SCRIPTS = results_parser.pl cert_median.pl cert_mark.pl
> headings.txt
> > +
> > +define COREMARK_PRO_INSTALL_TARGET_CMDS
> > +     mkdir -p  $(TARGET_DIR)/usr/share/coremark-pro/logs
> > +     $(foreach m,$(COREMARK_PRO_MARKS),\
> > +             $(INSTALL) -D $(@D)/builds/linux$(if
> $(BR2_ARCH_IS_64),64)/gcc$(if $(BR2_ARCH_IS_64),64)/bin/$(m)
> $(TARGET_DIR)/usr/bin/$(m)$(sep) \
> > +             size $(TARGET_DIR)/usr/bin/$(m) >
> $(TARGET_DIR)/usr/share/coremark-pro/logs/$(m).size.log$(sep))
>
>  Why is this size.log needed? Would be nice to have mentioned that in the
> commit
> message.
>

I _think_ it's used as part of verifying the benchmarks. Doing it this way
saves having to depend on binutils for the target.


> > +     $(INSTALL) -D $(@D)/builds/linux$(if $(BR2_ARCH_IS_64),64)/gcc$(if
> $(BR2_ARCH_IS_64),64)/data/libbmp/Rose256.bmp
> $(TARGET_DIR)/usr/share/coremark-pro/Rose256.bmp
> > +     $(foreach s,$(COREMARK_PRO_SCRIPTS),\
> > +             $(INSTALL) -D $(@D)/util/perl/$(s)
> $(TARGET_DIR)/usr/share/coremark-pro/util/perl/$(s)$(sep))
> > +     $(Q)cp package/coremark-pro/coremark-pro.sh $(TARGET_DIR)/usr/bin/
> > +endef
> > +
> > +$(eval $(generic-package))
> > diff --git a/package/coremark-pro/coremark-pro.sh
> b/package/coremark-pro/coremark-pro.sh
> > new file mode 100755
> > index 0000000000..65ad9df645
> > --- /dev/null
> > +++ b/package/coremark-pro/coremark-pro.sh
> > @@ -0,0 +1,36 @@
> > +#!/bin/sh
> > +# SPDX-License-Identifier: Apache-2.0
> > +
> > +workloads="cjpeg-rose7-preset core linear_alg-mid-100x100-sp \
> > +    loops-all-mid-10k-sp nnet_test parser-125k radix2-big-64k sha-test
> zip-test"
>
>  I think it would be better to set
>
> workloads="@COREMARK_PRO_MARKS#@"
>
> here, and substitute it from the .mk file. That way, changing the list has
> to be
> done only in one place.
>

Yep agreed. For such things is it normal to have a .sh.in and "build" the
actual .sh file or just sed it in place?


> > +
> > +rm -rf /tmp/coremark-pro
> > +mkdir -p /tmp/coremark-pro
> > +cp /usr/share/coremark-pro/Rose256.bmp /tmp/coremark-pro
> > +cp /usr/share/coremark-pro/logs/*.size.log /tmp/coremark-pro
> > +
> > +cd /tmp/coremark-pro
> > +
> > +for contype in single best; do
> > +    cat /usr/share/coremark-pro/util/perl/headings.txt >>result.log
> > +    for wld in $workloads; do
> > +        [ "$contype" = "single" ] && XCMD="-c1 -w1"
> > +        [ "$contype" = "best" ] && XCMD="-c$(nproc) -w$(nproc)"
> > +        echo "#Results for verification run started at $(date
> +%y%j:%H:%M:%S) XCMD=$XCMD" >$wld-$contype-result.log
> > +        echo "Verification run for $wld"
> > +        $wld $XCMD -v1 > $wld.run.log
> > +        LC_ALL=C perl /usr/share/coremark-pro/util/perl/
> results_parser.pl $wld-$contype-result.log $wld.run.log> +        echo
> "#Results for performance runs started at $(date +%y%j:%H:%M:%S)
> XCMD=$XCMD" >>$wld-$contype-result.log
> > +        echo "Performance run for $wld"
> > +        for i in 1 2 3; do
> > +            $wld $XCMD -v0 > $wld.run.log
> > +            LC_ALL=C perl /usr/share/coremark-pro/util/perl/
> results_parser.pl $wld-$contype-result.log $wld.run.log
> > +        done
> > +        echo "#Median for final result $wld" >>$wld-$contype-result.log
> > +        LC_ALL=C perl /usr/share/coremark-pro/util/perl/cert_median.pl
> $wld-$contype-result.log $contype >>$wld-$contype-result.log
>
>  Since this script supposedly generates user-readable output, I'm not sure
> if
> the LC_ALL=C is appropriate.


I think LC_ALL=C is appropriate as it enables comparison between
boards/SoCs without subtle differences due to the current locale.

Similary, the timestamps should probably use
> "+%X %x" as well.


Yep that's reasonable.

And maybe the other perl invocations too.
>
> > +        cat $wld-$contype-result.log >>result.log
> > +    done
> > +done
>
>  Shouldn't the /tmp/coremark-pro directory be cleaned up again afterwards?
>

I kind of went the otherway in deleting it at the start of the script. My
thought was to leave the artifacts around so they could be manually
inspected or further processed.


>  None of these are major concerns, so I've applied to master (with just the
> small fix in the hash file). Feel free to post improvements as follow up
> patches. Thanks!
>

Thank you. I'm still on an extended break (southern hemisphere summer) so
I'll look at sending some of these updates when I'm in front of a real
keyboard.


>  Regards,
>  Arnout
>
> > +LC_ALL=C perl /usr/share/coremark-pro/util/perl/cert_mark.pl -i
> result.log -s coremarkpro > result.mark
> > +cat result.mark
> > +cd - >/dev/null
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20210108/a8dd09d2/attachment.html>


More information about the buildroot mailing list