|
|
  |
Как использовать SSE I-III под Visual C++ 6.0, ускорить функцию с помощью всяких MMX |
|
|
|
Jun 28 2005, 10:58
|
Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839

|
Помогите, плз, ссылкой или советом. Поставили задачу ускорить до безобразия функцию одну. Причем оптимизация должна быть произведена под P-IV и под Athlon. Говорят, используй технологии SSE-I, SSE-II, SSE-III, 3DNow! и т.п.
Можно ли это дело, все эти технологии, как-то в Visual C ++ 6.0 использовать? Так понимаю, нужно какой-н. ASM прикручивать к Visual особый. Встроенного асм-а ведь недостаточно будет. Подскажите, что и где взять и как начать. Нуно!!!!!!!
|
|
|
|
|
Jun 28 2005, 12:01
|
Знающий
   
Группа: Свой
Сообщений: 693
Регистрация: 21-06-05
Из: Санкт-Петербург
Пользователь №: 6 184

|
Цитата(Fast @ Jun 28 2005, 14:58) ...Подскажите, что и где взять и как начать. Нуно!!!!!!! для начала нужно разбить оптимизируемую функцию на простейшие (сложение, умножение, вычитание... и распараллерить. MMX и SSE позволяет производить обработку над несколькими байтами одновременно (напр. перемножить несколько байт, слов, удв. слов на константу) пример: Есть поток данных. Требуется уменьшить значения всех в два раза (если поток звука, мы уменьшаем громкость) -обычный проц будет принимать каждый байт и делить на два; -если исп. MMX, потребуется принять блок данных, а затем все это разделить (что делается одной командой). Кстати, какая функция? Может ее не возможно оптимизировать...
|
|
|
|
|
Jun 28 2005, 12:17
|
Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839

|
Цитата(bav @ Jun 28 2005, 15:01) для начала нужно разбить оптимизируемую функцию на простейшие (сложение, умножение, вычитание... и распараллерить... Это-то понятно. Мне нужно сделать, чтобы компилятор Visual C++ 6.0 понимал SSE инструкции - я их ручками писать собираюсь. А функция сегодня одна, завтра другая - сам голову буду ломать, как параллелить. В Инете копаюсь, вот что нашел: нужен Visual C++ 6.0 Processor Pack какой-то и там *.h определенные подключить в проекте. Правда, закачать пока не удается. Этот Processor Pack нужный MASM ставит. Во как. Или взять Visual.NET, там втроенная поддержка SSEI-II, говорят.
|
|
|
|
|
Jun 28 2005, 12:47
|
Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839

|
Цитата(bav @ Jun 28 2005, 15:27) можно и ее (Visual.NET)... там есть опции оптимизации под P4. попробуй. у меня такая стоит. вроде никаих проблем не возникало Эхехе. Оптимизация это хорошо, боюсь меня не спасет. Нужно будет все ручками и на ASM - скорость нужна, чтоб до безобразия быстро работала. Если у него (компилятора) быстрее выйдет, то конечно, сдамся, а сейчас помучаюсь пока... Выяснил, что нужен Service Pack 5 for Visual C++ 6.0 и Processor Pack for Service Pack 5. Вот как закручено. Что ж, сегодня попробую раздобыть и поставить, что получилось - завтра скажу.
|
|
|
|
|
Jul 1 2005, 12:47
|
Участник

Группа: Свой
Сообщений: 19
Регистрация: 12-04-05
Из: Таганрог, Ростовской обл.
Пользователь №: 4 048

|
Цитата(RVlad @ Jun 28 2005, 19:28) Думаю , что подойдет Intel C\C++ компилер. Он ,вроде-бы , умеет работать с inline -asm , который поддерживает расширенные наборы инструкции (во всяком случае для Intel проц-в). Intel-овский компилятор очень успешно работает с SSE. Можно заоптимизировать цикл близко к оптимальному используя лишь разные pragm-ы и написав цикл особым образом. Сам компилятор можно настроить, что б выдавал рекомендации и замечания к циклу, это помогает не гадать, почему он плохо компилирует, а сразу идти к результату. Есть интеловская библиотека работы с матрицами. Поэлементное умножение, солжение с умножением одного слагаемого на константу и т.п., FFT и т.п. - всё это сделано и очень круто заоптимизировано под любые SSE и MMX (можно настроить библиотеку, чтоб выбирала нужный вариант динамически при запуске или линковались версии жёстко на нужный варант процессора). Этот путь мне кажется более перспективным. Надо очень неплохо знать архитектуру современных процессоров, что б обставить компилятор (при условии того, что компилятор тебя понял).
|
|
|
|
|
Jul 4 2005, 09:42
|
Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839

|
Всем спасибо большое - пищи для размышлений достаточно. Сейчас перепроверяю все варианты 1. Visual 6.0 + SP5 + PP5 и ручками (сегодня только SP5 поставил) 2. Visual 6.0 + Intel Compiler 6.0 (к сожалению 8.0 так и неудалось раздобыть, скачанная версия выдает: плохой архив... а покупать дорого) + VTune - этими вариантами я и пользовался до сих пор. Вот только не пойму, использует ли Intel Compiler6.0 расширенный набор инструкций CPU, опций у него таких нет. Буду разбираться. 3. библиотеки Intel DSP хорошо, если задача укладывается в набор имеющихся в библ. функций. А если нет - все равно надо самому ковырять. Смотрел я их как-то, - что-то можно взять, что-то не подходит и надо самому. В общем, мало доверия они вызвали - непонятно, так ли все там внутри круто заоптимизировано, все ли мне из этого нужно, и потом, черные ящики не люблю.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|