Example 7-6, Example 7-7 – Intel ARCHITECTURE IA-32 User Manual
Page 378
![background image](/manuals/127794/378/background.png)
IA-32 Intel® Architecture Optimization
7-32
•
Objects allocated dynamically by different threads may share cache
lines. Make sure that the variables used locally by one thread are
allocated in a manner to prevent sharing the cache line with other
threads.
Another technique to enforce alignment of synchronization variables
and to avoid a cacheline being shared is to use compiler directives when
declaring data structures.
Other techniques that prevent false-sharing include:
•
Organize variables of different types in data structures (because the
layout that compilers give to data variables might be different than
their placement in the source code).
•
When each thread needs to use its own copy of a set of variables,
declare the variables with:
— the directive threadprivate, when using OpenMP
— the modifier __declspec (thread), when using Microsoft
compiler
Example 7-6
Placement of Synchronization and Regular Variables
int
regVar;
int
padding[32];
int
SynVar[32*NUM_SYNC_VARS];
int
AnotherVar;
Example 7-7
Declaring Synchronization Variables without Sharing a Cache
Line
__declspec(align(64)) unsigned __int64 sum;
struct sync_struct {…};
__declspec(align(64)) struct sync_struct sync_var;