Я хочу использовать функции labSend, labReceive с spmd в MATLAB для выполнения следующих действий:
- Lab1, запустить процедуру глобальной оптимизации и передать промежуточный результат Lab2
- Lab2, дождитесь промежуточного результата от Lab1 (используя labProbe), после получения используйте этот результат и начните новую процедуру оптимизации.
- 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 и просто где-то их храню? Или есть способ обработать только самое последнее сообщение? и игнорировать любые сообщения в очереди?
Спасибо за помощь!