무료 점심은 끝났나요? [닫은]


12

Herb Sutter는 2005 년의 유명한 무료 점심 식사 이상 기사에서 객체 지향 혁명만큼 큰 동시 프로그래밍 혁명을 예측했습니다. 이 혁명은 2005 년에서 2013 년 사이에 실제로 일어 났습니까?


이 기사의 요점 :

  • 프로세서 제조업체는 CPU 성능을 향상시키기위한 기존의 접근 방식을 거의 모두 사용하지 못하고 있습니다. 클럭 속도를 더욱 높이는 대신 하이퍼 스레딩 및 멀티 코어 아키텍처로 전환하고 있습니다.

  • CPU 처리량 증가를 완전히 활용하려면 응용 프로그램을 점점 더 동시 적으로 사용해야합니다.

  • "아, 성능은 그다지 중요하지 않습니다. 컴퓨터가 계속 빨라지고 있습니다"라는 말은 틀릴 것입니다.

  • 효율성과 성능 최적화는 더 중요 할 것입니다. 이미 강력한 최적화를 구현 한 언어는 새로운 삶을 찾게 될 것입니다. 경쟁하고보다 효율적이고 최적화 할 수있는 방법을 찾을 필요가없는 사람들. 성능 지향 언어 및 시스템에 대한 장기적인 수요 증가를 기대하십시오.

  • 프로그래밍 언어와 시스템은 점점 더 동시성을 처리해야 할 것입니다. 오늘날 언어가 제공하는 것보다 동시성을 위해 더 높은 수준의 프로그래밍 모델이 절실히 필요합니다.


15
휴대 전화에 몇 개의 코어가 있습니까?
Matt D

6
내 Nokia 2700에는 하나의 코어가 있습니다.
cpp

5
@MattD 죄송합니다. 왜 "업그레이드 시간"입니까? 그리고 cpp 전화의 코어 수와 관련이 있습니까? Nokia 2700이 자신의 필요에 충분하지 않다는 것을 어떻게 알 수 있습니까?
Andres F.

2
나는 비과학적인 관찰에 의해 하드웨어 측면에서 그러한 혁명이 있었지만 소프트웨어 혁명은 엄청나게 느리게 진행되었다고 말하면서 기록을 계속할 것입니다. 모든 프로그래머를위한 양질의 동시 도구를 얻는 것은 여전히 ​​어려운 일이며 동시성은 여전히 ​​숙련 된 병렬 개발자조차도 재현하기 어려운 방식으로 넘어가는 것입니다.
Jesse C. Slicer

2
나는 예측의 타이밍이 잘못되었다고해서 반드시 예측을 잘못하지는 않는다고 지적하고 싶습니다. 위에 나열된 주요 사항이 암시 된 중요성을 얻지 못했지만 각 지점의 방향에 대한 단계가있었습니다. 위의 예측이 실현 될 것이라고 말하고 싶습니다. 그것은 단지 언제 문제입니다. WHEN은 단순히 욕망이 아닌 요구 사항이 될 때입니다. 그 임계 값이 언제 넘어 질지를 아는 것이 언제 어려운지를 예측하는 이유입니다.
덩크

답변:


23

예,하지만 다릅니다.

당신은 쓸 기대할 수 없다 사소 , 고성능 촬영 병렬 하드웨어의 장점과 프로그램 구조 기법으로 동시성을 사용하여 두없이 소프트웨어를. 그러나 대부분의 소프트웨어는 사소하고 성능이 중요하지 않습니다. 웹 응용 프로그램은 많은 수의 크 런칭을 수행하지 않으며 CRUD 응용 프로그램에는 일부 시뮬레이션 및 의료 소프트웨어의 엄격한 타이밍 제한과 같은 것이 없습니다.

게임 개발자는 부드러운 실시간 요구 사항이있는 가장 일반적인 유형의 응용 프로그램이므로 특히 게임 개발자 가 이에주의 해야 합니다. 두 개의 CPU 코어와 저전력 GPU가있는 통합 칩에서 최대한 많은 컴퓨팅 및 렌더링 성능을 끌어 내고자하는 휴대 전화에서는 문제가 심각합니다. 많은 개발자들이 Haskell을보고 Rust와 같은 언어가 성숙하기를 기다리는 또 다른 이유입니다. 우리 는 현대 하드웨어에서 안전 성능을 원합니다 .

2005 년부터 OpenCL, CUDA, OpenMP 및 벡터 명령 세트와 같은 새롭고 향상된 도구를 기존 언어의 동시성 및 데이터 병렬 처리와 함께 사용할 수 있습니다. 그러나 상대적으로 새로 온 사람들은 초기부터 동시성으로 더 흥미로운 것들을 많이 수행하도록 설계되었습니다.

Haskell의 동시 런타임을 통해 언어는 경량 병렬 처리 (스파크) 및 동시성 추상화 (스레드, 채널 및 공유 가변 참조)에 대한 풍부한 지원을 제공 할 수 있습니다. Go and Rust는 가벼운 작업, 채널 사용 Go 및 메시지 전달 사용 Rust도 제공합니다.

