Асинхронные параллельные вычисления в MATLAB? - PullRequest
0 голосов
/ 08 мая 2020

Я хочу использовать функции labSend, labReceive с spmd в MATLAB для выполнения следующих действий:

  1. Lab1, запустить процедуру глобальной оптимизации и передать промежуточный результат Lab2
  2. Lab2, дождитесь промежуточного результата от Lab1 (используя labProbe), после получения используйте этот результат и начните новую процедуру оптимизации.
  3. Lab3,4, ..., n дождитесь предыдущего результата от Lab_n -1, после получения используйте этот результат и начните новую процедуру оптимизации.

Проблема:

  Warning: An incoming message was discarded from lab 1 (tag: 1)
  Warning: An incoming message was discarded from lab 1 (tag: 1)
  Warning: An incoming message was discarded from lab 1 (tag: 1)
  Warning: An incoming message was discarded from lab 1 (tag: 1)
  Warning: An incoming message was discarded from lab 1 (tag: 1)

Данные из labSend:

0.4907    0.3328    0.3625    0.5843    0.3159    0.5065    0.5100    0.4984    0.3336    0.5055  
0.5216    0.5268    0.5002    0.4828    0.4907    0.3328    0.3625    0.5843    0.3159    0.5065
0.5100    0.4984    0.3336    0.5055    0.5216    0.5268    0.5002    0.4828    0.5010

, что соответствует 0,4907 - первому сообщению, отправленному через labSend.

Последнее значение, полученное от labReceive:

0.5055

означает последние 5 сообщений from labSend были проигнорированы.

Теперь процедура spmd является асинхронной, поскольку она 1) должна ждать промежуточного результата предыдущей лабораторной работы и 2) процедура оптимизации ускоряется по мере выполнения (поиск домен меньшего размера)

Следовательно, предыдущие лабораторные работы могут отправлять несколько сообщений до того, как lab_n сможет их обработать (выполнить что-то еще).

Вопрос :

Есть ли способ немедленно обработать (получить) данные из Lab1, если я смотрю на Lab2 и просто где-то их храню? Или есть способ обработать только самое последнее сообщение? и игнорировать любые сообщения в очереди?

Спасибо за помощь!

...