멀티 코어 CPU에서 반드시해야 할 것이 있습니까?


45

우리 팀은 멀티 스레드 친화적 인 프로그램을 고려해야 할 때 단일 코어 CPU에서 절대로 할 수없는 것이 있는지 여부에 대해 당황했습니다 . 그래픽 처리에는 대규모 병렬 처리가 필요하지만 DOOM과 같은 작업은 GPU가없는 단일 코어 CPU에서 수행되었다고 주장했습니다.

거기에 무엇인가 해야한다 멀티 코어 프로세서에서 수행 할 수는?

개발과 운영에 무한한 시간이 있다고 가정하십시오.


8
아래 답변은 대체로 "아니오"인 것처럼 보이지만 일부 작업을 처리하는 보조 프로세서 없이는 문자 그대로 작동 할 수 없었던 시스템이 있습니다. 내가 아는 한 가지 강력한 예는 67MHz ARM9 CPU와 33MHz ARM7 CPU를 포함하는 Nintendo DS입니다 (GBA 게임을 할 때 백 컴포트에도 사용됨). DS 게임의 경우 ARM7은 오디오 및 Wi-Fi 통신 재생을 처리합니다. ARM9는 오디오를 사운드 칩에 직접 공급하는 동안 화면에 메모를 처리하고 그릴 수 없기 때문입니다. 따라서 @jmite는“무제한 조건”에 따라 속도 부족으로 여러 CPU를 요구할 수 있습니다.
Slipp D. Thompson

10
저의 업무에서는 지연 시간이 짧은 오디오 처리를 위해 멀티 코어 제온 및 Xenomai 실시간 Linux 확장을 사용합니다. 우리는 3 단계 오디오 처리 파이프 라인을 가지고 있으며, 각 단계마다 자체 전용 코어가 있으며,이주기의 ~ 70 %를 사용합니다. 비 실시간 작업은 네 번째 코어를 사용하게되며 처음 세주기 동안 남은주기를 사용합니다. 단일 코어 CPU가 현재 4 코어 CPU의 코어보다 3 배 이상 빠른 경우에만 가능합니다. 현재 CPU가 2GHz로 실행되는 경우 달성하기 어려울 수 있습니다.
Jeremy Friesner

19
단일 코어 CPU의 소프트웨어는 멀티 코어 CPU를 에뮬레이션 할 수 있습니다. 차이는 거의 전적으로 속도입니다.
user253751

24
멀티 코어 시스템에서 수행해야 할 한 가지는 멀티 스레드 소프트웨어를 테스트하는 것입니다. 단일 코어 시스템에서는 일부 결함이 거의 발생하지 않기 때문입니다. 그래도 답이
될지는 모르겠지만

13
@nikie 단일 코어 시스템은 메모리 순서와 오래된 캐시를 에뮬레이션 할 수 있습니다. 그러나 이것이
10x

답변:


47

실행 시간, 다중 코어 시스템에서 수행 할 수있는 작업에 신경 쓰지 않으면 단일 코어 시스템에서 수행 할 수 있습니다. 멀티 코어 머신은 일종의 계산 속도를 높이는 방법 일뿐입니다.

코어를 가진 멀티 코어 머신 에서 시간 의 문제를 해결할 수 있다면 , 싱글 코어 머신 에서 시간 (또는 Amdahl의 법칙을 덜 살펴보십시오)을 해결할 수 있습니다 . 단일 코어 시스템은 시간 분할 / 시간 공유를 사용하여 멀티 코어 시스템을 에뮬레이션 할 수 있습니다 .N ~ T NTnTn


3
나는 그것이 절대적으로 정확하다는 것을 완전히 확신하지 못한다. 단일 코어에서 메모리 일관성 버그가 발생할 수 있다고 생각하지 않습니다 (예, 유니 코어에서 멀티 캐시 시스템을 에뮬레이트 할 수는 있지만 그러한 간접적 인 지시는 부정 행위입니다). (아마도 VLIW에서 이동 연산으로 정규 스왑을 구현하고 보장 된 || ism을 활용하는 것과 동등한 것입니까?) 단일 스레드 코어에서도 다중 스레드 타이밍 변동에서 엔트로피를 추출 할 수 있다고 생각합니다. 엔트로피는 단위 시간당 더 작을 것입니다 (실제로는 다른 차이점과 마찬가지로 성능의 문제입니다).
Paul A. Clayton

