I understand that Gang scheduling is a scheduling algorithm for parallel systems that schedules related threads or processes to run simultaneously on different processors. Gang scheduling is used so that if two or more threads or processes communicate with each other, they will all be ready to communicate at the same time. However, how does a gang scheduling algorithm determine that the particular set of processes will be communicating among themselves and hence schedule related threads or processes to run simultaneously on different processors?