Domanda

La nostra applicazione è:

  1. La configurazione hardware è un server dual Xeon con sistema operativo Windows 7 / 64bit. Ogni Xeon ha il proprio 12GB RAM in una [NUMA] [1] configurazione con un ponte che collega due regioni di memoria insieme.
  2. Tutto il software è scritto utilizzando VS2008 in C ++ e compilato come applicazioni a 64 bit.
  3. A Generation applicazione crea una regione di grande memoria condivisa (4-6gb) che è solo andare a essere accessibili da processi indicati con un'affinità di processore per eseguire il primo processore Xeon.
  4. A Ricezione applicazione crea una grande regione di memoria condivisa (2-4GB) che viene utilizzato principalmente da processi indicati con un'affinità di processore per eseguire il secondo processore Xeon. Tuttavia, quando l'App generazione completa la costruzione di una serie di dati (32 MB a 128 MB), si trasferisce tali informazioni alla regione di memoria condivisa in esecuzione su questo Xeon.
  5. Stiamo usando Boost biblioteca Interprocess per gestire le nostre regioni di memoria condivisa.

La mia domanda è, quando ciascuno dei processi che crea è condivisa regione di memoria, le funzionalità di Windows allocano che la memoria sullo stesso chip Xeon che lo ha creato? O devo assegnare esplicitamente la memoria ad un particolare chip Xeon utilizzando una delle funzioni della memoria Numa?


Modifica - per contribuire a chiarire ciò che è NUMA, da Wikipedia -

  

Non-Uniform Memory Access o   Non-Uniform Memory Architecture (NUMA)   è un disegno memoria del computer utilizzato in   multiprocessori, dove la memoria   tempo di accesso dipende dalla memoria   posizione relativa a un processore.   Sotto NUMA, un processore può accedere ai suoi   propria memoria locale più velocemente di quanto non locale   la memoria, che è, a memoria locale   un altro processore o memoria condivisa   tra processori processors.between.

http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access per maggiori dettagli. Per me, è una di quelle cose che siamo tutti andando ad avere per saperne di più su come multiprocessing diventa più comune.

[1]: http: // msdn .microsoft.com / en-us / library / aa363804% 28VS.85% 29.aspxbetween processori.

È stato utile?

Soluzione

Windows allocare memoria locale al thread richiedente; tuttavia, locale non è specificato da Microsoft. Locale potrebbe essere una delle tre opzioni:. Il processore ideale del thread, la maschera di affinità del processore del thread, o processore corrente del thread (ho dimenticato come l'implementazione corrente è)

In sostanza, la risposta è sì; Tuttavia, un comune Gotcha alloca tutta la memoria da un "filo controllore" che non è affinitize, e quindi la memoria è vicina al controllore e non i fili con particolare affinità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top