{{위키데이터 속성 추적}}
'''불균일 기억 장치 접근'''({{lang|en|Non-Uniform Memory Access}}, '''NUMA''')은 [[다중 처리|멀티프로세서]] 시스템에서 사용되고 있는 컴퓨터 메모리 설계 방법중의 하나로, 메모리에 접근하는 시간이 메모리와 프로세서간의 상대적인 위치에 따라 달라진다. NUMA구조에서 프로세서는 자기의 로컬 메모리에 접근할 때가 원격 메모리에 접근할 때보다 더 빠르다. 원격 메모리는 다른 프로세서에 연결되어 있는 메모리를 말하고 로컬 메모리는 자기 프로세서에 연결되어 있는 메모리를 말한다.

NUMA 아키텍처는 이론적으로 [[SMP]]아키텍처로부터 확장된 개념이다. Burroughs large systems에 의해서 첫 상용화되었으며 이후 유니시스, Convex Computer(이후 [[휴렛 팩커드|휴렛 패커드]]), [[실리콘 그래픽스]], Sequent Computer Systems, Data General 그리고 [[디지털 이큅먼트 코퍼레이션|DEC]]에서 상품화되었다. 이러한 회사들이 개발해 놓은 기술들은 [[유닉스 계열]] 운영 체제에 도입되었으며 일부는 [[윈도우 NT]]에도 도입되었다.

== 기본 개념 ==
[[파일:NUMA.svg|right|300px|섬네일|NUMA 시스템의 한예. 프로세서들은 버스나 크로스바로 연결되어 있음을 주목하세요. 각각의 프로세서들은 그 위치에 따라 메모리에 접근하는 우선순위가 다름을 보여준다.]]
현대의 CPU는 주 메모리보다 훨씬 빠르게 동작한다. 그렇지만 컴퓨터 초기에는 CPU는 일반적으로 메모리보다 천천히 동작을 했다. 1960년대에 첫 슈퍼컴퓨터와 고속 컴퓨터가 개발되면서 역전이 되었다. 그 이후, 계속해서 데이터를 더 많이 사용해야 하는 CPU는 메모리에서 데이터를 다 가지고 올 때까지 기다려야 했다. 1980년대와 1990년대에 개발된 많은 슈퍼컴퓨터는 빠르게 메모리에 접근하는 방법을 제공했고 이것으로 대용량 데이터 집합에 대한 처리를 그 어떤 다른 시스템들보다 빠르게 할 수 있었다.

메모리에 접근하는 경우의 수를 줄이는 것이 현대 컴퓨터에서 성능을 높이는 한 방법이다. 예를 들면, 고속의 [[캐시|캐시 메모리]]를 지속적으로 증가시키는 것과 [[캐시|캐시 미스]]를 줄이기 위한 뛰어난 알고리즘을 사용하는 것이다. 그렇지만 운영체제 크기의 비약적인 증가와 그 위에서 돌아가는 애플리케이션 크기의 증가는 캐시를 통한 성능 향상을 압도하게 된다. 특히나 다중 프로세서 시스템에서는 이 문제가 더 심각하다. 하나의 프로세서만이 메모리에 접근할 수 있기 때문에 많은 다른 프로세서들은 기다려야만 하기 때문이다.

NUMA는 각각의 프로세서에 독립적인 별도의 메모리를 제공함으로써 이러한 문제를 해결하려 한다. 이렇게 하면 여러 프로세서들이 동일 메모리 주소에 접근하려 할 때 성능 충돌을 피할 수 있다. 서버와 애플리케이션에서 아주 일반적인 펼쳐진 데이터를 처리하는 문제의 경우에, NUMA는 하나의 공유 메모리의 경우 대비 대략적으로 프로세서의 수나 아니면 메모리 뱅크수 만큼 성능을 향상시킬 수 있다. 그렇지만 하나 이상의 프로세서가 동일 데이터를 필요로 하는 경우에 NUMA시스템은 메모리 뱅크들 사이로 데이터를 이동시켜야 하는 경우가 발생한다. 이러한 동작은 NUMA의 성능을 떨어뜨리는 요인이다. 따라서 전반적인 성능은 주어진 시간에 동작하고 있는 일의 특성에 달려있다. 어떻게 프로세스가 원격 메모리 대신 로컬 메모리를 사용하게 하느냐가 프로그램의 최적화에 대한 문제이다.

