Векторизованные триггерные функции в C?

, я хочу вычислить триггерные функции с высокой степенью параллелизма (в блоках примерно по 1024), и я хотел бы воспользоваться хотя бы некоторыми преимуществами параллелизма, который есть в современных архитектурах.

Когда я компилирую блок

for(int i=0; i

, GCC не векторизует его и говорит

not vectorized: relevant stmt not supported: D.3068_39 = __builtin_sinf (D.3069_38);

Что для меня имеет смысл. Однако мне интересно, есть ли библиотека для параллельных триггерных вычислений.

С помощью простого ряда Тейлора до 11-го порядка, GCC будет векторизовать все циклы, и я получаю скорость в два раза быстрее, чем простой цикл sin (с точными побитовыми ответами или с серией 9-го порядка, только один бит для последних двух из 1600 значений, для a> 3-кратное ускорение). Я уверен, что кто-то уже сталкивался с подобной проблемой раньше, но когда я гуглию, я не нахожу упоминаний о каких-либо библиотеках и т.п. Что-то уже существует?
B. Если нет, совет по оптимизации параллельных триггерных функций?

РЕДАКТИРОВАТЬ: Я нашел следующую библиотеку под названием «SLEEF»: http://shibatch.sourceforge.net/ , которая описана в эта статья и использует инструкции SIMD для вычисления нескольких элементарных функций. Он использует специальный код SSE и AVX, но я не думаю, что будет сложно превратить его в стандартные циклы C.

8
задан Kevin Reid 19 March 2012 в 17:07
поделиться