Во многих учебниках MPI есть несколько терминов, которые имеют неопределенное значение, например «Буфер приложений» и «Системный буфер». Я не понимаю разницы между ними. Я также задаюсь вопросом, где они расположены? Я думаю, что буфер приложения - это память внутри принимающего или отправляющего узла. Так что, если это так, что такое системный буфер?В чем разница между буфером приложений и системным буфером
ответ
В контексте MPI, применение буфера (часто называемый пользовательский буфер) является буфер, который содержит информацию для отправки или место, где информация должна быть получена. Буферы приложений - это то, что один переходит на коммуникационные вызовы MPI, например.
MPI_Send(buf, len, type, ...);
// ^^^
// app. buffer
После того, как MPI_Send
называется, сообщение строится и в зависимости от различных критериев, либо отправляется через межсоединения, который может быть любой вид соединительного механизма, например InfiniBand, интернет-розеток, совместно используемой памяти и т.д. и фактическая передача может включать в себя множество промежуточных этапов или буферизацию внутри системы для последующей доставки. Внутренние буферы (также системные буферы) являются частью системы управления MPI и управляются ею и невидимы для кода приложения. Не обязательно, чтобы системные буферы распределялись в ядре или где-то еще вне пространства приложений. Напротив, при использовании многих MPI-реализаций и межсоединений эти буферы распределяются в адресном пространстве программы и рассчитываются на использование памяти программы.
Также возможно использовать явно распределенные промежуточные буферы с помощью вызова MPI_Bsend
или его неблокирующего варианта MPI_Ibsend
. Это требует, чтобы пользователь сначала выделил буфер, а затем передал его во время выполнения MPI, вызвав MPI_Buffer_attach
. С этого момента содержимое этого буфера управляется только системой времени выполнения MPI.
Различие между приложениями и системными буферами важно для концепции завершения операции . Операции MPI считаются завершенными тогда, когда MPI больше не нуждается в доступе к буферу приложения. Например:
buf[] = some content;
MPI_Send(buf, len, ...);
// once MPI_Send returns, the buffer can be reused
buf[0] = 1;
MPI_Send(buf, 1, ...);
С неблокируемой вызывает операцию продолжается в фоновом режиме и один должен быть осторожным, чтобы не изменять буфер приложения до того, как асинхронная операция завершена:
MPI_Request req;
buf[] = some content;
MPI_Isend(buf, len, ..., &req);
buf[0] = 1; // DATA RACE: buf might still be in use by
MPI_Send(buf, 1, ...); // the operation initiated by MPI_Isend
Правильное использование от buf
в этом случае было бы примерно так:
MPI_Request req;
buf[] = some content;
MPI_Isend(buf, len, ..., &req);
// Do something that does not involve changing buf
// ...
// ...
// Make sure the operation is complete before continuing
MPI_Wait(&req, MPI_STATUS_IGNORE);
// buf is now free for reuse
buf[0] = 1;
MPI_Send(buf, 1, ...);
- 1. В чем разница между ND-буфером и G-буфером?
- 2. Разница между нормальным буфером и пространственным префиксным буфером в Emacs?
- 3. В чем разница между кольцевым буфером и круговым списком?
- 4. OpenCL - разница между буфером и глобальной памятью
- 5. Есть ли разница между буфером и консолью для использования ....
- 6. Переключение между тегами и буфером в gvim
- 7. Проблемы с буфером глубины и буфером шаблонов QML
- 8. Объединение объекта Vertex Array с буфером вершин и указательным буфером
- 9. использование и разность между буфером передачи и приемным буфером (txb & rxb)
- 10. Испытание буфером и трафаретом трафарета
- 11. Управление буфером для stdout
- 12. Confustion с буфером realpath()
- 13. В чем разница между ядром и системным программным обеспечением?
- 14. В чем разница между командой chroot и системным вызовом chroot()
- 15. В чем разница между системным вызовом и вызовом библиотеки?
- 16. Воспроизведение музыки с буфером AudioTrack буфером на Eclipse - без звука
- 17. Обмен символьным буфером между объектами строк C#
- 18. Работа с буфером обмена
- 19. Управление буфером вывода PHP
- 20. Проблема с буфером обмена
- 21. Как манипулировать ожидающим буфером
- 22. заполнение буфера буфером ненужным
- 23. Управление буфером Three.js
- 24. Сокет с таинственным буфером
- 25. Проблемы с буфером вершин
- 26. Управление буфером C++
- 27. glNormalPointer буфером чередованием массива
- 28. Node.js: Отличаясь выходным буфером
- 29. Синхронизированный производитель и потребитель с циркулярным буфером
- 30. путают с буфером и EOF и getchar