Как отмечено в комментариях, ключ используется для определения ранга процесса в новом коммуникаторе. Самый низкий ключ получает ранг ноль, следующий самый низкий ранг 1 и так далее. Таким образом, у нас есть 3 ранга в старом коммуникаторе, использующих один и тот же цвет, и эти ранги предоставляют ключи 5, 167 и 19, этот процесс, обеспечивающий ключ 5, будет иметь ранг 0 в новом коммуникаторе, что обеспечивает ключ 19 иметь ранг 1, а предоставление 167 будет рангом 2. Связи разрываются, сохраняя порядок рангов, как в исходном коммуникаторе. Таким образом, если вы просто предоставите ключ 0 и все процессы, вызывающие MPI_Comm_split, предоставят один и тот же цвет, это создаст новый коммуникатор, в котором ранги будут точно такими же, как и у старого. В качестве последнего примера рассмотрим коммуникатор размером nproc и каждый процесс с рангом my_rank. Если затем вы вызываете MPI_Comm_split, где каждый процесс предоставляет один и тот же цвет, а ключ (nproc - my_rank), то новый коммуникатор будет иметь тот же размер, что и старый, но порядок рангов будет обратным.