Poiché un'architettura NUMA fornisce una singola immagine di sistema, essa può spesso eseguire un sistema operativo senza ottimizzazioni speciali.

L'alta latenza degli accessi alla memoria remota può lasciare i processori sottoutilizzati, in attesa costantemente che i dati vengano trasferiti nel nodo locale e la connessione NUMA può diventare un impedimento per le applicazioni con esigenze di larghezza di banda della memoria elevate.

Inoltre, le prestazioni in un sistema di questo tipo possono essere altamente variabili. Ad esempio, varia se un'applicazione dispone di memoria localizzata su un'esecuzione di benchmarking, ma in caso di esecuzione successiva, tutta la memoria viene posizionata in un nodo remoto. Questo fenomeno può rendere complessa la pianificazione capacità.

Alcuni sistemi UNIX di alta generazione forniscono supporto per le ottimizzazioni NUMA nei rispettivi compilatori e librerie di programmazione. Questo supporto richiede agli sviluppatori di software di ottimizzare e ricompilare i propri programmi per ottenere prestazioni ottimali. Le ottimizzazioni per un sistema non funzionano correttamente nella generazione successiva dello stesso sistema. Altri sistemi hanno consentito a un amministratore di decidere esplicitamente il nodo su cui deve essere eseguita un'applicazione. Ciò potrebbe essere accettabile per alcune applicazioni che richiedono che il 100% della propria memoria sia locale, ma crea un carico di lavoro amministrativo e può causare una discrepanza tra i nodi quando i carichi di lavoro vengono modificati.

Idealmente, il software di sistema fornisce il supporto NUMA trasparente, in modo che le applicazioni possano beneficiarne immediatamente senza modifiche. Il sistema dovrebbe massimizzare l'uso della memoria locale e pianificare i programmi in modo intelligente senza richiedere un costante intervento dell'amministratore. Infine, deve rispondere in modo corretto alle condizioni mutevoli senza compromettere la correttezza o le prestazioni.