- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
As discussed here: https://github.com/easybuilders/easybuild-easyconfigs/issues/8003 some codes don't compile using -xCORE-AVX512 if newer binutils are used (>=2.30, note that https://software.intel.com/en-us/articles/intel-c-compiler-191-for-linux-release-notes-for-intel-parallel-studio-xe-2020 says that up to 2.29 is supported, so perhaps Intel is aware already, but I could not find this documented anywhere else publically)
The issue is that Intel compilers generate instructions such as "vmovd %xmm16,%r10" which should really be with a "q", so "vmovq %xmm16,%r10". In this patch: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commitdiff;h=704a705d7aaab8041df76e2981e2a1efc014aad0;hp=605fd3c6590fbed834107a2e1d1df0ba58834576 H.J. Lu removed support for this syntax for xmm registers >15 as it's never generated by GCC.
This patch re-adds them to binutils:
and then CGAL and some other packages can be compiled again.
I am putting this out here so people who run into similar issues can find it but Intel: can you please fix this issue in the compiler?
(Note that H.J. Lu works for Intel!)
- Tags:
- Bug
- CC++
- Development Tools
- Intel® C++ Compiler
- Intel® Parallel Studio XE
- Intel® System Studio
- Optimization
- Parallel Computing
- Vectorization
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Bart,
Thanks for reaching out to us.
We are looking into the issue and will get back to you soon.
Thanks
Prasanth
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Bart,
Can you create a preprocess file, qjp2handler.i (replace -c with -E) for us? Thanks.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Not sure what I've missed, but it compiled successfully.
$ icpc -xCore-AVX512 -c test.cpp -w
$ ls -lt test.o
-rw-r--r-- 1 ... ome 1269840 Feb 19 18:07 test.o
$ gcc -v
gcc version 8.1.0 (GCC)
$ icpc -V
Intel(R) C++ Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 19.1.0.166 Build 20191121
Copyright (C) 1985-2019 Intel Corporation. All rights reserved.
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.1 (Maipo)
$
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello Viet,
you are probably using the older binutils (2.27 as shipped with RHEL 7.1). You can try on RHEL 8 which ships with binutils 2.30 or compile binutils yourself:
$ wget ftp://ftp.gnu.org/gnu/binutils/binutils-2.34.tar.gz
$ tar xf binutils-2.34.tar.gz
$ cd binutils-2.34
$ ./configure
$ make
$ ln -s gas/as-new as
$ export PATH=$PWD:$PATH
$ as --version
GNU assembler (GNU Binutils) 2.34 (...)
$ icpc -xCORE-AVX512 -c all_files.cpp.i
/tmp/icpccSQyCpas_.s: Assembler messages:
/tmp/icpccSQyCpas_.s:125413: Error: unsupported instruction `vmovd'
..
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Another way is to compile via assembly:
$ icpc -xCORE-AVX512 -S all_files.cpp.i
then
$ /usr/bin/as all_files.cpp.s
gives no complaint but
$ /path/to/binutils-2.34/gas/new-as all_files.cpp.s
where /path/to is where you unpacked and made binutils complains about vmovd. This way you don't need to manipulate PATH nor set the symbolic link.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank Bart. I am able to reproduce it and filed an internal bug (CMPLRIL0-32568) with our Developer.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The Developer said this is an issue with the newer assembler, because the code generated are the same on both RHEL7 and RHEL8, but as in 2.30 couldn't be able to assemble it.
One interesting detail he noticed. Assembler seems only complain about those vmovd instructions where any of upper 16 registers is used:
vmovd %xmm1, %r8 # Okay
vmovd %xmm30, %rdx # Assembler issues an error message
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Yes that is exactly what I mentioned before: "H.J. Lu removed support for this syntax for xmm registers >15 as it's never generated by GCC."
However use of vmovd is wrong here: it's operating on 64-bit registers which should use a "q" suffix.
vmovq %xmm1, %r8 # Okay
vmovq %xmm30, %rdx # Okay
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks. I'll work with the Developer.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
We will fix this bug in the next update release.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
This issue has been fixed in PSXE2020 update 4. Can you please try it out? And we will no longer respond to this thread.
If you require additional assistance from Intel, please start a new thread. Any further interaction in this thread will be considered community only.
Thanks,

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page