6
@ PaulA.Clayton 메모리 일관성 버그는 일반적으로 원치 않으며 잘 작성된 소프트웨어는이를 나타내지 않아야합니다. 그러나 실제로 원하는 경우 단일 CPU에서 에뮬레이션 할 수 있습니다. (속도가 느릴 수 있음)
user253751

4
단일 코어의 시간은 임의의 재시작으로 검색하거나 조각이 다중 코어의 캐시에 적합하지만 단일 코어가 아닌 캐시에 맞는 경우 코어 시스템 보다 배 이상 길어질 수 있습니다 . nnn
András Salamon

11
"단일 코어 시스템은 시간 분할 / 시간 공유를 사용하여 멀티 코어 시스템을 에뮬레이션 할 수 있습니다." 실제로 "현대"운영 체제가 시작된 이래로 그렇게했습니다.
Monica

1
@ PaulA.Clayton 동일한 공유 메모리를 수정 한 두 개의 서로 다른 프로세스를 사용하는 경우 비 원자 단위와 같은 메모리 일관성 문제가 발생할 수 있다고 생각합니다. 선점 형 멀티 태스킹 만 있으면됩니다. 물론 이것은 현대 OS가 명시 적으로 요청하지 않는 한 동일한 쓰기 가능한 메모리를 공유하는 프로세스를 갖지 않는 이유입니다.
Patrick M

58

문제는 어떤 제약 하에서?

"우리는 주어진 시간에 하드웨어 X에서이 문제를 해결할 수 있을까요?"

그러나 이것은 "미래에 대비 한"대답이 아닙니다. 과거에는 단일 코어에서 충분히 빠르게 수행 할 수 없었던 것들이 현재 가능할 수 있으며 미래의 하드웨어가 무엇을 할 수 있을지 예측할 수 없습니다.

계산 성 측면에서 우리는 단일 테이프 Turing Machine이 단일 또는 멀티 코어 컴퓨터와 동일한 기능을 모두 계산할 수 있으므로 런타임을 제외하고 멀티 코어 컴퓨터가 해결할 수있는 문제는 없습니다. 싱글 코어는 할 수 없습니다.

그래픽과 같은 측면에서 말 그대로 GPU에있는 모든 것을 CPU에서 수행 할 수 있습니다.


3
@ JanDvorak 나는 실제로 이것이 GPU에 의해 전혀 이루어지지 않았다고 말할 것이다;)
TomTom

15
시간이 제약이 아닌 경우 손, 펜 및 종이로 모든 계산을 수행 할 수 있습니다.
mathreadler

2
@mathreadler 네, 뇌는 튜링 컴플리트이기 때문입니다. Physics Stackexchange에 대한 긴 토론 으로 바뀌었던 것.
JBentley

4
실제로, VGA를 생성하는 @JanDvorak은 매우 간단
하며이

3
@mathreadler 실제로 처음 나타나는 것보다 더 복잡한 질문입니다. 전문화 된 기계가 완벽한 도구를 요구하지 않고 컴퓨터를 구성 할 수 있기 때문에 짧은 대답은 "예"일 수 있습니다. 튜링 머신을 구성 할 수있는 능력은 다른 상태 머신을 구성하는 "초기화"상태에있는 더 큰 튜링 머신을 가지고 있음을 의미하기 때문에 더 긴 대답은 "아니오"일 수 있습니다. 우리는 Turing Complete 장치를 구축 한 적이 없기 때문에 전체 답변이 훨씬 더 복잡합니다. 우리는 기계에 대한 추상적 인 아이디어를 개발했습니다.
Cort Ammon

17

다른 답변에서 지적했듯이 단일 CPU는 시간을 슬라이스하고 각 가상 CPU의 역할을 수행하여 항상 여러 CPU를 에뮬레이션 할 수 있습니다. 이 에뮬레이션은 확실히 정답을 계산합니다.

실제로는 실행 시간이 중요 할 수 있습니다. 평범한 프레임 속도와 뛰어난 시각적 경험의 차이를 의미 할 수 있습니다. 또는 거래에서 이익과 손실의 차이.

