Несколько ядер пишутся в одном файле?

0

Я кодировал многопоточное моделирование, сохраняя выходы в файлах. До сих пор я с самого начала назначил один файл в ядро (с ofstream myfiles[NUMBER_OF_CORES]), но он немного беспорядочен, поскольку я работаю с несколькими компьютерами с 20+ ядрами. Я делал это, чтобы избежать накладных расходов при использовании одного файла, но могу ли я использовать что-то вроде потока на ядро и, в конце концов, использовать что-то вроде:

for(int i =0; i < NUMBER_OF_CORES; i++){
  myfile << CORE_STREAM[i];
  }

начиная с CORE_STREAM[NUMBER_OF_CORES]? Таким образом я никогда не манипулировал потоками. Какой класс я должен построить, если он существует?

Теги:
file
stream

2 ответа

1
Лучший ответ

Вы можете использовать ostringstream для хранения промежуточных результатов в памяти. Как и в ofstream, он реализует интерфейс ostream поэтому ваш существующий код, вероятно, будет работать как есть.

Чтобы сбросить один поток на другой, вы должны сделать myfile << core_stream[i].rdbuf(). = Буфер чтения

1

Считаете ли вы использование конвейера ZMQ? Ваши потоки моделирования могут записываться в сокет ZMQ_PUSH (см. Zmq_socket (3)) и все, что записывается в файл (другой поток или процесс, ZMQ не заботится), может читать из сокета ZMQ_PULL. Таким образом, ваши потоки моделирования могут потенциально избавиться от блокировки IO без постановки результатов в память. В настоящее время я не могу представить работу над проектом с распределенными вычислениями и не использовать ZMQ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню