Tidsmätning med parSapply()
Att köra tärningsspelet är embarrassingly parallel. Den här typen av simuleringar ger oftast (men inte alltid) en bra prestandaförbättring. Precis som tidigare kan vi använda microbenchmark() eller system.time(). För enkelhetens skull använder vi system.time() i den här övningen.
Den här övningen är en del av kursen
Effektiv R-kod
Övningsinstruktioner
Funktionen play() är redan definierad i din miljö. Vi antar att vi vill spela hundra tusen spel.
- Sätt
no_of_gamestill1e5. - Använd
system.time()för att mäta tiden det tar att anropaplay()upprepade gånger i serie.- Anropa
sapply()med1:no_of_gamesoch wrapper-funktionenplay(). - Tilldela resultatet till
serial. - Omge anropet med
system.time()för att mäta tiden.
- Anropa
- Skapa ett klusterobjekt med 4 kärnor och exportera funktionen
play()till det. - Använd
system.time()för att mäta tiden det tar att anropaplay()upprepade gånger parallellt.- Utgå från koden du använde för att skapa
serial, men anpassa den så att den körs parallellt.
- Utgå från koden du använde för att skapa
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# Set the number of games to play
no_of_games <- ___
# Time serial version
system.time(serial <- sapply(1:___, function(i) play()))
# Set up cluster
cl <- makeCluster(___)
clusterExport(cl, "play")
# Time parallel version
system.time(par <- ___)
# Stop cluster
stopCluster(cl)