하스켈에서 병렬 계산을 수행하는 데 문제가 있습니다. 방금 병렬 및 비 병렬 형태로 매우 간단한 계산을 시도했지만 비 병렬 방식은 몇 초 더 빨랐습니다. 내가 뭔가 잘못하고 있는거야? 왜 이것이 사실일까요? 미리 감사드립니다.파가 효과 없음
이 내 테스트 코드의 병렬 버전 :
-- par.hs
import Control.Parallel
a = sum [1, 3 .. 99999999]
b = sum [2, 4 .. 100000000]
main = (a `par` b) `pseq` print (a + b)
이이 평행하지 않은 버전입니다 : 없음
-- nopar.hs
a = sum [1, 3 .. 99999999]
b = sum [2, 4 .. 100000000]
main = print (a + b)
하지만 난 그것을 시도 할 때, 병렬화가 있었다, 심지어 부정적인 효과 :
➜ ghc par.hs
[1 of 1] Compiling Main (par.hs, par.o)
Linking par ...
➜ ghc nopar.hs
[1 of 1] Compiling Main (nopar.hs, nopar.o)
Linking nopar ...
➜ time ./par
5000000050000000
./par 35.02s user 12.83s system 92% cpu 51.501 total
➜ time ./nopar
5000000050000000
./nopar 31.33s user 6.44s system 98% cpu 38.441 total
방금 숫자를 합산 한 것입니다. 차이를보기에는 너무 사소한 것 같습니다. – Carcigenicate
GHC에'-threaded' 플래그를 추가하여 실제로 여러 시스템 스레드를 사용할 수있는 RTS를 사용하도록하십시오. – Carl
@Carcigenicate 분명히 30 초의 단일 스레드를 사용하기에 충분합니다. 두 개의 스레드를 사용하여 반으로 줄일 수 있다고 가정하는 것이 합리적입니다. – amalloy