Считаю, что вопрос в этой теме не совсем правильно поставлен - 2000/XP сами по себе не виноваты, проблема именно в
неработоспособности всех или части SSE инструкций на i440LX, и искать причину нужно в аппаратной части. Или если это в
данном случае возможно (маловероятно правда) - workaround, например изменением каких либо MSR итп), все же программные
исправления в OS лишь предотвращают исполнение SSE инструкций OS или приложением, но проблема никуда не уходит от
этого.
Под любой OS будет проблема, если приложение "захочет" использовать SSE инструкции, просто в 2K/XP их пытается
использовать ядро (или какая-то программа или драйвер, но запускающаяся автоматически при старте OS), поскольку
процессор по CPUID отдает флаг поддержки SSE - и OS в принципе имеет право SSE команды использовать по своему
усмотрению. Интересно проверить и на i440FX, но у меня нет слотовой платы на i440FX, а в socket8 не вставить Katmai.
Я пока что не собрался исследовать этот вопрос детально, но предполагаю, что наверняка по каким-то причинам
"разваливаются" данные большого размера (128 бит) в цепочке память--мост-кеш-ядро CPU при пересылке из RAM в XMM
регистр и наоборот. Никакие другие команды в P3 не манипулируют данными размером 128 бит (цепочечные команды типа
MOVS, LODS, STOS, CMPS могут пересылать и намного больше с префиксом REPx, но это повторяющиеся инструкции с данными
меньшей размерности, и они имеют "окна" для прерываний)
Я думал сделать тестовое приложение на ассемблере под FreeBSD или DOS, и посмотреть какие именно SSE инструкции не
работают - никак руки не доходят. Ядро и драйверы FreeBSD вообще FPU не используют, те здесь проблема с SSE может быть
только в userland.
Считаю, что вопрос в этой теме не совсем правильно поставлен - 2000/XP сами по себе не виноваты, проблема именно в
неработоспособности всех или части SSE инструкций на i440LX, и искать причину нужно в аппаратной части. Или если это в
данном случае возможно (маловероятно правда) - workaround, например изменением каких либо MSR итп), все же программные
исправления в OS лишь предотвращают исполнение SSE инструкций OS или приложением, но проблема никуда не уходит от
этого.
Под любой OS будет проблема, если приложение "захочет" использовать SSE инструкции, просто в 2K/XP их пытается
использовать ядро (или какая-то программа или драйвер, но запускающаяся автоматически при старте OS), поскольку
процессор по CPUID отдает флаг поддержки SSE - и OS в принципе имеет право SSE команды использовать по своему
усмотрению. Интересно проверить и на i440FX, но у меня нет слотовой платы на i440FX, а в socket8 не вставить Katmai.
Я пока что не собрался исследовать этот вопрос детально, но предполагаю, что наверняка по каким-то причинам
"разваливаются" данные большого размера (128 бит) в цепочке память--мост-кеш-ядро CPU при пересылке из RAM в XMM
регистр и наоборот. Никакие другие команды в P3 не манипулируют данными размером 128 бит (цепочечные команды типа
MOVS, LODS, STOS, CMPS могут пересылать и намного больше с префиксом REPx, но это повторяющиеся инструкции с данными
меньшей размерности, и они имеют "окна" для прерываний)
Я думал сделать тестовое приложение на ассемблере под FreeBSD или DOS, и посмотреть какие именно SSE инструкции не
работают - никак руки не доходят. Ядро и драйверы FreeBSD вообще FPU не используют, те здесь проблема с SSE может быть
только в userland.