Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

{compiler}[GCCcore/9.3.0] AOCC v2.3.0 #11868

Merged

Conversation

SebastianAchilles
Copy link
Member

@SebastianAchilles SebastianAchilles commented Dec 12, 2020

(created using eb --new-pr)

@SebastianAchilles
Copy link
Member Author

WIP because AOCC picks the GCC from OS and not GCCcore/9.3.0. I think the install.sh needs a patch. You can check with:

$ ml AOCC
$ clang -v hello_world.c
...
Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/8
Selected GCC installation: /usr/lib/gcc/x86_64-redhat-linux/8
...

Apart from that the easyconfig for AOCC is working.

@boegel
Copy link
Member

boegel commented Dec 12, 2020

cc @robert-mijakovic

@boegel boegel added the new label Dec 12, 2020
@boegel boegel added this to the next release (4.3.3?) milestone Dec 12, 2020
@boegel
Copy link
Member

boegel commented Dec 12, 2020

Maybe @migueldiascosta has some experience with this?

…t is only creating a lua file which is not needed for an easybuild installation
@SebastianAchilles
Copy link
Member Author

WIP because AOCC picks the GCC from OS and not GCCcore/9.3.0. I think the install.sh needs a patch. You can check with:

$ ml AOCC
$ clang -v hello_world.c
...
Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/8
Selected GCC installation: /usr/lib/gcc/x86_64-redhat-linux/8
...

