У меня очень большой вложенный цикл, в котором некоторые числа и дополнения выполняются с номерами с плавающей запятой.
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 и связать его с С#?
EDIT: Я обновил код, чтобы показать, как сгенерированы команды s и c. Также внутренний цикл фактически идет от 0 до i, хотя, вероятно, это не имеет большого значения для вопроса
EDIT2: Я реализовал алгоритм в VС++ и связал его с С# через dll и увидел увеличение скорости на 28% по сравнению с С# при включении всех оптимизаций. Аргумент для включения SSE2 работает особенно хорошо. Компиляция с MinGW и gcc4.4 давала только 15% -ное повышение скорости. Просто попробовал компилятор Intel и увидел повышение скорости на 49% для этого кода.