문제

저는 더 많은 성능이 필요한 프로젝트를 진행 중입니다.시간이 지남에 따라 우리는 병렬(스레드 및 분산 모두)에서 더 많이 작동하도록 설계를 계속 발전시켜 왔습니다.그런 다음 최신 단계는 그 일부를 16개 코어가 있는 새 시스템으로 옮기는 것이었습니다.저는 공유 메모리 모델에서 그렇게 많은 코어로 확장하기 위해 작업을 수행하는 방법을 다시 생각해야 한다고 생각합니다.예를 들어 표준 메모리 할당자는 충분하지 않습니다.

사람들은 어떤 자료를 추천할까요?

지금까지 Sutter의 칼럼 Dr. Dr.를 찾았습니다.Dobbs는 좋은 시작이 될 것입니다.방금 The Art of Multiprocessor 프로그래밍과 Intel Threading Building Blocks에 관한 The O'Reilly 책을 받았습니다.

도움이 되었습니까?

해결책

도움이 될 다른 몇 권의 책은 다음과 같습니다.

또한 동시 프로세스 간의 상태 공유에 덜 의존하는 것을 고려하십시오.작업 단위 간에 많은 동기화를 수행하지 않고도 독립적인 작업 단위를 분류할 수 있기 때문에 이를 피할 수 있다면 확장성이 훨씬 더 좋아질 것입니다.

일부 상태를 공유해야 하는 경우에도 실제 처리에서 공유 상태를 분할할 수 있는지 확인하세요.이렇게 하면 완료된 작업 단위를 다시 공유 상태로 통합하는 것과 별개로 많은 처리를 병렬로 수행할 수 있습니다.분명히 이는 작업 단위 간에 종속성이 있는 경우 작동하지 않지만 상태가 항상 공유될 것이라고 가정하는 대신 조사해 볼 가치가 있습니다.

다른 팁

확인해 보세요. Google의 성능 도구.그들은 멀티스레드 애플리케이션에 사용하는 malloc 버전을 출시했습니다.또한 훌륭한 프로파일링 도구 세트도 포함되어 있습니다.

Jeffrey Richter는 스레딩을 많이 합니다.그는 자신의 책에 스레딩에 관한 몇 개의 챕터를 가지고 있으며 그의 블로그를 확인해보세요.

http://www.wintellect.com/cs/blogs/jeffreyr/default.aspx.

Monty Python이 "그리고 이제 완전히 다른 것을 위해"라고 말하듯이 스레드를 사용하지 않고 프로세스와 메시징(공유 상태 없음)을 사용하는 언어/환경을 시도해 볼 수 있습니다.가장 성숙한 책 중 하나는 erlang입니다(이 훌륭하고 재미있는 책은 다음과 같습니다: http://www.pragprog.com/titles/jaerlang/programming-erlang).귀하의 상황과 정확히 관련이 없을 수도 있지만, 다른 도구에 적용할 수 있는 많은 아이디어를 여전히 배울 수 있습니다.

다른 환경의 경우:

.Net에는 F#(함수형 프로그래밍 학습용)이 있습니다.JVM에는 Scala(Erlang과 매우 유사한 액터가 있고 기능적 하이브리드 언어임)가 있습니다.또한 많은 노력을 기울이는 Java용 Doug Lea의 "포크 조인" 프레임워크도 있습니다.

FreeBSD의 할당자는 최근 FreeBSD 7에 대한 업데이트를 받았습니다.새로운 이름은 제말록 다중 스레드와 관련하여 훨씬 더 확장성이 뛰어납니다.

어떤 플랫폼을 사용하고 있는지 언급하지 않았으므로 아마도 이 할당자를 사용할 수 있을 것입니다.(나는 믿는다 Firefox 3에서는 Jemalloc을 사용합니다., 심지어 창문에서도.따라서 포트가 어딘가에 존재해야 합니다.)

보세요 비장 메모리 할당을 많이 하는 경우.

나만의 롤 잠금 해제 목록.좋은 리소스가 여기에 있습니다. C#으로 되어 있지만 아이디어는 이식 가능합니다.작동 방식에 익숙해지면 목록뿐만 아니라 사용할 수 있는 다른 곳도 보이기 시작합니다.

언젠가 Hoard, Google Perftools 및 jemalloc을 확인해야 할 것입니다.현재 우리는 Intel Threading Building Blocks의 Scalable_malloc을 사용하고 있으며 충분히 잘 작동합니다.

좋든 나쁘든 우리는 Windows에서 C++를 사용하고 있지만 코드의 대부분은 gcc를 사용해도 문제 없이 컴파일됩니다.Redhat(우리가 사용하는 주요 Linux 배포판)으로 전환해야 할 강력한 이유가 없다면, 이동하는 것이 골치 아픈/정치적 문제를 겪을 가치가 있는지 의심됩니다.

나는 Erlang을 사용하고 싶지만 지금 다시 실행해야 할 방법이 너무 많습니다.통신 환경에서 Erlang 개발과 관련된 요구 사항을 생각해 보면 이는 우리 세계(전자 거래)와 매우 유사합니다.암스트롱의 책은 제가 읽을 수 있도록 스택에 있습니다 :)

4개 코어에서 16개 코어로 확장하기 위한 테스트에서 코드의 병렬 부분에서 잠금/경합 비용을 평가하는 방법을 배웠습니다.운 좋게도 데이터에 따라 확장되는 큰 부분이 있지만 추가 잠금 및 메모리 할당자 때문에 처음에는 작동하지 않았습니다.

나는 지속적인 관심을 가질 수 있는 동시성 링크 블로그를 유지하고 있습니다.

http://concurrency.tumblr.com

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