реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
Fast
сообщение Jun 28 2005, 10:58
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839



Помогите, плз, ссылкой или советом.
Поставили задачу ускорить до безобразия функцию одну.
Причем оптимизация должна быть произведена под P-IV и под Athlon.
Говорят, используй технологии SSE-I, SSE-II, SSE-III, 3DNow! и т.п.

Можно ли это дело, все эти технологии, как-то в Visual C ++ 6.0 использовать? Так понимаю, нужно какой-н. ASM прикручивать к Visual особый. Встроенного асм-а ведь недостаточно будет.
Подскажите, что и где взять и как начать. Нуно!!!!!!!
Go to the top of the page
 
+Quote Post
bav
сообщение Jun 28 2005, 12:01
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 693
Регистрация: 21-06-05
Из: Санкт-Петербург
Пользователь №: 6 184



Цитата(Fast @ Jun 28 2005, 14:58)
...Подскажите, что и где взять и как начать. Нуно!!!!!!!
*


для начала нужно разбить оптимизируемую функцию на простейшие (сложение, умножение, вычитание... и распараллерить.
MMX и SSE позволяет производить обработку над несколькими байтами одновременно (напр. перемножить несколько байт, слов, удв. слов на константу)

пример:
Есть поток данных. Требуется уменьшить значения всех в два раза (если поток звука, мы уменьшаем громкость)
-обычный проц будет принимать каждый байт и делить на два;
-если исп. MMX, потребуется принять блок данных, а затем все это разделить (что делается одной командой).

Кстати, какая функция? Может ее не возможно оптимизировать... blush.gif
Go to the top of the page
 
+Quote Post
Fast
сообщение Jun 28 2005, 12:17
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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, говорят.
Go to the top of the page
 
+Quote Post
bav
сообщение Jun 28 2005, 12:27
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 693
Регистрация: 21-06-05
Из: Санкт-Петербург
Пользователь №: 6 184



можно и ее (Visual.NET)... там есть опции оптимизации под P4. попробуй. у меня такая стоит. вроде никаих проблем не возникало
Go to the top of the page
 
+Quote Post
Fast
сообщение Jun 28 2005, 12:47
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 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. Вот как закручено. Что ж, сегодня попробую раздобыть и поставить, что получилось - завтра скажу.
Go to the top of the page
 
+Quote Post
RVlad
сообщение Jun 28 2005, 16:28
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 15-03-05
Пользователь №: 3 378



Думаю , что подойдет Intel C\C++ компилер. Он ,вроде-бы , умеет работать с
inline -asm , который поддерживает расширенные наборы инструкции (во всяком случае для Intel проц-в).
Go to the top of the page
 
+Quote Post
Eugeno
сообщение Jul 1 2005, 12:47
Сообщение #7


Участник
*

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



Цитата(RVlad @ Jun 28 2005, 19:28)
Думаю , что подойдет Intel C\C++ компилер. Он ,вроде-бы , умеет работать с
inline -asm , который поддерживает расширенные наборы инструкции (во всяком случае для Intel проц-в).
*

Intel-овский компилятор очень успешно работает с SSE. Можно заоптимизировать цикл близко к оптимальному используя лишь разные pragm-ы и написав цикл особым образом. Сам компилятор можно настроить, что б выдавал рекомендации и замечания к циклу, это помогает не гадать, почему он плохо компилирует, а сразу идти к результату.

Есть интеловская библиотека работы с матрицами. Поэлементное умножение, солжение с умножением одного слагаемого на константу и т.п., FFT и т.п. - всё это сделано и очень круто заоптимизировано под любые SSE и MMX (можно настроить библиотеку, чтоб выбирала нужный вариант динамически при запуске или линковались версии жёстко на нужный варант процессора).

Этот путь мне кажется более перспективным. Надо очень неплохо знать архитектуру современных процессоров, что б обставить компилятор (при условии того, что компилятор тебя понял).
Go to the top of the page
 
+Quote Post
v_mirgorodsky
сообщение Jul 1 2005, 14:20
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 342
Регистрация: 21-02-05
Пользователь №: 2 804



Podderzhivayu ideyu po povodu Intel C++ compilyatora. Eta shtukovina integriruetsya napryamuyu v Visual Studio 6.0 ili .NET. Posle pri kompilyatsii ispol'zuet Intelovskiy kompilyator, a ne podobie onogo, napisannoe M$. Est', odnako, podvodniy kamen'. Nekotorie osobennosti ishodnogo teksta M$ traktuyutsya kak oshibki, a Intel C++ kak warningi. V nekotorih sluchayah poluchaetsya kompilyatoro-zavisimiy kod.


--------------------
WBR,
V. Mirgorodsky
Go to the top of the page
 
+Quote Post
acex2
сообщение Jul 1 2005, 21:20
Сообщение #9


Адепт
****

Группа: Свой
Сообщений: 520
Регистрация: 15-02-05
Пользователь №: 2 656



Не могу не согласиться с предыдущими ораторами smile.gif
Действительно, Си-компилятор от Интел выполняет очень качественную оптимизацию - часто при анализе сгенерированного кода ловил себя на мысли что сам до такого не додумался бы. Если же решитесь писать сами на асме, то для контроля кода в обязательном порядке используйте VTune - он показывает неоптимальные места с точки зрения загрузки конвейеров, использования кэша и спаривания команд, и приводит пояснения что и как можно сделать лучше. Еще стоит обратить внимание на готовые Интеловские библиотеки оптимизированных примитивов - возможно получится что самому оптимизировать ничего и не придется.
Go to the top of the page
 
+Quote Post
Fast
сообщение Jul 4 2005, 09:42
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 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 хорошо, если задача укладывается в набор имеющихся в библ. функций. А если нет - все равно надо самому ковырять. Смотрел я их как-то, - что-то можно взять, что-то не подходит и надо самому. В общем, мало доверия они вызвали - непонятно, так ли все там внутри круто заоптимизировано, все ли мне из этого нужно, и потом, черные ящики не люблю.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 09:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01432 секунд с 7
ELECTRONIX ©2004-2016