Example 7-9 – Intel ARCHITECTURE IA-32 User Manual

Page 391

Advertising
background image

Multi-Core and Hyper-Threading Technology

7

7-45

Example 7-9

Adding an Offset to the Stack Pointer of Three Threads

Void Func_thread_entry(DWORD *pArg)
{DWORD StackOffset = *pArg;
DWORD var1; // The local variable at this scope may not benefit
DWORD var2; // from the adjustment of the stack pointer that ensue.

// Call runtime library routine to offset stack pointer.
_alloca(StackOffset) ;
}
// Managing per-thread stack offset to create three threads:
// * Code for the thread function
// * Stack accesses within descendant functions (do_foo1, do_foo2)
// are less likely to cause data cache evictions because of the
// stack offset.
do_foo1();
do_foo2();
}

main ()
{
DWORD Stack_offset, ID_Thread1, ID_Thread2, ID_Thread3;
Stack_offset = 1024;

// Stack offset between parent thread and the first child thread.

ID_Thread1 = CreateThread(Func_thread_entry, &Stack_offset);

// Call OS thread API.

Stack_offset = 2048;
ID_Thread2 = CreateThread(Func_thread_entry, &Stack_offset);
Stack_offset = 3072;
ID_Thread3 = CreateThread(Func_thread_entry, &Stack_offset);
}

Advertising