![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поддержка SIMD [D5, D6, Win2k, WinXP]
VMcL © (2003-05-07 13:53:00)Предисловие:
Насколько мне известно, для того, чтобы определить поддержку SIMD инструкций (MMX, 3DNow!, SSE и т. д.) нужно проверить соответствующие флаги процессора. Но: поскольку такие инструкции, как SSE, SSE2, появились относительно недавно, в мультизадачных средах, которые работают в Protected Mode, нужно проверять ещё поддержку данных инструкций операционной системой, то есть применяя try/except. Пробовал и в Win2K, и в WinXP протестировать таким образом поддержку SSE (команды movups, addps) (на соответствующих CPU, естественно :) — везде Exception.
Собственно вопросы:
Есть ли в этих ОС поддержка SSE, может я что-то неверно сделал? Если нет, можно ли их как-то пропатчить (Service Pack и т. п.), чтобы оная появилась.
?! (2003-05-09 09:26:00) [1]Удалено модератором
VMcL (2003-05-08 18:20:00) [2]При чём здесь УМЕТЬобрабатывать исключения?
Было бы неплохо, Digitman, сначала внимательнопрочитать мои посты, а потом писать ответы. А то получается, я говорю об арифметике, а Вы о геометрии :)
Digitman (2003-05-08 15:06:00) [3]ну а почему бы Маздаю и не "уметь" обрабатывать как минимум такие исключения ? не понимаю ... что в этом - нонсенс ?
VMcL (2003-05-08 13:58:00) [4]Digitman,
именно про ЭТУдокументацию я и писал (07.05.03 14:57).
А также у меня есть часть 1 и 3 плюс рекомендации по оптимизации.
Так вот. Я уже сам разобрался сегодня утром (за 10 минут:)
Проблема была только в том, что я не выровнял данные по границе 16 байт в команде addps. А SSE, как оказалось, понимаеь даже :) Win98 SE
Digitman (2003-05-08 09:29:00) [5]зайди-ка ты на сайт к Intel"у да скачай себе PDF-мануал
"Intel Architecture Software developer"s Manual. Volume 2: Instruction Set Reference"
в разделе 3.1.10 ("SIMD Floating-Point Exceptions) подробно описаны исключения, генерируемые ЦП при работе с инструкциями расширения
VMcL (2003-05-07 14:57:00) [6]Мне нужно написать это самому, не используя внешние библиотеки.
Поэтому:
1. "Intel MKL" не конает :(
2. try/except я использую, потому что хочу в своей программе узнать, есть ли поддержка SSE (например), и в зависимости от этого или использовать SSE или нет, а не тупо получать "SomeProgram.exe generated an error"
3. Метод с try/except описан в документации как необходимыйпосле проверки процессора, и приведенные библиотеки, IMHO, делают то же самое.
Digitman (2003-05-07 14:14:00) [7]
> проверять ещё поддержку данных инструкций операционной системой,
> то есть применяя try/except
при чем здесь ОС ? если какая-либо инструкция из какого-либо (потенциально присутствующего) расширения системы команд не может быть выполнена процессором, то генерируется прерывание, и его обработка - стандартна для ОС, вне зависимости от инструкции.
try..except же - лишь Паскаль-"оболочка" механизма низкоуровневого перехвата/обработки/раскрутки исключения
возможно, тебе следует обратить более серьезное внимание на существующие библиотеки (например, от Intel), которые реализуют достаточно серьезные и сложные алгоритмы с высокоэффективным использованием тех или иных расширений системы команд процессора. Например, Intel MKL (math kernel library), Intel SPL (signal processing library). Все , что от тебя потребуется в дан.случае для реализации проверки - вызов экспортируемых этими библ-ками ф-ций, отвечающих за инициализацию. В ходе инициализации как правило и выполняется проверка на доступность того или иного расширенного набора инструкций, и, если инициализация не выполнена успешно, тебе об этом будет сообщено кодом отказа, в т.ч. - и отказа по невозможности задействовать конкретные расширения системы команд.