Example 7-6, Example 7-7 – Intel ARCHITECTURE IA-32 User Manual

Page 378

Advertising
background image

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;

Advertising