Page 1 of 1

Intel Compiler Help

PostPosted: 27 Jul 2007, 06:10
by Pradu
Recently I've been having fun compiling Buzz with the free Intel C Compiller 10.0 for Linux and it compiled Buzz fine with -O3, but it started complaining when I used the -fast option:
Code: Select all
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c bitinstructions.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c board.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c book.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c consolecolors.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c dts.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c eval.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c hash.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c log.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c magicmoves.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c main.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c movegen.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c moveordering.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c mt19937-64.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c recog.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c search.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c thread.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c timemanager.c
icc -g -x c -DNDEBUG -D_POSIX -fast -static -w -c xboard.c
icc -s -pthread -static bitinstructions.o board.o book.o consolecolors.o dts.o eval.o hash.o log.o magicmoves.o main.o movegen.o moveordering.o mt19937-64.o recog.o search.o thread.o timemanager.o xboard.o -o Buzz
ipo: remark #11000: performing multi-file optimizations
ipo: remark #11006: generating assembly file /tmp/icccit1IBas_.s
log.c(71): (col. 3) remark: REVERSED LOOP WAS VECTORIZED.
log.c(85): (col. 3) remark: REVERSED LOOP WAS VECTORIZED.
search.c(247): (col. 5) remark: LOOP WAS VECTORIZED.
search.c(248): (col. 5) remark: LOOP WAS VECTORIZED.
/tmp/icccit1IBas_.s: Assembler messages:
/tmp/icccit1IBas_.s:34652: Error: no such instruction: `palignr $13,(%ebx),%xmm0'
/tmp/icccit1IBas_.s:34657: Error: no such instruction: `palignr $13,%xmm0,%xmm1'/tmp/icccit1IBas_.s:34781: Error: no such instruction: `palignr $11,(%ebx),%xmm0'
/tmp/icccit1IBas_.s:34786: Error: no such instruction: `palignr $11,%xmm0,%xmm1'icc: error #10014: problem during multi-file optimization compilation (code 1)
make: *** [Buzz] Error 1
I don't use any assembly at all for the code for the Intel Compiler, so I have no idea about what I have done wrong or how to fix this error. Anyone else had problems like this with the Intel Compiler?

Re: Intel Compiler Help

PostPosted: 27 Jul 2007, 11:00
by Tord Romstad
Pradu wrote:Anyone else had problems like this with the Intel Compiler?

I haven't seen such problems, but here are the compiler flags which work best for my engine (using the Intel Compiler 10.0 for Mac OS X):
Code: Select all
-O2 -fno-exceptions -fomit-frame-pointer -fno-rtti -fstrict-aliasing -mdynamic-no-pic -no-prec-div -ipo -static -xP


-O2 is faster than -O3 for me with the Intel compiler. With GCC, -O3 is faster.

Tord

Re: Intel Compiler Help

PostPosted: 27 Jul 2007, 13:42
by Gerd Isenberg
Seems the SSE vectorizer likes to use the SSE3 instruction PALIGNR (Packed Align Right), but you don't have the appropriate core 2 duo cpu, which supports this instruction. According to the new AMD64 manuals even K10 does not support PALIGNR. I guess one may adjust the vectorizer to only use SSE2 or the AMD64 subset of SSE3 - but I am not familar with this compiler...

http://en.wikipedia.org/wiki/SSSE3

Gerd

Re: Intel Compiler Help

PostPosted: 27 Jul 2007, 14:21
by Pradu
Tord Romstad wrote:I haven't seen such problems, but here are the compiler flags which work best for my engine (using the Intel Compiler 10.0 for Mac OS X):
Code: Select all
-O2 -fno-exceptions -fomit-frame-pointer -fno-rtti -fstrict-aliasing -mdynamic-no-pic -no-prec-div -ipo -static -xP


-O2 is faster than -O3 for me with the Intel compiler. With GCC, -O3 is faster.

Tord
Thanks Tord! It compiles fine with these flags.

Re: Intel Compiler Help

PostPosted: 27 Jul 2007, 14:24
by Pradu
Gerd Isenberg wrote:Seems the SSE vectorizer likes to use the SSE3 instruction PALIGNR (Packed Align Right), but you don't have the appropriate core 2 duo cpu, which supports this instruction. According to the new AMD64 manuals even K10 does not support PALIGNR. I guess one may adjust the vectorizer to only use SSE2 or the AMD64 subset of SSE3 - but I am not familar with this compiler...

http://en.wikipedia.org/wiki/SSSE3

Gerd
Yes this is true, I'm compiling on a Pentium 4. I think perhaps using -O3 makes Intel use SSE3 instructions because -fast expands out to -xP -O3 -ipo -static. Tord's -O2 flags works perfect for my PC.

Re: Intel Compiler Help

PostPosted: 27 Jul 2007, 17:16
by bob
Pradu wrote:
Gerd Isenberg wrote:Seems the SSE vectorizer likes to use the SSE3 instruction PALIGNR (Packed Align Right), but you don't have the appropriate core 2 duo cpu, which supports this instruction. According to the new AMD64 manuals even K10 does not support PALIGNR. I guess one may adjust the vectorizer to only use SSE2 or the AMD64 subset of SSE3 - but I am not familar with this compiler...

http://en.wikipedia.org/wiki/SSSE3

Gerd
Yes this is true, I'm compiling on a Pentium 4. I think perhaps using -O3 makes Intel use SSE3 instructions because -fast expands out to -xP -O3 -ipo -static. Tord's -O2 flags works perfect for my PC.


You probably should look at the options carefully. You can specifically tell the compiler which instruction set architecture to target when producing the output for gas. That will let you target your plain PIV and not get caught up in the above. However, that said, it is even more likely you are running an older linux version. gas should recognize those opcodes just fine, but they ought to fail when you run 'em on a PIV. If gas is barfing, it is old enough to not know about those mnemonics.