FearOfTheDark
> какие технологии
Это было видно из дизассемблера - перемножение на FPU без всяких SSE и прочих.
FalconVVS
посмотри внимательней это одна из реализаций, а их там 3 (одну ты нашёл)
---
вот только смысл их от туда доставать, всё лежит в отдельной длл бери и пользуйся )
susageP
> если щас еще операция сложения быстрей умножения то можно попробовать
> использовать 'быстрое' перемножение векторов.
В данном случае это не выгодно. Параллелится хорошо так что, в данном случае, можно получить даже на древнем пне по одному такту что на умножение, что на сложение.
Я думаю, они просто не все компоненты матриц там перемножают, отсюда и 30% разницы.
А есть ли какие-нибудь ограничения поддержки FPU( команд ) для разных процессоров( в смысле где-то поддерживается, где-то не... какие-то нюансы)?!
и как себя ведет FPU на x64?!
FalconVVS
> Это было видно из дизассемблера
Из дизассемблера видно, что там 4 ветки - FPU, SSE, SSE2, 3dNow. Просто смотреть надо внимательней. И FPU код очень неоптимальный, это видно не вооруженным глазом.
FearOfTheDark
> А есть ли какие-нибудь ограничения поддержки FPU( команд ) для разных процессоров
Да там чуть ли не со времен 8087 ничего приниципиального не менялось :)
Там что-то добавлялось но на этапе 80387/80486, короче для актуальных процессоров разницы нет.
Хехе, все такие умные.. )) то у майкрософт код не оптимальный , то вообще они бараны...
а матрицы множатся всё равно быстрее ^=^
crsib
Ты наверно крутой спец, раз видишь невооруженым глазом, что асм-код неоптимальный.
ksacvet777
нет он просто видит что там ингструкции с для работы с памятью идут почти что подряд, вот и сделал вывод
по крайней мере в ссе реализации их всего 16 и они идут подряд, 8 вначале 8 в конце.
ksacvet777
> а матрицы множатся всё равно быстрее ^=^
Еще раз, там 4 ветки кода. Здесь приведена только одна.
Necrys
> SSE не даёт прироста на таких мелочах, даже иногда вредит. Рулед инлайн и кэш-френдли методы, можно эффективно на чистом asm без sse написать и то лучче > будет.
Intel 64 and IA-32 Architectures Optimiztion Reference Manual, 3.8.4:
> Assembly/Compiler Coding Rule 63. (M impact, M generality) Use Streaming
> SIMD Extensions 2 or Streaming SIMD Extensions unless you need an x87 feature.
> Most SSE2 arithmetic operations have shorter latency then their X87 counterpart
> and they eliminate the overhead associated with the management of the X87
> register stack.
3.8.4.1:
> On Intel Core Solo and Intel Core Duo processors, the combination of improved
> decoding and μop fusion allows instructions which were formerly two, three, and four
> μops to go through all decoders. As a result, scalar SSE/SSE2 code can match the
> performance of x87 code executing through two floating-point units. On Pentium M
> processors, scalar SSE/SSE2 code can experience approximately 30% performance
> degradation relative to x87 code executing through two floating-point units.
Обращаем внимание, что речь идет о сравнении одного конвейера SSE с двумя FPU.
Smouking
> нет он просто видит что там ингструкции с для работы с памятью идут почти что
> подряд
Не только. До PIII включительно fpu был трех-стадийный. И fmul был одной из тех инструкций, которая в одиночку выполнялась за три такта, но при этом три fmul подряд выполнялись то же за 3 такта. На PIV FPU стал еще медленней и рекомендовалось параллельно выполнять не FPU код. Что опять таки не сделано. Про Core и старше сказанно выше. На Core SSE инструкции выполняются за такт (Intel® Advanced Digital Media Boost)
crsib
хмм...по тестам видно было что интелы любят ССЕ, что не скажешь об АМД, те такое чувство что всю заточку делают под ФПУ.
Smouking
Современные суперскаляры "кушают" уже переработанный поток команд. Всё упирается в организацию и производительность внутренних вычислительных устройств. У AMD внутренний конвеер унифицирован, а Intel зачастую предпочетает разные "подпорки" типа спец блок для обработки команд SSE. Вот отсюда и проистекает ситуация, что Intel любит оптимизацию в большей степени чем AMD т.к. у последнего что использование SSE, что FPU загрузят одно и тоже исполнительное устройство.
Вы бы лучше раскрыли тайну функции D3DX,
а не холиварили у кого FPU быстрее.
doc.
> а Intel зачастую предпочетает разные "подпорки"
C PIV уже не предпочитает. Ты еще вспомни, что до 486DX FPU стоял отдельной микросхемой (а на многих не ч86 это до сих пор отдельный чип).
doc.
> тоже исполнительное устройство.
Что значит одно устроиство? Execution core везде один, если ты о нем. Начиная с Core интелы при определенных условиях (см 2.1.3.1 Intel ORM) могут одновременно на execution core выполнять 6 мю-опов. На которые раскладываются все инструкции.
Lolmen
> Вы бы лучше раскрыли тайну функции D3DX
Ну, мне бы для начала хотелось понять, как топик кастер делает бенчмаркинг. И на каком железе. А AMD это вполне ожидаемо, так как есть ветка на 3DNow!, которую безкостыльная АМД любит больше, чем SSE. На интелах - скорее всего не правильная методика тестирования. Хотя возможны всякие штуки, типо агрессивной работы с кешем у d3dx
Тема в архиве.