This seems to be not a bug! When installing Clang from source one can set -DGCC_INSTALL_PREFIX= to the software root of GCCcore. However AOCC is shipped as binary. That is why Clang is searching for GCC (actually it is libstdc++ from GCC) in the standard location. The user can bypass this with the option --gcc-toolchain=$EBROOTGCCCORE`:

$ clang -v --gcc-toolchain=$EBROOTGCCCORE
...
Found candidate GCC installation: $EBROOTGCCCORE/lib/gcc/x86_64-pc-linux-gnu/9.3.0
Selected GCC installation: $EBROOTGCCCORE/lib/gcc/x86_64-pc-linux-gnu/9.3.0

@SebastianAchilles SebastianAchilles changed the title {compiler}[GCCcore/9.3.0] AOCC v2.3.0 (WIP) {compiler}[GCCcore/9.3.0] AOCC v2.3.0 Dec 13, 2020
@migueldiascosta
Copy link
Member

migueldiascosta commented Dec 14, 2020

Maybe @migueldiascosta has some experience with this?

no, I hadn't looked into the compilers yet. One aspect I noticed just now is that this ships its own version of AMD LibM

the recommended procedure for using a different version of AMD LibM seems to be to overwrite the one shipped with AOCC... (https://developer.amd.com/wp-content/resources/AOCC-2.3-Install-Guide.pdf)

so I guess we'll need to think about whether we want to tie the version of AMD LibM to the version of AOCC, and also what defaults to set regarding using glibc's libm or AMD's (?)

@SebastianAchilles
Copy link
Member Author

@migueldiascosta The default is AMD libM. I tested this on Friday. The performance you get is quite good.

AOCC is shipped with the latest AMD LibM. But this could/might change in the future. An advantage of tying the version of AMD LibM to the version of AOCC is that it is more obvious which version is used. But I think this would require a custom easyblock, right?

@migueldiascosta
Copy link
Member

migueldiascosta commented Dec 16, 2020

@SebastianAchilles w.r.t. to libm performance, using a long loop of element-wise exponential of a vectors of 4 doubles, this is what I see (times in seconds, averages of 3 runs) on a Rome node:

  -lm -lamdlibm -lm
clang -O3 26 11.2
gcc -O3 11.9 11.7
     
clang -O3 -ffast-math 11.5 5.7 [a]
gcc -O3 -ffast-math 2.3 [b] 11.6

AOCC 2.3 (from this easyconfig), GCC 9.3.0, glibc 2.32 (from EESSI compatibility layer)

[a] nm does not show vector functions, so not sure if this is vectorized as documented
[b] nm does show vector functions, e.g. _ZGVbN2v_exp, cortesy of glibc's libmvec (and same behaviour and performance with gfortran)

as another reference, with icc -O3 -march=core-avx2 -lm, which automatically uses SVML, it runs in 3.5s.

@boegel
Copy link
Member

boegel commented Dec 27, 2020

Just so it's clear how to proceed with this: we should create a custom easyblock for AOCC which derives from Binary, calls the new check_accepted_eula method (see easybuilders/easybuild-framework#3535), makes sure the "source" tarball is extract, specifies the custom environment variables to set, and implements the (default) sanity check for AOCC (preferably including running something like --help on the important binaries).

@SebastianAchilles
Copy link
Member Author

SebastianAchilles commented Dec 27, 2020

To test easyconfig use EB_ARGS=" --include-easyblocks-from-pr 2295 --accept-eula=AOCC"

@SebastianAchilles
Copy link
Member Author

Test report by @SebastianAchilles
Using easyblocks from PR(s) easybuilders/easybuild-easyblocks#2295
SUCCESS
Build succeeded for 1 out of 1 (1 easyconfigs in total)
ebvm.novalocal - Linux centos linux 8.3.2011, x86_64, Intel Xeon Processor (Skylake, IBRS), Python 3.6.8
See https://gist.github.com/5a2824631a6383607f84566bcbc85874 for a full test report.

@migueldiascosta
Copy link
Member

Test report by @migueldiascosta
Using easyblocks from PR(s) easybuilders/easybuild-easyblocks#2295
SUCCESS
Build succeeded for 1 out of 1 (1 easyconfigs in total)
sms - Linux centos linux 7.6.1810, x86_64, AMD EPYC 7601 32-Core Processor (zen), Python 2.7.5
See https://gist.github.com/14528178ab8dbd1c1990c66527e6a83a for a full test report.

@boegel
Copy link
Member

boegel commented Dec 29, 2020

Test report by @boegel
Using easyblocks from PR(s) easybuilders/easybuild-easyblocks#2295
SUCCESS
Build succeeded for 1 out of 1 (1 easyconfigs in total)
node3501.doduo.os - Linux RHEL 8.2, x86_64, AMD EPYC 7552 48-Core Processor (zen2), Python 3.6.8
See https://gist.github.com/f5baf1e86cc604362c847f165f8882b0 for a full test report.

@boegel
Copy link
Member

boegel commented Dec 29, 2020

Test report by @boegel
Using easyblocks from PR(s) easybuilders/easybuild-easyblocks#2295
SUCCESS
Build succeeded for 1 out of 1 (1 easyconfigs in total)
node2710.swalot.os - Linux centos linux 7.9.2009, x86_64, Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz (haswell), Python 3.6.8
See https://gist.github.com/881dd3841fbd6ffb1482802953b12ccf for a full test report.

@boegel
Copy link
Member

boegel commented Dec 29, 2020

@boegelbot please test @ generoso
EB_ARGS="--include-easyblocks-from-pr 2295 --accept-eula=AOCC"

@easybuilders easybuilders deleted a comment from boegelbot Dec 29, 2020
@boegelbot
Copy link
Collaborator

@boegel: Request for testing this PR well received on generoso

PR test command 'EB_PR=11868 EB_ARGS="--include-easyblocks-from-pr 2295 --accept-eula=AOCC" /apps/slurm/default/bin/sbatch --job-name test_PR_11868 --ntasks=4 ~/boegelbot/eb_from_pr_upload_generoso.sh' executed!

  • exit code: 0
  • output:
Submitted batch job 12349

Test results coming soon (I hope)...

- notification for comment with ID 752025225 processed

Message to humans: this is just bookkeeping information for me,
it is of no use to you (unless you think I have a bug, which I don't).

@boegelbot
Copy link
Collaborator

Test report by @boegelbot
Using easyblocks from PR(s) easybuilders/easybuild-easyblocks#2295
SUCCESS
Build succeeded for 1 out of 1 (1 easyconfigs in total)
generoso-c1-s-1 - Linux centos linux 8.2.2004, x86_64, Intel(R) Xeon(R) CPU E5-2667 v3 @ 3.20GHz (haswell), Python 3.6.8
See https://gist.github.com/f0fbe61065b4f549e1826ce27eefe8ad for a full test report.

@boegel
Copy link
Member

boegel commented Dec 29, 2020

Going in, thanks @SebastianAchilles!

@boegel boegel merged commit f3b3581 into easybuilders:develop Dec 29, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants