You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Use Python multiprocessing (Pool) to speed up a CPU-bound task, compare sequential vs parallel map, implement cpu_intensive_task, run and record timings, and explain why processes bypass the GIL compared with threads.
Implement a distributed Pi estimator with mpi4py collectives. Broadcast N, partition intervals per rank, compute local trapezoid sums, and reduce to a global result. Run with mpiexec for multiple process counts, record timings, and answer analysis on bcast vs reduce/allreduce and workload decomposition.
Implement Python threading to demonstrate a race condition, fix it with locks, and compare CPU-bound vs I/O-bound performance to observe the GIL; includes unsafe/safe counter examples, a performance script, and an analysis file.
Implement a bounded buffer (producer/consumer) in Python using threading.Lock and threading.Condition. Complete put/get with while+wait/notify loops, run multithreaded producers and consumers, observe waiting messages, and write a brief analysis on condition variables, wait loops, and mutual exclusion.
Use Dask DataFrame to parallelise a groupby-mean aggregation on a large synthetic dataset, compare timings with Pandas, run locally with a Dask LocalCluster, and answer analysis on performance, API similarity, lazy evaluation, and what Dask abstracts vs multiprocessing/MPI.