LINUX.ORG.RU

Core2Duo FPU speed


0

0

Может кому интересно будет. Недавно опять начал писать под PC платформу, алгоритм с интенсивными вычислениями матриц - и выяснились интересные факты про производительность Core2Duo.

Вобщем, блок Floating Point реализован в нём просто отлично - с GCC получается, что принудительное использование SSE регистров вместо FP сопроцессора понижает скорость на ~20-30%; а переключение с типа float на тип long вообще не дало повышения производительности :-O Отличный процессор от Intel, наконец-то у них получилось :)

anonymous

По-моему у них он там даже не один :)

Legioner ★★★★★
()

А может быть не Core2Duo, а gcc-developers?

anonymous
()
Ответ на: комментарий от rei3er

Я уверен в том что виноват не процессор. Все дело в коде. SSE как раз наиболее эффективен в матричных вычислениях, ни один компилятор не способен сделать оптимизации эффективнее чем программист на асме.
http://democoder.ru/article/13

koTuk
()
Ответ на: комментарий от rei3er

> а с чего вы взяли, что виноват процессор?

разве топикстартер _обвинял_ процессор?

ИМХО весь его спич был про то, как в нем хорошо реализована обычная float арифметика без SSE.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

>весь его спич был про то, как в нем хорошо реализована обычная float арифметика без SSE.

Она хорошо реализована уже начиная с 80287 в прошлом тысячелетии...

koTuk
()

>Вобщем, блок Floating Point реализован в нём просто отлично - с GCC получается, что принудительное использование SSE регистров вместо FP сопроцессора понижает скорость на ~20-30%; а переключение с типа float на тип long вообще не дало повышения производительности :-O

Яркий пример кроссплатформенного программирования без учета особенностей целевого процессора, такой код обречен на медленную работу.

koTuk
()

Где-то на форуме gentoo пробегало, что с gcc вообще не рекомендуется использовать -mfpmath=sse, причем кажется это связано с glibc. Интересно было бы проверить скорость работы того же кода, но скомпилированного интеловским icc с -xP или -xT.

octy ★★
()

>а переключение с типа float на тип long вообще не дало повышения производительности

А почему должно?

madcore ★★★★★
()

Потому что код для SSE* надо писать ручонками на ассемблере, а не полагатся на то что наоптимизировал компилятор.

P.S.: Простейшее преобразование rgb2yuv422 - fpu - кадр 1920x1080 обрабатывается почти две минуты (!). Инты со сдвигами - минуту. Ассемблерная функция с SSE2 - 2 секунды. При этом в первом случае различные -ftree-vectorize и -mfpmath=sse ни к чему не приводят, как тормозило так и тормозит.

svr4
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.