У меня очень большой вложенный цикл for, в котором выполняются некоторые умножения и сложения для чисел с плавающей запятой.
for (int i = 0; i < length1; i++)
{
double aa = 0;
for(int h = 0; h < 10; h++)
{
aa += omega[i][outsideGeneratedAddress[h]];
}
double alphaOld = alpha;
alpha = Math.Sqrt(alpha * alpha + aa * aa);
s = -aa / alpha;
c = alphaOld / alpha;
for(int j = 0; j <= i; j++)
{
double oldU = u[j];
u[j] = c * oldU + s * omega[i][j];
omega[i][j] = c * omega[i][j] - s * oldU;
}
}
Этот цикл занимает большую часть моего времени обработки и является узким местом.
Могу ли я увидеть какие-либо улучшения скорости, если переписать этот цикл в C и подключиться к нему из C #?
РЕДАКТИРОВАТЬ: Я обновил код, чтобы показать, как генерируются s и c. Кроме того, внутренний цикл на самом деле идет от 0 до i, хотя это, вероятно, не имеет большого значения для вопроса
EDIT2: Я реализовал алгоритм в VC ++ и связал его с C # через dll и увидел увеличение скорости на 28% по сравнению с C #, когда все оптимизации включены. Аргумент для включения SSE2 работает особенно хорошо. Компиляция с MinGW и gcc4.4 только дала прирост скорости на 15%. Только что попробовал компилятор Intel и увидел увеличение скорости этого кода на 49%.