Я кодировал многопоточное моделирование, сохраняя выходы в файлах. До сих пор я с самого начала назначил один файл в ядро (с ofstream myfiles[NUMBER_OF_CORES]
), но он немного беспорядочен, поскольку я работаю с несколькими компьютерами с 20+ ядрами. Я делал это, чтобы избежать накладных расходов при использовании одного файла, но могу ли я использовать что-то вроде потока на ядро и, в конце концов, использовать что-то вроде:
for(int i =0; i < NUMBER_OF_CORES; i++){
myfile << CORE_STREAM[i];
}
начиная с CORE_STREAM[NUMBER_OF_CORES]
? Таким образом я никогда не манипулировал потоками. Какой класс я должен построить, если он существует?
Вы можете использовать ostringstream
для хранения промежуточных результатов в памяти. Как и в ofstream
, он реализует интерфейс ostream
поэтому ваш существующий код, вероятно, будет работать как есть.
Чтобы сбросить один поток на другой, вы должны сделать myfile << core_stream[i].rdbuf()
. = Буфер чтения
Считаете ли вы использование конвейера ZMQ? Ваши потоки моделирования могут записываться в сокет ZMQ_PUSH (см. Zmq_socket (3)) и все, что записывается в файл (другой поток или процесс, ZMQ не заботится), может читать из сокета ZMQ_PULL. Таким образом, ваши потоки моделирования могут потенциально избавиться от блокировки IO без постановки результатов в память. В настоящее время я не могу представить работу над проектом с распределенными вычислениями и не использовать ZMQ.