Прежде всего, делайте запись файла из отдельного потока (или обрабатывайте в терминах MPI), чтобы другие потоки могли использовать ваши ядра для вычислений.
Затем проверьте, почему ваша параллельная версия намного медленнее, чем последовательная.Часто это означает, что вы создаете слишком маленькие задачи, поэтому связь между потоками (синхронизация) снижает вашу производительность.Подумайте, можно ли объединить задачи в чанки и завершить чанки, обработанные параллельно.
И, конечно же, использовать любой профилировщик, который подходит для многопоточной среды.
[EDIT]
последовательная часть = часть вашей логики, которая не может (и не является) параллельной, вы имеете в виду то же самое?последовательная часть на многоядерном может работать немного медленнее, вероятно, из-за диспетчера ОС или чего-то в этом роде.Странно, что ты видишь заметную разницу.
Диск является последовательным по своей природе, поэтому запись на диск из множества потоков не дает никаких преимуществ, но может привести к ситуации, когда многие потоки пытаются сделать это одновременно и ждут друг друга вместо того, чтобы что-то делатьполезно.
Кстати, какую реализацию MPI вы используете?
Описание вашей проблемы слишком высокого уровня, предоставьте псевдокод или что-то в этом роде, это может помочь нам помочь вам.