Computer Chess Club Archives


Search

Terms

Messages

Subject: Intel compiler, SIMD, and Bitboards

Author: Sean Mintz

Date: 12:34:38 06/04/02


I was talking w/ Aaron Gordon and he found some interesting stuff in the intel c
compiler guide about ''intrinsics''.
---------------
''The major benefit of using intrinsics is that you now have access to key
features that are not available using conventional coding practices. Intrinsics
enable you to code with the syntax of C function calls and variables instead of
assembly language. Most MMX™ technology, Streaming SIMD Extensions, and
Streaming SIMD Extensions 2 intrinsics have a corresponding C intrinsic that
implements that instruction directly. This frees you from managing registers and
enables the compiler to optimize the instruction scheduling.

The MMX technology and Streaming SIMD Extension instructions use the following
new features:

New Registers--Enable packed data of up to 128 bits in length for optimal SIMD
processing.

New Data Types--Enable packing of up to 16 elements of data in one register.''
---------------
Here are the data types:
---------------
''__m64 Data Type
The __m64 data type is used to represent the contents of an MMX register, which
is the register that is used by the MMX technology intrinsics. The __m64 data
type can hold eight 8-bit values, four 16-bit values, two 32-bit values, or one
64-bit value.

__m128 Data Types
The __m128 data type is used to represent the contents of a Streaming SIMD
Extension register used by the Streaming SIMD Extension intrinsics. The __m128
data type can hold four 32-bit floating values.

The __m128d data type can hold two 64-bit floating-point values.

The __m128i data type can hold sixteen 8-bit, eight 16-bit, four 32-bit, or two
64-bit integer values.

The compiler aligns __m128 local and global data to 16-byte boundaries on the
stack. To align integer, float, or double arrays, you can use the declspec
statement.''
---------------
Prototypes for these intrinsics and some related macros and constants are in the
header file xmmintrin.h.

I think it'd be interesting to see if any speedup can be achieved by using these
data types. Can anyone run some tests to find out? It would seem to me that if
we can hold 64 bit values (using __m64) then we should see a 2x speedup in some
cases. Hope this helps some people.



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.