Parallel brute force: Difference between revisions

m
Line 752:
</ul>
<br/>
Compile with "-O2 -threaded -rtsopts". Run with "+RTS -N<number of cores>"<br/>
7.391s elapsed on a 2.5 GHz Dual-Core Intel Core i7 Macbook Pro.
<lang haskell>import Control.Concurrent (getNumCapabilitiessetNumCapabilities)
import Crypto.Hash (hashWith, SHA256 (..), Digest)
import Control.Monad (replicateM, join)
Line 760:
import Data.ByteString (pack)
import Data.List.Split (chunksOf)
import GHC.Conc (getNumProcessors)
import Text.Printf (printf)
 
Line 766 ⟶ 767:
[ "3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b"
, "74e1bb62f8dabb8125a58852b63bdf6eaef667cb56ac7f7cdba6d7305c50a22f"
, "1115dd800feaacefdf481f1f9070374a2a81e27880f187396db67958b207cbad" ]
]
 
bruteForce :: Int -> [(String, String)]
Line 782:
main :: IO ()
main = do
corescpus <- getNumCapabilitiesgetNumProcessors
setNumCapabilities cpus
printf "Using %d cores\n" cores
mapM_ (uncurry (printf "Using %sd -> %scores\n")) (bruteForce cores)</lang>cpus
mapM_ (uncurry (printf "%s -> %s\n")) (bruteForce cpus)</lang>
{{out}}
<pre>brute +RTS -N2 -s
Using 24 cores
3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b -> apple
74e1bb62f8dabb8125a58852b63bdf6eaef667cb56ac7f7cdba6d7305c50a22f -> mmmmm
Line 802 ⟶ 803:
import Data.List.Split (chunksOf)
import Data.Word (Word8)
import GHC.Conc (getNumProcessors)
import System.Environment (getArgs)
import Text.Printf (printf)
Line 829 ⟶ 831:
searchWorker batchChan resultChan = forever (readChan batchChan >>= writeList2Chan resultChan . foldr findMatch [])
 
parseInput :: [String] -> Int -> Int
parseInput [] n = 2n
parseInput (s:_) n = if all isDigit s then read s else 2n
 
main :: IO ()
main = do
workers <- getArgs
cpus <- getNumProcessors
let wCount = parseInput workers cpus
setNumCapabilities wCount
printf "Using %d workers on %d cpus.\n" wCount cpus
resultChan <- newChan
batchChan <- newChan
Line 845 ⟶ 848:
replicateM_ (length hashedValues) (readChan resultChan >>= uncurry (printf "%s -> %s\n") . first show)</lang>
{{out}}
<pre>brute 2brute2
Using 24 workers on 4 cpus.
3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b -> "apple"
74e1bb62f8dabb8125a58852b63bdf6eaef667cb56ac7f7cdba6d7305c50a22f -> "mmmmm"
Anonymous user