2011-09-21 3 views
0

2, 4, 8 코어와 같은 멀티 코어 시스템에서 일반적으로 공유 메모리에 액세스하기 위해 뮤텍스와 세마포를 사용합니다. 그러나, 나는이 방법들이 많은 코어를 가진 미래의 시스템에 높은 오버 헤드를 유발할 것이라고 예견 할 수있다. 공유 메모리에 액세스하기위한 미래의 많은 핵심 시스템을 위해 더 나은 대체 방법이 있습니까?많은 코어 시스템에서 공유 메모리에 액세스하는 방법

답변

2

미래에 얼마나 멀리 가고 싶은지 잘 모르겠습니다. 그러나 장기간에 걸쳐 우리가 알고있는 공유 메모리 (모든 코어에서 액세스 할 수있는 단일 주소 공간)는 확장 할 수 없습니다. 따라서 프로그래밍 모델은 어느 시점에서 변경되어야하며 멀티 코어로 갈 때와 마찬가지로 프로그래머의 삶을 더 힘들게 만듭니다.

그러나 현재 (아마도 10 년 동안) 트랜잭션 메모리 및 기타 하드웨어/소프트웨어 트릭을 얻을 수 있습니다.

왜냐하면 내가 말한 이유는 공유 메모리가 장기적으로 확장 성이 없다는 이유는 단순히 물리 때문일뿐입니다. (싱글 코어/고주파가 어떻게 장벽에 부딪 치는 것과 유사)

요약하면 트랜지스터는 원자 크기보다 작게 축소 할 수없고 (신기술 제외) 신호가 빛의 속도. 따라서 메모리는 프로세서에 비해 느려지고 느려지고 어떤 시점에서는 메모리를 공유 할 수 없게됩니다.

멀티 소켓 시스템에서 이미 NUMA를 사용하여이 효과를 확인할 수 있습니다. 대규모 수퍼 컴퓨터는 공유 메모리도 아니고 캐시 일관성도 아닙니다.

6

Transactional memory 중 하나입니다.

+0

하지만 느린가요? 가장 빠른 구현은 무엇입니까? – MetallicPriest

+1

이 페이지는 자세한 정보와 함께 도움이 될 수도 있습니다 : http://www.haskell.org/haskellwiki/Software_transactional_memory –

+0

@MetallicPriest - 현재 속도는 느리지 만 부분적으로 적은 수의 코어로 인한 것 같습니다. 자물쇠 접근법, 그리고 그것이 새로운 방법 일지라도, 그것은 아마도 지금 아마도 가장 좋은 접근법 일 것입니다. –

0

1) 전체 테이블이 아닌 액세스중인 메모리 부분 만 잠그십시오! 이것은 큰 해시 테이블을 사용하여 수행됩니다. 테이블이 클수록 잠금 장치가 더 세밀 해집니다.

2) 가능한 경우 읽기가 아닌 쓰기 만 잠급니다 (업데이트하는 동안 "이전 값"을 읽는 데 문제가 없어야 함). 이는 대개 유효한 경우입니다.

0

멀티 프로세서/코어/스레드 응용 프로그램 동기화에서 가장 낮은 수준의 공유 메모리에 대한 액세스는 버스 잠금에 따라 다릅니다. 이러한 잠금은 DMA를 포함한 버스 마스터 링 장치가있는 I/O 버스를 잠그는 것을 포함하므로 수백 개의 (CPU) 대기 상태가 발생할 수 있습니다. 이론적으로 프로그래머가 잠긴 메모리 영역이 I/O 버스의 영향을받지 않을 것이라고 확신 할 수있는 상황에서 호출 할 수있는 중간 수준의 잠금을 구상하는 것이 가능합니다. 이러한 잠금은 CPU 캐시를 주 메모리와 동기화 할 필요가 있기 때문에 훨씬 빠릅니다. 적어도 가장 느린 I/O 버스의 대기 시간과 비교하면 빠릅니다. 프로그래머가 어떤 버스 잠금 장치를 사용해야하는지 결정할 능력이 있는지 여부가 주류 실현 가능성에 대한 걱정의 의미를 추가하는지 여부 이러한 잠금 장치는 다른 프로세서와의 동기화를 위해 전용 외부 핀이 필요할 수도 있습니다.

다중 프로세서 Opteron 시스템에서 각 프로세서에는 설치된 모든 프로세서가 "볼 수있는"전체 메모리의 일부가되는 자체 메모리가 있습니다. 다른 프로세서에 연결될 수있는 메모리에 액세스하려는 프로세서는 고속 인터커넥트 버스 (HyperTransport)를 통해 해당 메모리를 담당하는 프로세서 (NUMA 개념)에 액세스를 투명하게 완료합니다. 프로세서와 코어가 물리적으로 연결된 메모리와 함께 작동하는 한 처리 속도는 빠릅니다. 또한 많은 프로세서에는 여러 외부 메모리 버스가 장착되어있어 전체 메모리 대역폭을 늘릴 수 있습니다.

이론적 인 중간 수준 잠금은 Opteron 시스템에서 HyperTransport 상호 연결을 사용하여 구현할 수 있습니다.

가능한 미래에는 가능한 한 거의 사용하지 않는 잠금 방식과 잠금 장치가있을 때 사용되는 효율적인 알고리즘 (및 관련 데이터 구조)을 구현하여 가능한 한 짧은 시간 동안 고전적인 방식으로 잠금을 유지합니다.

관련 문제