, я хочу вычислить триггерные функции с высокой степенью параллелизма (в блоках примерно по 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.