다중 프로세서가 단일 프로세서보다 훨씬 빠른 한 가지 병리 적 상황 은 처리가 데이터 파이프 라인이고 컨텍스트 전환이 비싸고 각 파이프 라인 단계의 기계 코드가 CPU 캐시에 거의 맞지 않는 경우입니다.

몇 가지 숫자로 설명하겠습니다. 4 개의 처리 단계가 있고 각 단계에 256 KiB의 프로그램 코드가 있고 256 KiB의 L2 캐시가있는 4 개의 CPU가있는 데이터 파이프 라인 (3D 렌더링 등)이 있다고 가정하십시오. 단일 CPU에서이 처리를 실행하려고하면 4 가지 작업간에 전환하는 데 많은 비용이 들고 캐시 누락이 발생합니다. 반면에 4 코어 시스템에서 실행하면 계산이 매우 매끄럽고 캐시 미스가 최소화되며 컨텍스트 스위치가 존재하지 않을 수 있습니다. 참고로, 이는 특정 응용 프로그램을 특정 코어에 고정한다는 개념과 관련이 있습니다 (예 : 한 코어에서 OS 커널 작업 만 수행하거나 TCP / IP 처리 등).


7

단일 CPU로 정말 사악한 데이터 레이스를 개발하는 것이 훨씬 어렵습니다. 물론, 단일 CPU를 중단하면 단어 사이를 찢을 수는 있지만 원하는 스레드 인터리빙이없는 이국적인 시나리오를 만들 수 있습니까?

아마도 교활한 버그를 만드는 것이 멀티 코드 향상을 유효하게 사용하는 것으로 간주되지 않을 수 있습니다. 결과적으로, 단일 코어가 시간을 줄 수없는 멀티 코어가 할 수있는 것은 많지 않습니다. 이유는 간단합니다. 이러한 악의적 인 데이터 경쟁을 피하려면 코드에 동기화 지점이 있어야합니다. 출력을 계산하고 생성하기 전에 입력이 완료되고 동기화되어야하는 계산 격자로 코드를 모델링하는 경우 단일 CPU가 격자를 따라 간단하게 작동하여 다음 사용 가능한 작업 블록을 계산할 수 있음을 쉽게 알 수 있습니다. .

실제로 Turing 머신 (우리가 관심있는 거의 모든 알고리즘)으로 알고리즘을 해결할 수 있음을 입증 할 수 있다면 단일 코어 CPU뿐만 아니라 실제로는 알고리즘으로 알고리즘을 수행 할 수 있음을 입증 할 수 있습니다 메모리 용 테이프가 매우 긴 상태 머신!

체스 레이스 검출기는 실제로 인종 사례를 찾아이를 활용합니다. 단일 스레드를 실행하고 스레드 간 가능한 모든 인터리브를 체계적으로 탐색하여 경쟁 사례로 인해 테스트가 실패하는 경우를 찾습니다. CHESS 는 단일 코어에서 다중 스레드 응용 프로그램을 실행할 수 있다는 사실에 달려 있습니다.

하드웨어 한계를 늘리기 시작할 때 멀티 코어가 필요한 경우가 나타납니다. 분명한 것은 시간 제약이있을 때입니다. 실시간 제약 조건의 일부 문제는 단일 코어의 클럭을 충분히 빠르게 구동 할 수 없기 때문에 단일 코어를 수행 할 수 없습니다. CPU가 4Ghz까지 올라간 후 조금 더 내려 가면서 속도가 더 느린 코어를 선호하는 이유가 있습니다.

이 타이밍 제약의보다 이색적인 버전은 실시간 시스템에 있습니다. 일부 하드 실시간 시스템에서는 인터럽트 서비스가 너무 까다로워서 실제로 코어를 가로 질러 인터럽트를 분할하거나 타이밍 제한을 실행할 수있는 멀티 코어 CPU를 선택해야합니다.

또 다른 한계는 데이터 버스에서 발생합니다. Blue Gene / P를 예로 들어 보겠습니다. JUGENE, 특정 블루진 / P 슈퍼 컴퓨터는 144이 테라 바이트 의 메모리를. 그들은 단지 모든 메모리에 액세스 할 수있는 단일 CPU 컴퓨터를 만들지 않습니다.


