Russian Qt Forum
Ноябрь 23, 2024, 07:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: SSE  (Прочитано 5954 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
SSE
« : Июнь 06, 2013, 16:22 »

Добрый день

Есть open-source приложение исходники которого решено задействовать. Приложение действительно показывает чудеса скорости за счет использования инструкций SSE. Однако при этом не видно никаких попыток разрулить SSE автоматом, при установке (ccmake) пользователю предлагается самому ввести. Напр по умолчанию SSE4.2, но собранное с ним приложение не работает на моей машине - нужно SSSE3, тогда все норм.

Можно накомпилить либов (по 1 на каждый тип SSE) и потом в runtime подсовывать нужную, но грамотно ли так делать? Вероятно проблема типовая, кто сталкивался - поделитесь опытом.

Спасибо
Записан
Serr500
Гость
« Ответ #1 : Июнь 07, 2013, 19:46 »

Сам такое не писал,но часто работал с мультимедийными программами (типа рипперов, кодеков и т.п.). Там часта ситуация, когда SSE и MMX дают существенное (а то и многократное) ускорение. Для таких программ вполне нормальное явление - несколько библиотек, закомпиленных под разные наборы инструкций (MMX, SSE, 3DNow, SSE3, SSE4 и т.п). Программа при запуске получает флаги поддерживаемых инструкций и выбирает нужную библиотеку. Некоторые позволяют выбирать либы вручную (например, EncWAVtoAC3). А кодек h.264, насколько я понял, тащит внутри себя несколько вариантов функций с разными наборами инструкций и определив тип процессора, заполняет таблицу их адресов.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Июнь 16, 2013, 17:06 »

Поспрашивал на др форумах - ничего нового, да, надо иметь код "под каждый". Хорошо, тогда как лучше эту батарею компилить? Очевиден такой вариант:

- создать новую статик либу и насовать в нее таргетов (по 1 на каждый SSE), отличаются именами либы, экспортируемых ф-ций (через макро) и установкой SSE компилятора. Компилить это батчем, получится куча либов.

- из приложения определиться "какой SSE" в runtime и присвоить указатели на вызываемые ф-ции

Может как-то лучше, чтобы удобнее редактировать/отлаживать?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Июнь 16, 2013, 19:43 »

- создать новую статик либу
Зачем статик?
Лучше шаред сделать для каждого из SSE и загружать нужную. Символы будут одинаковые, загрузил, разрезолвил и пользуйся.
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #4 : Июнь 16, 2013, 19:54 »

Единицей трансляции является *cpp файл, соответственно, каждый файл может быть скомпилирован со своими настройками.
И таким образом в одну библиотеку можно запихнуть все варианты.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Июнь 16, 2013, 19:59 »

Единицей трансляции является *cpp файл, соответственно, каждый файл может быть скомпилирован со своими настройками.
И таким образом в одну библиотеку можно запихнуть все варианты.
А для чего?
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #6 : Июнь 16, 2013, 20:25 »

А для чего?
Просто мне больше нравится вариант с одной библиотекой, в которой много функций на все случаи, чем с кучей библиотек, с одной функцией
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #7 : Июнь 16, 2013, 20:32 »

Просто мне больше нравится вариант с одной библиотекой, в которой много функций на все случаи, чем с кучей библиотек, с одной функцией
Для чего держать в памяти функции, которые никогда не будут выполняться на данной машине?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Июнь 17, 2013, 10:09 »

Зачем статик?
Лучше шаред сделать для каждого из SSE и загружать нужную. Символы будут одинаковые, загрузил, разрезолвил и пользуйся.
Разумно, но набегает 4-5 вариантов * 2 (под 32 и 64) и еще * 2 (OSX и Вындоуз). Для каждой беты перекомпилировать эту толпу... И постоянно переключать release/debug

Единицей трансляции является *cpp файл, соответственно, каждый файл может быть скомпилирован со своими настройками.
И таким образом в одну библиотеку можно запихнуть все варианты.
Лучше вообще "в одно приложение". Но я пока не нашел как сделать это в Xcode 4.6
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #9 : Июнь 17, 2013, 11:38 »

Разумно, но набегает 4-5 вариантов * 2 (под 32 и 64) и еще * 2 (OSX и Вындоуз). Для каждой беты перекомпилировать эту толпу... И постоянно переключать release/debug
Печально, вы автоматическую сборку еще не освоили?
Тогда да, лучшее решение в одно приложение.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Июнь 17, 2013, 11:57 »

Печально, вы автоматическую сборку еще не освоили?
Я и на 4.6 пересел недавно с 3.2.6 и многие педали еще путаю. Если расскажете что то за "автоматическая" и как ее сделать в Xcode - буду признателен. Пока я не вижу как компилить серию файлов с разными установками кроме как создавать новый target(ы), что имеет свои минусы
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #11 : Июнь 17, 2013, 12:24 »

Я и на 4.6 пересел недавно с 3.2.6 и многие педали еще путаю. Если расскажете что то за "автоматическая" и как ее сделать в Xcode - буду признателен. Пока я не вижу как компилить серию файлов с разными установками кроме как создавать новый target(ы), что имеет свои минусы
CMake & make
И вы сможете не то что разные файлы собирать с разными параметрами, а целые сборки получать всего одной командой: сказали make all и получили - демо версию, лайт версию, дебаг версию, личную версию, версию для друга Сени и т.д. Все будет красиво разложено по своим деревьям, архитектурам и чему надо. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Июнь 17, 2013, 12:33 »

Это я могу и с IDE получить (создав N таргетов), но так ли уж это удобно, особенно для повседневного редактирования?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #13 : Июнь 17, 2013, 12:42 »

Это я могу и с IDE получить (создав N таргетов), но так ли уж это удобно, особенно для повседневного редактирования?
Повседневного редактирования чего?
И тогда непонятна эта "проблема":
Разумно, но набегает 4-5 вариантов * 2 (под 32 и 64) и еще * 2 (OSX и Вындоуз). Для каждой беты перекомпилировать эту толпу... И постоянно переключать release/debug
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.055 секунд. Запросов: 22.