가 도래의 멀티코어 아키텍처에 영향을 미칠게 소프트웨어 개발자로?

StackOverflow https://stackoverflow.com/questions/567528

  •  05-09-2019
  •  | 
  •  

문제

소프트웨어 개발자로 다루는 대부분은 높은 수준의 프로그래밍 언어를 모르겠어요 내가 할 수 있는 적절히 주의하였을 경우 서비스 제공에 어려움이 전 존재의 멀티코어 컴퓨터입니다.쓰고 주로 평범한과 비 까다로운 응용 프로그램,그럼에도 불구하고 나는 생각은 그것이 중요한지를 변경할 필요가 어떤 프로그래밍 패러다임 또는 언어를 마스터 미래입니다.

나의 질문에 따라서:
How to deal with increasing multicore presence in day-by-day hacking?

도움이 되었습니까?

해결책

Herb Sutter는 2005 년에 그것에 대해 썼습니다. 무료 점심은 끝났습니다 : 소프트웨어의 동시성으로의 기본 전환

다른 팁

대부분의 문제는 많은 CPU 시간이 필요하지 않습니다. 실제로 단일 코어는 많은 목적으로 충분히 빠릅니다. 프로그램이 너무 느리다는 것을 알게되면 먼저 프로파일을 프로파일하고 알고리즘, 아키텍처 및 캐싱을 선택하십시오. 그래도 충분히 얻지 못하면 문제를 별도의 프로세스로 나누십시오. 종종 이것은 단순히 결함 분리를 위해 할 가치가 있으며 각 프로세스의 CPU 및 메모리 사용을 이해할 수 있습니다. 또한 일반적으로 각 프로세스는 특정 코어에서 실행되며 프로세서 캐시를 잘 활용하므로 캐시 라인을 일관되게 유지하는 실질적인 성능 오버 헤드를 겪을 필요는 없습니다. 다중 프로세스 설계를 위해 가고 여전히 문제를 발견하면 컴퓨터보다 더 많은 CPU 시간이 필요합니다. 클러스터를 통해 실행하는 것이 좋습니다.

동일한 주소 공간 내에 여러 스레드가 필요한 상황이 있지만 스레드는 실제로 올바르게 얻기가 어렵다는 점에주의하십시오. 인종 조건, 특히 안전하지 않은 언어에서는 때때로 디버그하는 데 몇 주가 걸립니다. 종종 단순히 디버거 아래 추적 또는 실행을 추가하면 문제를 숨길 수있는 타이밍이 변경됩니다. 단순히 모든 곳에서 자물쇠를 넣는 것은 종종 당신이 많은 잠금 오버 헤드를 얻고 때로는 너무 많은 잠금 경합을 얻는다는 것을 의미합니다. 잠금이 제대로 된 경우에도 캐시 일관성을 조정하려면 프로필이 필요합니다. 궁극적으로, 동시 코드를 실제로 조정하려면 현재 멀티 스레딩 라이브러리보다 잠금없는 구조와 더 복잡한 잠금 방식을 살펴볼 것입니다.

동시성의 이점과 한계 (예 : Amdahl 's Law)를 배우십시오.

따라서 가능한 경우 개방 될 높은 성능을위한 유일한 경로를 이용할 수 있습니다. 더 쉬운 접근 방식 (선물 및 작업 라이브러리)에서 많은 혁신적인 작업이 있으며, 오래된 작업은 재발견됩니다 (기능 언어 및 불변 데이터).

무료 점심은 끝났지 만 악용 할 것이 없다는 것을 의미하지는 않습니다.

일반적으로 스레딩에 매우 친숙해집니다. 병렬화를위한 끔찍한 메커니즘이지만 우리가 가진 것입니다.

.NET으로 작업하는 경우 평행 연장을보십시오. 이를 통해 많은 병렬 프로그래밍 작업을 쉽게 수행 할 수 있습니다.

하나의 핵심만으로도 코드를 병렬화하는 것을 고려해야합니다. 여러 스레드, 불변 유형 및 최소한의 동기화가 새로운 친구입니다.

나는 그것이 당신이 쓰는 어떤 종류의 응용 프로그램에 달려있을 것이라고 생각합니다.

어떤 종류의 앱은 그들이 Mutli-Core CPU보다 실행된다는 사실에 더 많은 혜택을줍니다. 응용 프로그램이 멀티 코어 사실의 혜택을받을 수 있다면 평행을 유지해야합니다. 무료 점심은 끝났습니다. 즉, 과거에는 새로운 CPU가 출시 될 때 응용 프로그램이 더 빨라졌으며 추가 속도를 얻기 위해 응용 프로그램에 어떤 노력을 기울일 필요가 없었습니다. 이제 멀티 코어 CPU가 제공하는 기능을 활용하려면 응용 프로그램이이를 활용할 수 있는지 확인해야합니다. 즉, 다중 스레드 / 동시에 어떤 작업을 실행할 수 있는지 확인해야합니다. 이는 몇 가지 문제가 테이블에 가져옵니다 ...

Erlang/F# 배우기 (플랫폼에 따라 다름)

  • 불변의 데이터 구조를 선호하며, 사용하면 동시 프로그램에서뿐만 아니라 소프트웨어가 쉽게 이해할 수 있습니다.

  • 언어의 동시성 도구를 배우십시오 (예 : java.util.concurrent, JCIP).

  • 기능적 언어를 배우십시오 (예 : Haskell).

나는 같은 질문을 받았으며 대답은 "그것은 의존한다"는 것입니다. Joe가 winform이라면 그렇게 많지 않을 것입니다. 작문 코드가 수행되어야하는 경우 예. 병렬 프로그래밍에서 볼 수있는 가장 큰 문제 중 하나는 이것입니다. 어떤 것이 평행 할 수없고, 거짓말을하고 런타임에 어쨌든 병렬로해야한다고 말하면 충돌하지 않을 것입니다. 그리고 당신은 쓰레기 결과를 얻고 프레임 워크를 비난합니다.

C 및 C ++ 코드의 경우 OpenMP 및 MPI를 배우십시오.

OpenMP는 또한 내가 생각하는 Fortran과 같은 다른 언어에도 적용됩니다.

쓰 작은 프로그램입니다.

다른 코드를어/스타일을 할 수 있게 다중 스레딩을 더 나은(그러나 다중 스레드가 여전히 정말 열심히 어떤 언어)지만 큰 혜택에 대한 정기적인 개발자,이럴가 실행하는 기능의 많은 작은 프로그램을 동시에 달성하는 일부 훨씬 더 큰 작업입니다.

그래서,는 습관에서 얻을 깨는 문제로 독립적인 요소를 사용할 수 있는 실행하고 당신이 원하는 때마다.

당신은 더 구축 유지 관리 소프트웨어 너무입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top