1
다시, 그들은 [많은] 메모리에 액세스 할 수있는 단일 CPU 컴퓨터를 만들지 않습니다. "하지 마십시오"는 "할 수 없음"과 다릅니다. 당신은 수있는 디자인하고 144 테라 바이트 또는 메인 메모리의 이상과 단일 프로세서를 구축 할 수 있습니다. 사람들이하지 않는 유일한 이유는 수익 감소 때문입니다. 단일 프로세서 설계에 더 많은 메모리를 추가하는 점진적이고 실용적인 가치는 어느 시점에서 최고에 도달 한 다음 메모리 크기가 커짐에 따라 감소하지만 증분 비용은 일정하게 유지됩니다 .
Solomon Slow

@jameslarge 그것이 실제 실용 하드웨어에 대한 나의 답변의 일부로 해당 문장이 나온 이유와 이론적 용량을 논의한 답변의 처음 2/3에 나타나지 않은 이유입니다.
Cort Ammon

"지 말라"와 "할 수 없음"은 지하에있는 두 시스템으로 설명되어 있습니다. 물리적으로 하드웨어 구성에 많은 양의 메모리를 추가 할 수 있다면 CPU가 각 바이트에 액세스 할 수 있습니다. 그러나 나는 할 수 없어서 그들은 할 수 없다. CPU의 기능은 실용성이 뛰어납니다.
user2338816

나는이 대답과 같은 것을 생각하고있었습니다. 단일 코어 환경에서는 경쟁 조건이 불가능한 것 같습니다 (또는 100 % 발생). 실용적인 응용 프로그램에 관해서는 소프트웨어 개발자가 특정 대상 하드웨어를 항상 통과하지만 단일 코어로 실행되는 에뮬레이트 된 하드웨어에서 실패하는 이상한 경쟁 조건 테스트를 코딩하여 고유 한 형태의 복사 방지를 엔지니어링 할 수 있다고 이론화했습니다. . 이 경우 멀티 코어 시스템에 의한 에뮬레이션이 때때로 통과하지만 신뢰할 수없는 경우가 있습니다.
Dan Henderson

6

벤치마킹 또는 활동 로깅과 같이 실시간 동작을 방해하지 않으면 서 (또는 가능한 적은) 단일 처리 요소에서 실행중인 프로세스를 관찰해야하는 경우 별도의 처리 리소스가 필요할 수 있습니다.


여러 프로세서가 아닌 경우 정확한 에뮬레이션이 필요한
훌륭하고

안녕이다 계정? 합병하고 싶습니까?
Evil

4

다른 답변은 "분산 동시성"으로서의 병렬 처리에 대한 제한된 견해를 고수합니다. 깔끔한 계산 모델 인 튜링에서는 여러 코어가 이점을 제공하지 않습니다. 얻을 수있는 유일한 장점은 효율성입니다.

거기 조작을 실행 한 가지 다중 처리 유닛 (고름) 단일 한, 비록 수 없다고 할 수있는 평행 즉, 동시에 .

여러 프로그램을 동시에 실행하는 경우 매우 유용합니다. 물론, 동시 실행보다 더 많은 것을 절대적으로 필요로하는 경우는 거의 없으며, 대부분의 사용으로 효율성이 향상됩니다. 그러나이 있다 이러한 차이는.

여러 소스의 데이터 센서 데이터 를 실시간으로 처리 해야한다고 가정 해보십시오 . 응용 프로그램에서 정확하게 의미하는 바가 무엇이든, 하나의 PU는 응답 시간 제한을 위반하지 않고 많은 입력 스트림을 동시에 처리 할 수 ​​있습니다. 따라서 현재 PU 생성에 너무 많은 센서가 있으면 여러 개의 PU 가 필요합니다 .

보다 고전적인 영역에서 설득력있는 예는 포트폴리오 알고리즘 입니다. 직교 비용으로 여러 (예 : ) 알고리즘 이있는 문제가 있다고 가정하십시오 . 좋은 사례는 다른 사람에게는 나쁜 사례입니다. 그러나 주어진 입력에 가장 적합한 것을 빨리 알 수는 없습니다.k

