Nano Hash - криптовалюты, майнинг, программирование

Синхронизировать указатели общих файлов MPI

Существует ли стандартный способ синхронизации указателей общих файлов MPI, чтобы MPI_File_get_position_shared возвращал одно и то же значение для всех процессов?

Например, следующая программа:

#include <mpi.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char** argv) {
    // Initialize the MPI environment
    MPI_Init(NULL, NULL);

    int rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    MPI_File fh;
    MPI_File_open(MPI_COMM_WORLD, "foo", MPI_MODE_RDWR | MPI_MODE_CREATE, MPI_INFO_NULL, &fh);

    char* buf;
    buf = "hello";
    MPI_Status status;
    sleep(rank);
    MPI_File_write_shared(fh, buf, strlen(buf), MPI_CHAR, &status);    

    MPI_File_sync(fh); 

    MPI_Offset offset;
    MPI_File_get_position_shared(fh, &offset);

    printf("rank: %i, offset: %i\n", rank, (int) offset);

    MPI_File_close(&fh);

    MPI_Finalize();
}

будет печатать

rank: 0, offset: 5
rank: 1, offset: 10
rank: 2, offset: 15
rank: 3, offset: 20

Это сработает, если я заменю MPI_File_sync(fh) на MPI_Barrier(MPI_COMM_WORLD): гарантированно ли это будет работать правильно?

11.06.2020

  • Какую библиотеку MPI (поставщика и версию) вы используете? 12.06.2020
  • Это было с MPICH, но хотелось бы чего-то кроссплатформенного. 13.06.2020

Ответы:


1

Вы можете использовать приведенную ниже функцию для синхронизации указателя общего файла.

MPI_File_seek_shared( fh, OFFSET, MPI_SEEK_SET );

Синтаксис:

int MPI_File_seek_shared(
  MPI_File mpi_fh,
  MPI_Offset offset,
  int whence
);

MPI_FILE_SEEK_SHARED обновляет указатель общего файла в соответствии с whence, который имеет следующие возможные значения:

MPI_SEEK_SET: указатель установлен на offset

MPI_SEEK_CUR: указатель устанавливается в текущую позицию указателя плюс offset

MPI_SEEK_END: указатель установлен на конец файла плюс offset

Справочник

12.06.2020
  • Боюсь, это не отвечает на вопрос, что общие смещения уже должны быть синхронизированы? 12.06.2020
  • Хорошо спасибо. Я считаю, что неправильно истолковал вопрос. 12.06.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..