== 캐시 일관성 NUMA (ccNUMA) ==
거의 모든 CPU 아키텍처는 CPU캐시라고 알려진 적은 양의 매우 빠른 비공유 메모리를 사용한다. NUMA환경에서 공유 메모리의 캐시 일관성을 유지시키는 것은 상당히 어려운 작업이다. 비록 [[캐시 일관성]]을 제공하지 않는 NUMA아키텍처는 설계와 제작이 용이하지만 현재의 [[폰 노이만 구조]] 프로그래밍 모델에서는 프로그래밍을 하기가 매우 어렵다. 따라서 현재 시장에 판매되고 있는 모든 NUMA 컴퓨터들은 캐시 일관성을 제공한다. 이것을 ccNUMA({{lang|en|cache-coherent NUMA}})라고 분류한다.

인텔은 2007년 후반에 [[x86]]과 [[아이테니엄]] 서버에서 [[네할렘 마이크로아키텍처]] 기반 프로세서와 [[투킬라 (프로세서)|투킬라]] 프로세서에서부터 NUMA 아키텍처를 적용했다.<ref>Intel Corp. (2008). Intel QuickPath Architecture [White paper]. Retrieved from http://www.intel.com/pressroom/archive/reference/whitepaper_QuickPath.pdf</ref> 프로세서들간의 연결은 인텔 [[퀵패스 인터커넥트|퀵패스]] 인터커넥트(QPI)를 통하여 이루어진다.<ref>Intel Corporation. (September 18th, 2007). Gelsinger Speaks To Intel And High-Tech Industry's Rapid Technology Caden[Press release]. Retrieved from http://www.intel.com/pressroom/archive/releases/2007/20070918corp_b.htm</ref>

== NUMA 대 클러스터 컴퓨팅 ==
어떤사람들은 NUMA를 매우 가깝게 연결된 [[컴퓨터 클러스터]]라고 본다. 클러스터 아키텍처에 가상 메모리 페이징을 도입하면 NUMA가 하드웨어에서가 아닌 순전히 소프트웨어적으로 구현이 가능하다. 그렇지만 노드간의 레이턴시(대기시간,Latency)는 하드웨어 기반의 NUMA보다 수십배 이상 느리다.

== 같이 보기 ==
* [[클러스터 컴퓨팅 시스템]]
* [[컴퓨터 클러스터]]
* [[SMP]]
* [[COMA]]
* [[슈퍼컴퓨터]]
* [[퀵패스 인터커넥트|인텔 QPI]]
* [[네할렘 마이크로아키텍처]]

== 각주 ==
{{FOLDOC}}
{{각주}}

== 외부 링크 ==
* [http://lse.sourceforge.net/numa/faq/ NUMA FAQ]
* [https://web.archive.org/web/20060505025517/http://cs.gmu.edu/cne/modules/dsm/yellow/page_dsm.html Page-based distributed shared memory]
* [https://web.archive.org/web/20060924140915/http://opensolaris.org/os/community/performance/numa/ OpenSolaris NUMA Project]
* [https://web.archive.org/web/20040606042837/http://h18002.www1.hp.com/alphaserver/nextgen/overview.wmv Introduction video for the Alpha EV7 system architecture]
* [http://www.alphaprocessors.com/ More videos related to EV7 systems: CPU, IO, etc]
* [https://web.archive.org/web/20091108151203/http://developer.amd.com/pages/1162007106.aspx NUMA optimization in Windows Applications]
* [https://web.archive.org/web/20110128015336/http://oss.sgi.com/projects/numa/ NUMA Support in Linux at SGI]
* [https://web.archive.org/web/20071223131832/http://www.realworldtech.com/page.cfm?NewsID=361&date=05-05-2006#361/ Intel Tukwila]
* [http://www.realworldtech.com/page.cfm?ArticleID=RWT082807020032 Intel QPI (CSI) explained]
* [https://web.archive.org/web/20071103124627/http://www.sql-server-performance.com/articles/per/high_call_volume_NUMA_p1.aspx current Itanium NUMA systems]

{{병렬 컴퓨팅}}

[[분류:병렬 컴퓨팅]]
[[분류:컴퓨터 메모리]]