Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > аналог math из crt c исходниками


Автор: opiate 10.9.2012, 20:03
Добрый день!
Подскажите пожалуйста open-source библиотеку, вычисляющую sin, cos, tan, log, pow, sqrt и т.д, использующую использующую SIMD (SSE2/SSE3), которую несложно портировать в MSVC (без cygwin и mingw)

Автор: boostcoder 10.9.2012, 20:20
дзочэм?

Автор: opiate 10.9.2012, 20:34
Цитата(boostcoder @  10.9.2012,  20:20 Найти цитируемый пост)
дзочэм? 

на всякий случай.

Может кто видел порт Libm-315 (opensource.apple.com) под msvc?

Автор: bsa 10.9.2012, 22:24
opiate, ты хоть знаешь, что такое инструкции SIMD и зачем они вообще нужны? Просто судя по вопросу, ты этого не знаешь.
Если тебе не нужно вычислять сотни однотипных операций, то используй стандартные функции (sin, cos, sqrt...). Если же тебе нужны именно такие, то ищи по слову вектор.

Автор: opiate 11.9.2012, 08:20
Цитата(bsa @  10.9.2012,  22:24 Найти цитируемый пост)
opiate, ты хоть знаешь, что такое инструкции SIMD и зачем они вообще нужны? Просто судя по вопросу, ты этого не знаешь.

Прежде чем грубить, почитай-ка сам что такое http://ru.wikipedia.org/wiki/SIMD инструкции и какие http://ru.wikipedia.org/wiki/SSE2 бывают, потом пройдись дизассемблером по "стандартным" sin cos из crt, и узнаешь зачем они бывают нужны.

Автор: bsa 11.9.2012, 10:59
opiate, может ты сначала сформулируешь вопрос корректно? А то непонятно что тебе нужно. То ли 128-битная арифметика, то ли векторная, то ли просто оптимизированные операции.
А потом, неужели у студии нет галочек, которые бы включали поддержку данного набора инструкций?

Автор: bsa 11.9.2012, 11:15
http://sseplus.sourceforge.net/

Автор: opiate 11.9.2012, 22:31
Цитата(bsa @  11.9.2012,  10:59 Найти цитируемый пост)
opiate, может ты сначала сформулируешь вопрос корректно? А то непонятно что тебе нужно. То ли 128-битная арифметика, то ли векторная, то ли просто оптимизированные операции.
А потом, неужели у студии нет галочек, которые бы включали поддержку данного набора инструкций? 

Даже незнаю как еще точнее: ищу оптимизированную с помощью SIMD библиотеку математических функций, которые объявлены в math.h из студии, но c исходниками.

В VS2005 для вычисления, например, sin действительно включается SSE2, в VS2008 включается SSE3, это почти то что нужно, но нет исходников (или я их просто невижу?), хотя crt исходники есть.

Цитата(bsa)
http://sseplus.sourceforge.net/

Спасибо, интересная вещь, но уж больно простейшие там функции. Синуса, косинуса, логарифма нет, только sqrt ceil и floor.

Смотрел там же на sourceforge Vector3D SSE, EasySSE, NVec - какие-то самоделки недоделки.
Libm от apple - похоже не использует SIMD, и непонятно каким ассемблером компилить.

http://en.wikipedia.org/wiki/C_standard_library#Implementations говорят "Under Linux, the mathematical functions (as declared in math.h) are bundled separately in the mathematical library libm" - вроде как есть еще одна реализация libm под Unix. Использует ли она SIMD? можно ли собрать в msvc?

Автор: tzirechnoy 11.9.2012, 23:26
Цитата
Спасибо, интересная вещь, но уж больно простейшие там функции.


А давно у Вас в math.h описаны _mm_abs_epi16 и им подобные?

Цитата
В VS2005 для вычисления, например, sin действительно включается SSE2


С чего Вы взяли?


Автор: opiate 12.9.2012, 08:27
Цитата(tzirechnoy @  11.9.2012,  23:26 Найти цитируемый пост)
А давно у Вас в math.h описаны _mm_abs_epi16 и им подобные?

Они не должны быть там описаны, их использует crt и math в своем коде.
Цитата(tzirechnoy @  11.9.2012,  23:26 Найти цитируемый пост)
С чего Вы взяли?

C/C++ -> Code Generation -> Enable Enhanced Instruction Set: Streaming SIMD Extensions2 (/arch:SSE2)
Запускать и смотреть дизассемблером (F11 в функцию sin())

Автор: boostcoder 12.9.2012, 08:29
так если там уже есть поддержка sse2, то для чего еще одна либа?

Автор: opiate 12.9.2012, 08:41
Цитата(boostcoder @  12.9.2012,  08:29 Найти цитируемый пост)
так если там уже есть поддержка sse2, то для чего еще одна либа? 

исходники нужны

Автор: bsa 12.9.2012, 11:23
А тебя лицензия не волнует?

Автор: opiate 12.9.2012, 13:59
Цитата(bsa @  12.9.2012,  11:23 Найти цитируемый пост)
А тебя лицензия не волнует? 

совсем не волнует.

Разбираюсь щас с Framewave. Вот накой #@$%& нужно было делать сборку из Visual Studio через какой-то долбанный SCons, для которого еще нужно устанавливать долбанный Python еще и старой версии.
Наконец-то собралось... 

Пока что получилось в 2 раза медленнее чем студийная math даже при расчете сразу 3-х синусов через fwsSin_32f_A24() хотя вроде Framewave использует для этого нузкоуровневую SSEPlus.

Прошелся в отладке по fwsSin_32f_A24() зачем-то используется что-то из boost, создаются потоки, синхронизация... неудивительно что так медленно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)