Does Gcc, Icc, or Microsoft's C/C++ Compiler Support or Know Anything About Numa

Does gcc, icc, or Microsoft's C/C++ compiler support or know anything about NUMA?

Linux kernel knows about NUMA and will try to give your process pages from memory local to the current CPU (source: U. Drepper, "What Every Programmer Should Know About Memory".)

NUMA memory regions allocation in Windows 7

Windows will allocate memory local to the requesting thread; however, local is not specified by Microsoft. Local could be one of three options: the thread's ideal processor, the thread's processor affinity mask, or the thread's current processor (I forget what the current implementation is).

In essence, the answer is yes; however, a common gotcha is allocating all memory from a "controller thread" that isn't affinitized, and thus the memory is near to the controller and not the threads with specific affinity.

In NUMA, does each CPU also has local I/O controller similar to local RAM?

Nodes in a NUMA system have local RAM and can have local I/O. The later depends heavily on how the system is configured at the hardware level. If memory interchanges are performed by I/O accesses, then obviously each CPU must have its own I/O controller.

Here you have an example of an (old) NUMA system with local I/O for each node:
http://lse.sourceforge.net/numa/older_stuff/meetings/mtg.2001.07.25/minutes.html



Related Topics



Leave a reply



Submit