모든 알고리즘을 병렬로 실행 하고 완료되면 중단 할 수 있습니다 . 개 이상의 PU가 있는 경우 포트폴리오의 모든 알고리즘 중에서 최소 실행 시간 을 얻습니다 . 하나의 PU 만 있으면 공정한 스케줄러와 모든 오버 헤드를 가정하면 배를 얻을 수 있습니다.k kkkk


0

CS pov에서 "멀티 코어"는 "분산 컴퓨팅"과 이론상 크게 다르지 않습니다. 기본 개념은 "독립적 인 컴퓨팅 요소 (병렬로 계산)"이므로 질문을 약간 표현하면 ( "멀티 코어"는 실제로 CS의 이론적 인 개념이 아닙니다) 다른 가능성이 있습니다. 다른 답변에서 지적했듯이 순차적 프로그래밍은 이는 CS pov의 병렬 프로그래밍과 동일합니다. 이는 계산을위한 이론적 시스템, 즉 튜링 머신의 정의로 되돌아갑니다 .CS 성능의 이론적 분석은 궁극적으로 병렬과 순차적의 구별이 실제로 적용되지 않는 TM의 관점에서 이루어집니다 ( 멀티 테이프 TM 과 약간의 유사성이 있지만 ).

하지만 덜 추상적으로이 질문을 고려, 분산 컴퓨팅은 참으로 뛰어난 또는 아마도 거의 심지어 요구 와 관련된 몇 가지 문제에 대한 내결함성을 . 이 분야에는 독립적 인 컴퓨팅 요소가 어느 정도의 신뢰성 을 갖지 않을 때 적용되는 개념이 있습니다 (이것은 실제로 모든 상황에서 보편적으로 적용 가능한 가정은 아닙니다). 여기에는 내결함성이 개선 되거나 독립적 인 컴퓨팅 요소 가 필요한 몇 가지 경우가 있습니다.

  • 각 프로세서는 독립적 인 "[x] %"확률로 계산 중에 실패 할 수 있습니다. 통신을 통해 시스템의 전체 내결함성이 개별 구성 요소보다 우수한 시스템을 구성 할 수 있습니다. 이것은 우주 왕복선 시스템과 같이 수십 년 전에 적용되었습니다. 보다 최근에는 소위 컨센서스 문제 를 해결하는 Paxos 를 활용하기 위해 설계된 기본 프로토콜이 있습니다 . 좀 더 이해하기 쉬운 예는 Google이 내결함성 알고리즘과 결합하여 개별적으로 신뢰할 수없는 요소로 슈퍼 컴퓨터를 구축하는 독점 알고리즘을 많이 보유하고있는 Google입니다.

  • Bitcoin은 원장을 계산하기 위해 분산 트랜잭션을 포함하며 이는 단순한 처리 부하 문제 때문이 아닙니다. 알고리즘은 손상된 노드를 방지하기 위해 신중하게 설계되었습니다. 간단히 말해서 병렬 성능을 극대화하는 것이 아니라 비잔틴 장군 문제 를 "해결"/ 구현합니다. 독립 체가 서로 "체크"하고 "알고리즘 / 암호화 / 안전하게"일종의 "치팅"또는 "일명 무효화 계산 거부" 부패".

  • 병렬 처리의 고전적인 분석에 따르면 특정 병렬 실행 분석으로 분해되는 약 7 개의 "기본"문제 패턴 유형이 있습니다. 참조 버클리에서보기 : 병렬 컴퓨팅 연구의 풍경

  • 여기에는 대부분의 다른 답변에서 다루는 성능 고려 사항과 관련하여 열린 이론적 질문의 일부 요소가 있습니다. 순차보다 병렬로 "내재적으로 더 빠른"문제가 있는지에 대한 문제는 대략 P =? NC 문제라고도합니다. 여기서 NC 는 "효율적으로 병렬화 가능한"알고리즘의 클래스로 간주되고 P 는 "효율적인 [순차] 알고리즘입니다. "


1
나는이 대답을 좋아한다! 나는 당신의 예에서 많은 것을 배웠습니다 : D
Ben Leggiero

방사선이있는 미션 크리티컬 환경에서 내결함성 +1, 캡 부족 및 이중화 -1
Cees Timmerman 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.