Использование параллелизма для распараллеливания циклов (внешнего или обоих) выглядит хорошей идеей, поскольку вызовы myCoeff кажутся дорогими.
Однако запись всех коэффициентов в файловую систему может быть не очень хорошей идеей, поскольку операции ввода-вывода в файловой системе, как правило, очень дороги и нарушают поток выполнения вашей программы. Если вы можете заплатить дополнительно n * n памяти, возможно, лучше хранить коэффициенты в памяти:
vector<double> coeff(n*n, 0);
for (i...) {
for (j...) {
coeff[j+n*i] = myCoeff(point[i],point[j]);
}
}
Это легко сочетается с распараллеливанием циклов.
Если вы придерживаетесь своей идеи сохранения коэффициентов в файловой системе (возможно, для уменьшения использования памяти), использование только одного файла очень затрудняет распараллеливание (к файлам следует обращаться последовательно). Вместо этого вы можете захотеть создать файл для каждой строки в матрице. Таким образом, вы можете легко комбинировать хранение коэффициентов с распараллеливанием внешнего цикла.
Кроме того, вам может быть лучше хранить ваши матричные коэффициенты по строке: A [i * n + j] или инвертировать ваши циклы i и j.