이 시스템은 메모리 안전, 성능 런타임 및 특정 종류의 레이스에 대한 정적 보호 기능을 제공합니다. Haskell과 Rust의 기본 불변성은 병행 성을보다 쉽게 ​​관리 할 수있게합니다. Erlang 이미 80 년대에이 작업을 수행하고 있었지만 소프트웨어의 필요성과 프로그래밍 시스템을 설계하는 방법에 대한 지식도 개선되었습니다.

마지막으로, 이름을 밝히지 않는 많은 기존 언어는 새로운 소프트웨어를 작성하기위한 확실한 선택으로 거절 할 준비가되었습니다. 복잡성 및 동시성 추상화의 부담으로 인해 현대 응용 프로그램의 고려에 적합하지 않습니다. 우리는 단순히 성숙한 대안을 기다리고 있습니다.


2
나는 특정 언어의 쇠퇴에 대해 확신하지 못합니다. 다른 것보다 종속성을 최소화하는 데 더 중점을 둔 코드가 작성되기를 바랍니다. 결국, 그것은 실제로 잘못 된 언어가 아니며 사용 방식입니다. 그리고 그 사용의 "낮은 교수형 과일"은 더 이상 멀티 스레드 / 동시성과 정렬되지 않습니다.
Matt D

6
@MattD : 모두 당신은 언어를 사용하는 방법 언어 자체가 잘못 될 수 있습니다. 프로그램이 잘못되었다고 가정하십시오. 당신은 그것을 잘못 쓴 사람이지만, 언어가 당신이 그것을 올바르게 작성하는 데 도움을 줄 필요는 없었으며 , 그것은 중요합니다.
Jon Purdy

6

다음은 몇 가지 데이터 요소입니다. 그것이 혁명으로 간주되는지 스스로 결정하십시오.

병렬화 된 하드웨어

2005 년경 인텔과 AMD는 약 3GHz의 클럭 속도로 2 코어 데스크탑 x86 CPU (Pentium D 및 Athlon 64)를 대량 생산하기 시작했습니다.

2006 년에 3.2GHz에서 8 + 1 코어의 셀 프로세서를 갖춘 PlayStation 3이 출시되었습니다.

2006 년 GeForce 8 시리즈가 출시되었습니다. 그래픽 관련 장치와 달리 많은 수 (~ 100)의 범용 '스트림 프로세서'로 구성됩니다. 2007 년경 CUDA 1.0 사양이 발표되어 일부 범용 NVidia 하드웨어에서 일부 범용 계산을 실행할 수 있습니다.

그 이후로 그 경향은 계속되었습니다.

이제 2013 년에 인텔과 AMD 모두 4, 8 및 16 코어 CPU를 제공하며 클록 속도는 4GHz보다 약간 높습니다. 듀얼 코어 및 쿼드 코어 설계는 랩톱 및 스마트 폰과 같은 저전력 장치에 일반적입니다.

이 모든 것은 대량 생산 된 소비자 급 일상적인 컴퓨터 하드웨어입니다.

소프트웨어

CUDA는 2007 년에 출시 된 후 2008 년에 OpenCL로 출시되어 일반 (그래픽이 아닌) 계산에서 대규모 병렬 GPU를 사용할 수 있습니다. 모델이 인기를 얻었습니다. 많은 호스팅 회사 (예 : Amazon)는 일반적인 컴퓨팅 작업을위한 GPU를 제공합니다.

Go 는 2009 년에 출시되어 매우 저렴한 선점 스레드 ( "goroutines")를 제공하며 동시에 동시 알고리즘을 효율적으로 표현할 수 있습니다.

Akka 툴킷 은 2009 년에 Java 및 Scala 용으로 릴리스되어 액터 기반 동시성을 허용합니다.

Erlang (동시 언어)은 사용량이 약간 증가합니다.

동시성 대 병렬 처리

병렬 하드웨어를 사용하기 위해서는 반드시 소프트웨어 동시성이 필요하지 않습니다 . 즉, 계산 내에서 실행 스레드로 저글링해야합니다. 각 프로세스가 전통적인 순차 프로그램 인 병렬 의 비 상호 작용 프로세스로 많은 문제가 해결됩니다 .

병렬 처리는 맵 축소 또는 MPC 또는 OpenMP와 같은보다 전통적인 언어 및 병렬 프레임 워크를 활용할 수 있습니다. 이러한 프레임 워크의 경우 동일한 CPU 크리스털에 여러 개의 코어가있는 것이 클러스터에 더 많은 CPU를 갖는 것과 개념적으로 크게 다르지 않습니다. 차이점은 주로 속도입니다.

지금까지 무료 점심 식사는 제공되지 않습니다

CPU 속도는 여전히 하이 엔드에서 약 5GHz로 유지됩니다. 그래 핀 트랜지스터와 같은 더 나은 기술을 사용하면 장래에 주파수가 다시 상승 할 수 있지만 조만간은 아닐 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.