Potrzebuję zoptymalizować ekstremalnie obliczenia na double i nie widzę dobrych kompilatorów do tego.
Najlepiej żeby również pozwalał pisać w tych wstawkach asm instrukcje sse2, sse3, ...
Sprawdzałem gcc, i to strasznie marnie działa.
Bez SEE - tylko optymalizacja FPU - generuje sekwencyjny kod, jak kompletny przygłup.
Kiedyś używałem BC5 i tam była opcja: intel optimised compiler;
gdy się tego użyło, wówczas generował z 2-4 razy szybszy kod na floatach, a tu nic - gcc normalnie liczy jak bez jakiejkolwiek optymalizacji.
Np. gdy obliczam:
x = aaa;
r += b * x*c + ... // tu inne obliczenia
i ten głupek jedzie normalnie:
fld a ; ładuje a
fmul a ; zamiast fmul st0, ale to pryszcz...
fmul a ; od razu mnoży tak samo
fstp x ; x = a^3
To jest kompletne dno.
FPU może obliczać kilka operacji naraz - chyba do 4 mnożeń/dodawań, a wtedy wychodzi nawet 1 cykl na instrukcję, ale operacje muszą być niezależne od siebie, czyli tak jak gcc generuje nigdy nie należy robić.
Potem gcc + SEE3 i on to samo wygenerował, tylko pozmieniał mnemoniki rozkazów.
Powinien chyba próbować podwójnie trzaskać (tam było od groma operacji na tablicach z double), a nie wszystko skalarnie jak FPU.