Задали нам на дом найти факториал 16!, используя MPI. Всё хорошо считается до тех пор, пока два MPI_Bcast не начинают отправлять сообщения всем потокам.
По идее, функция имеет следующие параметры: MPI_Bcast(&mes, count, datatype, root, comm), где mes-сообщение для всех потоков, count - число элементов в сообщении (обычно 1, >1 у массивов), datatype - тип данных сообщения, root - поток, который эти данные отправляет, comm - области видимости.
У меня есть 2 разных MPI_Bcast:
MPI_Bcast(&fact4, 1, MPI_DOUBLE, 1, MPI_COMM_WORLD);
И
MPI_Bcast(&partFact9101112, 1, MPI_DOUBLE, 5, MPI_COMM_WORLD);
Как видно, сообщения берутся из разных потоков, а именно из 1 и 5, и отсылают сообщения в совсем разные потоки, которые никак не пересекаются друг с другом. Первый отправляет сообщение в 0-3 потоки, а второй в 4-7 потоки.
Но тут возникает проблема. Каждый MPI_Bcast в сумме отсылает 3 сообщения, 2 из которых у каждого правильно доходят до получателя, а вот 1 сообщение у каждого путается и отправляется к получателю другого MPI_Bcast.
На скриншоте неправильно считаются 5! и 13!, потому что эти сообщения были предназначены для них. 5! должна была получить 4! от 1 потока, а 13! должна была была получить 9*10*11*12=11880 от 5 потока. Но в итоге сообщения перепутались и пришли противоположным адресатам.
Как я понимаю, ошибка тут не в коде, а в специфике передачи сообщений. Ведь в другие потоки сообщения дошли правильно.
Проблему решил созданием для каждой MPI_Bcast отдельных областей видимости. Т.е. вместо MPI_COMM_WORLD использовал свои локальные группы.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
подскажите пожалуйста, на каком примере можно рассмотреть промахи в кэш L2 и попадание в кэш L3? я не могу найти примеров на c++, где на конкретном...
Не могу понять почему слово симметрична выводится 16 раз, n и m равны 4, и такое ощущение что код как то эти значения умножаетВ чем ошибка ? вот...
Пытаюсь добавить Qt5 в готовый проектВозникли две ошибки: undefined reference to "_imp___ZN12QApplicationC1ERiPPci' и undefined reference to "_imp___ZN12QApplicationD1Ev'