У меня есть следующий кусок кода С,оптимизации вложенный цикла в с
double findIntraClustSimFullCoverage(cluster * pCluster)
{
double sum = 0;
register int i = 0, j = 0;
double perElemSimilarity = 0;
for (i = 0; i < 10000; i++)
{
perElemSimilarity = 0;
for (j = 0; j < 10000; j++)
{
perElemSimilarity += arr[i][j];
}
perElemSimilarity /= pCluster->size;
sum += perElemSimilarity;
}
return (sum/pCluster->size);
}
NOTE:
arr
представляет собой матрицу размера 10000 X 10000
Это часть коды GA, следовательно, этот вложенный цикл loop работает много раз. Это влияет на производительность кода, то есть занимает много времени, чтобы дать результаты. Я профилировал код, используя valgrind/kcachegrind. Это указывало, что 70% времени выполнения процесса было потрачено на выполнение этого цикла вложенных циклов. Регистровые переменные i и j, по-видимому, не хранятся в значениях регистров (профилирование с ключевым словом «без регистрации» указано)
Я просто не могу найти способ оптимизировать эту вложенную часть цикла кода (так как это очень просто и прямолинейно). Пожалуйста, помогите мне в оптимизации этой части кода.
Ключевое слово 'register' в значительной степени игнорируется всеми современными компиляторами. Поэтому не ожидайте увидеть разницу. – Mysticial
'arr' - матрица двухместных? – psur
Как часто обновляется априор? Может быть, лучше пересчитать значение динамически при каждом обновлении? –