Checkpoint synchronization: Difference between revisions
Content added Content deleted
(Scala contribution added.) |
|||
Line 1,644: | Line 1,644: | ||
Worker 2 is ready |
Worker 2 is ready |
||
Task 3 complete</pre> |
Task 3 complete</pre> |
||
=={{header|Julia}}== |
|||
Julia has specific macros for checkpoint type synchronization. @async starts an asynchronous task, and multiple @async tasks can be synchronized by wrapping them within the @sync macro statement, which creates a checkpoint for all @async tasks. |
|||
<lang julia> |
|||
function runsim(numworkers, runs) |
|||
for count in 1:runs |
|||
@sync begin |
|||
for worker in 1:numworkers |
|||
@async begin |
|||
tasktime = rand() |
|||
sleep(tasktime) |
|||
println("Worker $worker finished after $tasktime seconds") |
|||
end |
|||
end |
|||
end |
|||
println("Checkpoint reached for run $count.") |
|||
end |
|||
println("Finished all runs.\n") |
|||
end |
|||
const trials = [[3, 2], [4, 1], [2, 5], [7, 6]] |
|||
for trial in trials |
|||
runsim(trial[1], trial[2]) |
|||
end |
|||
{{output}}<pre> |
|||
Worker 1 finished after 0.2496063425219046 seconds |
|||
Worker 3 finished after 0.6437560525692665 seconds |
|||
Worker 2 finished after 0.7622150880806831 seconds |
|||
Checkpoint reached for run 1. |
|||
Worker 2 finished after 0.0745173155757679 seconds |
|||
Worker 3 finished after 0.39089824936640993 seconds |
|||
Worker 1 finished after 0.5397505221156416 seconds |
|||
Checkpoint reached for run 2. |
|||
Finished all runs. |
|||
Worker 4 finished after 0.26840044205839897 seconds |
|||
Worker 3 finished after 0.5589553147289623 seconds |
|||
Worker 2 finished after 0.8546852411700241 seconds |
|||
Worker 1 finished after 0.9300832572304523 seconds |
|||
Checkpoint reached for run 1. |
|||
Finished all runs. |
|||
Worker 1 finished after 0.5289138841087624 seconds |
|||
Worker 2 finished after 0.7356027970934949 seconds |
|||
Checkpoint reached for run 1. |
|||
Worker 1 finished after 0.20674100912304416 seconds |
|||
Worker 2 finished after 0.6998567540438869 seconds |
|||
Checkpoint reached for run 2. |
|||
Worker 1 finished after 0.11392579333661912 seconds |
|||
Worker 2 finished after 0.4949249386371388 seconds |
|||
Checkpoint reached for run 3. |
|||
Worker 1 finished after 0.6032150410794788 seconds |
|||
Worker 2 finished after 0.8986919181800306 seconds |
|||
Checkpoint reached for run 4. |
|||
Worker 1 finished after 0.4237385941703915 seconds |
|||
Worker 2 finished after 0.5574922259408035 seconds |
|||
Checkpoint reached for run 5. |
|||
Finished all runs. |
|||
Worker 7 finished after 0.0396918164082527 seconds |
|||
Worker 3 finished after 0.31472648034105966 seconds |
|||
Worker 6 finished after 0.32606467253051474 seconds |
|||
Worker 5 finished after 0.3690388125862416 seconds |
|||
Worker 1 finished after 0.4290499974502766 seconds |
|||
Worker 2 finished after 0.48606373107736744 seconds |
|||
Worker 4 finished after 0.8723256915201081 seconds |
|||
Checkpoint reached for run 1. |
|||
Worker 2 finished after 0.10418765463492563 seconds |
|||
Worker 3 finished after 0.14023815791725713 seconds |
|||
Worker 7 finished after 0.7850239937628409 seconds |
|||
Worker 4 finished after 0.8145187186029617 seconds |
|||
Worker 6 finished after 0.8446820477646959 seconds |
|||
Worker 1 finished after 0.9195642711183825 seconds |
|||
Worker 5 finished after 0.9517129615316944 seconds |
|||
Checkpoint reached for run 2. |
|||
Worker 7 finished after 0.28490757307993486 seconds |
|||
Worker 3 finished after 0.4199539978001552 seconds |
|||
Worker 2 finished after 0.5509998796559186 seconds |
|||
Worker 5 finished after 0.7840588445793306 seconds |
|||
Worker 1 finished after 0.8049513381813924 seconds |
|||
Worker 6 finished after 0.8848651563027041 seconds |
|||
Worker 4 finished after 0.9074862779348334 seconds |
|||
Checkpoint reached for run 3. |
|||
Worker 5 finished after 0.21855944993484533 seconds |
|||
Worker 2 finished after 0.27709606350565275 seconds |
|||
Worker 7 finished after 0.28450943951411123 seconds |
|||
Worker 4 finished after 0.40871929967426857 seconds |
|||
Worker 1 finished after 0.5506243033572837 seconds |
|||
Worker 3 finished after 0.9287035426710006 seconds |
|||
Worker 6 finished after 0.9624436931735709 seconds |
|||
Checkpoint reached for run 4. |
|||
Worker 5 finished after 0.04032963358782826 seconds |
|||
Worker 6 finished after 0.17464708712852195 seconds |
|||
Worker 4 finished after 0.19558842246553398 seconds |
|||
Worker 3 finished after 0.2113199231977796 seconds |
|||
Worker 7 finished after 0.423009958033447 seconds |
|||
Worker 1 finished after 0.7584848109224733 seconds |
|||
Worker 2 finished after 0.8116269421151843 seconds |
|||
Checkpoint reached for run 5. |
|||
Worker 6 finished after 0.12563630313371443 seconds |
|||
Worker 4 finished after 0.33588040252159823 seconds |
|||
Worker 1 finished after 0.44873857982831256 seconds |
|||
Worker 5 finished after 0.536029356963061 seconds |
|||
Worker 3 finished after 0.5687590862891123 seconds |
|||
Worker 2 finished after 0.6655311849010326 seconds |
|||
Worker 7 finished after 0.8454083062748163 seconds |
|||
Checkpoint reached for run 6. |
|||
Finished all runs. |
|||
</pre> |
|||
=={{header|Kotlin}}== |
=={{header|Kotlin}}== |