---
# System prepended metadata

title: Overlapping of Computation and Communication

---

# Overlapping of Computation and Communication

CPU：你好 NIC，我有一條消息要發給我在 XYZ 的好朋友。可以幫我發給他嗎？
NIC：當然可以我的好朋友，稍等一下，等我發完之後會再跟你說
CPU：好的。在你傳送的時候，我會先繼續其他需要computation的工作，晚點再跟你確認
－－－時間過去了－－－
CPU：我已經做好一些任務了，你好了嗎？
NIC：還沒...再稍等一下
－－－時間過去了－－－
CPU：我已經完成更多任務了，你傳好了嗎！！
NIC：哦哦我已經傳好了，這是你的rescript
CPU：...

Notice how the CPU goes off and does other things while NIC handles all the details of sending.
In other words: "CPU has offloaded the task of sending the message to NIC."

 - 下圖是有沒有用 communication-computation overlap 的差別
 ![](https://i.imgur.com/LSpmXnq.png)

---
## How to measure?
#### Here are four general ways to measure.
>Source: Intel® MPI Benchmarks User Guide
 - Measure the time needed for a pure communication call.
 - Start a nonblocking collective operation.
 - Start computation using the IMB_cpu_exploit function, as described in the IMB-IO Nonblocking Benchmarks chapter. 
     - To ensure correct measurement conditions, the computation time used by the benchmark is close to the pure communication time measured at step 1.     
 - Wait for communication to finish using the MPI_Wait function.
 ``` int MPI_Wait(MPI_Request *request, MPI_Status *status)```
---
## 增加 Overlapping 效率的方法
 nonblocking collective operation
 把```MPI_Recv()```改成```MPI_Irecv()``` + ```int MPI_Wait```
 每次傳送資料的時候會先等到一定的量再傳送
 可以讓空檔變大 -> 增加 CPU 進行 Computing 的時間
 進而提高 Overlapping 
 example:
 ```
 MPI_Request request;
 MPI_Status status;
 
 if(world_rank != 0){
     MPI_Send(&(c[world_rank]), MPI_INT, 0, 0, MPI_COMM_WORLD);
     MPI_Irecv(&c, world_size - 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &request);
     MPI_Wait(&request, &status);
 }
 ```
 
---
Reference:
http://ipv6.ncnu.org/Course/Preparing/RDMA/Ref/overlap.pdf
https://blogs.cisco.com/performance/overlap-of-communication-and-computation-part-1
https://www.hpcadvisorycouncil.com/subgroups_hpc_scale.php
https://software.intel.com/content/www/us/en/develop/documentation/imb-user-guide/top/mpi-3-benchmarks/imb-nbc-benchmarks/measuring-communication-and-computation-overlap.html
https://www.open-mpi.org/doc/v4.0/