TL; DR
Вам следует изучить, как использовать блокировку файлов в вашей системе и использовать ее для безопасного доступа к одному выходному файлу.
Вы также должны отправить свой сценарий, назначить массив заданий и разрешить каждому заданию в массиве запускать один эксперимент.
Здесь много чего происходит.
Один важный вопрос: сколько времени обычно занимает F () для вычисления? Я предполагаю, что вы только что написали пример, но это необходимо, чтобы решить, как лучше всего решить проблему.
Если промежуток времени для каждого вычисления невелик, возможно, вы можете запустить несколько пакетов, объединяя в одном скрипте несколько вычислений: в примере 3 пакета (для == 1, == 2 и == 3) каждый из них вычисляет все возможные эксперименты для b и c и генерирует 3 файла, которые должны быть объединены в конце.
Если временной интервал длинный, то перегрузка создания нескольких тысяч маленьких файлов не имеет большого значения. И объединить их потом будет легко.
Другое дело: при одновременном запуске всех заданий в фоновом режиме вы, вероятно, перегружаете одну машину. Я не знаю, как вы запрашиваете у SLURM ресурсы, но наверняка вы будете использовать только один узел. И злоупотребляя этим. Если там есть другие пользователи, они, вероятно, разозлятся. Вы должны контролировать количество одновременных заданий, запущенных на узле, чтобы быть числом процессоров, предоставленных на этом узле. Вероятно, поможет запуск ваших расчетов с помощью srun.
Другой способ - создать одно задание для расчета. Вы можете заключить их в массив заданий. В этом случае вы будете запускать только один эксперимент на задание, и вам не придется запускать и ждать чего-либо в фоновом режиме.
Наконец, перейдем к вашему основному вопросу: как лучше всего сохранить всю эту информацию на диске.
Создание тысяч файлов легко и возможно, но не лучшим способом для файловой системы. Возможно, у вас есть доступ к некоторому RAM-диску в общем узле. Запись небольшого файла в локальное хранилище вычислительного узла и копирование этого файла на общий диск в памяти было бы намного более эффективным. И когда все эксперименты выполнены, вы можете легко объединить результаты. Недостатком является то, что пространство обычно очень ограничено (я действительно не знаю реального размера ваших данных), и это будет диск в памяти: он может быть потерян в случае сбоя питания.
Лучше всего использовать один файл, но, как отметил Дмитрий Чубаров, вы должны использовать механизмы блокировки файлов. В противном случае вы рискуете получить смешанные результаты.
Наконец, подход, который я считаю наиболее подходящим для вашей проблемы, заключается в использовании какого-то решения, подобного базе данных. Если у вас есть доступ к реляционной БД, которая поддерживает транзакции, просто создайте таблицу с необходимыми полями и позвольте вашему коду подключиться и вставить результаты. Извлечение их в конце будет бризом. БД может быть клиент-серверной (MySQL, PostgreSQL, Oracle ...) или встроенной (HSQLDB). Другой вариант - использовать какой-либо формат файла, например NetCDF, который точно предназначен для такого рода научных данных и имеет некоторую поддержку параллельного доступа.