지금까지 경험 한 바에 따르면 멀티 코어 프로세서를 사용해도 알고리즘을 병렬 처리해도 속도가 빨라지지는 않습니다. 실제로 때로는 상황을 늦출 수 있습니다. 알고리즘을 병렬 처리하여 속도를 크게 높일 수 있다는 좋은 힌트는 무엇입니까? 독립적 비슷한 크기의 과정 곡물 덩어리로 분리 할 수 알고리즘을 병렬 처리해야한다는 힌트는 무엇입니까?
는답변
이 parallelisation 가장 혜택 작업을 할 수 있어야한다을 얻기 위해 (물론 조기 최적화주의 악에 자신의 상관 관계를 주어진) (또는 대부분 그렇게), 청크 간의 데이터 통신이나 동기화가 거의 필요하지 않습니다.
미세 입자 병렬화는 거의 항상 오버 헤드가 증가하고 사용 가능한 물리적 코어 수에 관계없이 유한 속도가 향상됩니다.
[주의해야 할 점은 매우 큰 번호의 아키텍처입니다. (연결 기계 64,000 개의 코어와 같은) '코어'로 구성됩니다. 이들은 특정 토폴로지 (직사각형 메쉬와 같이)에 할당 된 상대적으로 단순한 작업으로 분해 될 수있는 계산에 매우 적합합니다.]
자물쇠가 많이 필요하면 그 중 하나 일 것입니다. 어려운 알고리즘은 잘 병렬 처리되지 않습니다. 서로 접촉 할 필요가없는 별도의 파트로 분해 될 수있는 알고리즘의 부분이 있습니까?
먼저, 후반 짐 그레이에 의해이 문서를 체크 아웃 :
Distributed Computing Economics
사실, 이것은 당신이 질문에 쓴 내용에 따라 몇 가지 오해를 정리합니다. 분명히, 당신의 문제 집합이 이산화되는 것이 덜 바람직하다면, 더 어려워 질 것입니다.
작업을 독립적 인 파트로 나눌 수 있으면 잘 병렬 처리 될 수 있습니다.
또한 Amdahl's Law를 기억하십시오. 이는 대부분의 프로그램에 더 많은 코어를 추가하여 성능면에서 기대할 수있는 것이 얼마나 적은지를 상기시켜줍니다.
이전 계산에 의존하는 계산을 할 때마다 병렬 문제가 아닙니다. 선형 이미지 처리, 무차별 방식, 유전 알고리즘 등은 모두 쉽게 병렬화됩니다.
좋은 유추는 여러 파트를 한꺼번에 처리 할 수있는 친구를 얻을 수 있다는 것입니다. 예를 들어, 서로 다른 사람들이 다른 섹션에서 작업 할 수 있다면 ikea 가구를 함께 배치하면 병렬 처리가 잘 될 수 있지만 벽을 연속적으로 수행해야하기 때문에 롤링 벽지가 아닐 수도 있습니다.
유한 요소 모델과 관련된 시뮬레이션과 같이 거대한 행렬 계산을 수행하는 경우에는 직선적 인 방식으로 작은 조각으로 나눌 수 있습니다. 행렬 - 벡터 곱셈은 매우 큰 행렬을 처리한다고 가정 할 때 병렬 처리의 이점을 얻을 수 있습니다. 실제 성능 병목 현상으로 인해 코드가 느리게 실행되는 경우가 아니라면 병렬 처리로 번거롭게 할 필요가 없을 것입니다.
나는 당신의 논리를 볼 수 있습니다. 이것은 학교 과제물입니다.시간이 있다면 그림을 그리는 것이 간단하고 상당한 속도 향상을 가져다 주면 일부 병렬 처리로 놀아 볼 것입니다. 내가 찾지 못할지라도 "내가 시도한 다른 것이 여기있다."라고 말하면 좋아 보인다. –
- 1. 병렬 알고리즘을 테스트하기 위해 간단한 데스크톱에서 컴퓨터 클러스터 시뮬레이션
- 2. 병렬 파이썬 : 콜백이란 무엇입니까?
- 3. 목표 알고리즘을 사용하여 차 알고리즘을 구현하는 방법은 무엇입니까?
- 4. Java에서 병렬 프로그래밍을 수행하는 방법은 무엇입니까?
- 5. PHP에서이 알고리즘을 코딩하는 방법은 무엇입니까?
- 6. CPM 알고리즘을 설계하는 방법은 무엇입니까?
- 7. 병렬 알고리즘 설계
- 8. 옥타브의 병렬 컴퓨팅
- 9. 병렬 병합 정렬
- 10. 내 haskell 병렬 코드의 모든 병렬 처리를 악용하는 방법은 무엇입니까?
- 11. LinqToSql - 병렬 - DataContext 및 병렬
- 12. 더 나은 알고리즘을 만들기 위해 알고리즘을 공부해야합니다
- 13. 병렬 계산의 표준 예는 무엇입니까?
- 14. 파생 알고리즘을 찾는 알고리즘
- 15. 분산 된 병렬 트리 검색 알고리즘 제안 사항은 무엇입니까?
- 16. Java에서 멀티 코어 용 알고리즘을 구현하려면 어떻게해야합니까?
- 17. 알고리즘을 클래스로 캡슐화하기
- 18. Prim의 알고리즘을 Kruskal의 알고리즘으로 변환하는 방법은 무엇입니까?
- 19. 그라비티 형 알고리즘을 구현하는 방법은 무엇입니까?
- 20. "관련"학위 지수 알고리즘을 구현하는 방법은 무엇입니까?
- 21. 유전자 알고리즘을 사용하여 신경망을 최적화하는 방법은 무엇입니까?
- 22. J2ME에서 Blowfish 알고리즘을 구현하는 방법은 무엇입니까?
- 23. 이러한 해시 알고리즘을 사용하는 PHP 함수는 무엇입니까?
- 24. 이 알고리즘을 최적화/스케일 방지하는 방법은 무엇입니까?
- 25. 이 유전 알고리즘을 코딩하는 방법은 무엇입니까?
- 26. 피보나치 힙으로 Prim의 알고리즘을 구현하는 방법은 무엇입니까?
- 27. 가짜 이름을 필터링하는 알고리즘을 작성하는 방법은 무엇입니까?
- 28. 알고리즘을 다른 언어로 내보내는 방법은 무엇입니까?
- 29. 재귀 알고리즘을 최적화하여 반복하지 않는 방법은 무엇입니까?
- 30. 캘린더 그리드를 채우는 알고리즘을 개선하는 방법은 무엇입니까?
여기에 동의합니다. 그러나 Atwood가 블로그에서 항상보고 싶지 않은 것 중 하나는 프로그램이 일반적으로 다른 관련없는 프로세스와 경쟁한다는 점입니다. 여기에도 여러 코어에서 얻을 수 있습니다. 하지만 대부분의 시간은 코드의 가장 느린 부분에 사용됩니다. :) – BobbyShaftoe