Получая ПУСТЫЕ коммуникаторы с MPI_Cart_create, MPICH

На самом деле, не стоит сравнивать Runnable и Thread друг с другом.

Эти два имеют зависимость и отношение в многопоточности, подобно Wheel and Engine отношениям в автомобиле.

Я бы сказал, что есть только один способ многопоточности с двумя шагами. Позвольте мне высказать свое мнение.

Runnable:
При реализации interface Runnable это означает, что вы создаете что-то, что является run able в другом потоке. Теперь создание чего-либо, что может выполняться внутри потока (может выполняться внутри потока), не означает создание потока.
Таким образом, класс MyRunnable является не чем иным, как обычным классом с методом void run. И это объекты будут обычными объектами только с методом run, который будет нормально выполняться при вызове. (если мы не передадим объект в потоке).

Thread:
class Thread, я бы сказал, особый класс с возможностью запуска нового Thread, который фактически позволяет многопоточность через его метод start().

Почему бы не разумно сравнивать?
Потому что они нужны нам для многопоточности.

Для многопоточности нам нужны две вещи:

  • Что-то, что может работать внутри потока (Runnable).
  • Что-то, что может начать новую тему (Thread).

Таким образом, технически и теоретически они оба необходимы для запуска потока, один будет выполнять , а другой заставит его запустить (Как Wheel and Engine автомобиля).

Вот почему вы не можете запустить поток с MyRunnable, вам нужно передать его экземпляру Thread.

Но можно создавать и запускать поток только с использованием class Thread, потому что Class Thread реализует Runnable, поэтому мы все знаем, что Thread также является Runnable внутри.

]

Наконец, Thread и Runnable дополняют друг друга для многопоточности не конкурента или замены.

1
задан Coral Doe 22 October 2012 в 09:10
поделиться

1 ответ

Изменить:

Если посмотреть на ваше сообщение об ошибке:

Fatal error in MPI_Cart_coords: Invalid communicator, error stack:
MPI_Cart_coords(130): MPI_Cart_coords(MPI_COMM_NULL, rank=3, maxdims=2, coords=0x6a9010) failed
MPI_Cart_coords(74).: Null communicator

похоже, что коммуникатор для MPI_Cart_coords пуст. При обратном сканировании это инициализируется вызовом MPI_Cart_create ~ 5 строк выше.

На странице руководства MPI_Cart_create (выделено мной):

ОПИСАНИЕ

MPI_Cart_create возвращает дескриптор нового коммуникатора, к которому Информация о декартовой топологии прилагается. Если reorder = false, тогда ранг каждого процесса в новой группе идентичен его рангу в старой группе. В противном случае функция может изменить порядок процессов. (возможно, чтобы выбрать хорошее вложение виртуальной топологии на физическую машину). Если общий размер декартовой сетки меньше, чем размер группы комм, то некоторые процессы возвращаются MPI_COMM_NULL, по аналогии с MPI_Comm_split. Звонок ошибочен, если он определяет сетку, которая больше, чем группа размер.

Похоже, это ваша проблема.

2
ответ дан 3 September 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: