2015-02-06 2 views
0

나는 C++에서 20000 번 이상 실행되는 코드가 있습니다. 코드는 여러 선형 시스템 (행렬)을 해결하고이 코드를 최적화하기 위해 노력하고 있습니다. 나는 스레드를 생성하고 모든 반복을 죽여야하는지 또는 첫 번째 반복 동안 스레드를 생성하고 나머지 반복 동안 다른 모든 스레드 간의 동기화를 수행해야하는지 혼란 스럽다. 왜 방법이 더 비쌉니까? C++에서 쓰레드 라이브러리를 사용 중이고 동기화를 위해 세마포어를 사용할 계획입니다.스레딩 대 동기화

+3

가장 좋은 방법은 다음과 같이하는 것입니다. 직접 해보고 다시 말해주십시오. 또한이 루프가 당신의 병목이라고 확신하는 경우에만 조기에 최적화하지 말고, – Creris

+3

에 최적화를 적용해야하지만 스레드를 생성하고 20000 번을 죽이는 것은 확실하지 않습니다. :) – Drax

답변

1

스레딩의 특정 상황에서 더 나은 것이 무엇인지 대답하기가 정말 어렵습니다. 그러나 스레드 생성/제거 오버 헤드로 인해 첫 번째 반복에서 스레드를 만들고 전체 계산 시퀀스 이후에 스레드를 종료하는 것이 좋습니다.

다른 인터 셉트 주제는 멀티 태스킹입니다. 여기서는 계산할 데이터의 부분이있는 작업/작업 만 작성합니다. CPU에서 계산 밸런싱을 자동으로 수행하기 때문에 좋습니다 (그러나 알고리즘에 따라 다름).