Библиотека C / C ++ для отложенного вычисления выражений SIMD / SSE - PullRequest
4 голосов
/ 10 августа 2011

Библиотеки, такие как intel- MKL или amd- ACML, предоставляют более простой интерфейс для SIMD-операций над векторами, но я хочу объединить несколько функций. Существуют ли легкодоступные библиотеки, в которых я могу зарегистрировать дерево разбора для выражения типа

log( tanh(x) + exp(x) )

и затем оценивать его на всех членах массива? Чего я хочу избежать, так это создавать временные массивы tanh(x), exp(x) и tanh(x) + exp(x), вызывая функции mkl или acml для tanh(), exp() и +.

Я могу развернуть цикл вручную и напрямую использовать инструкции sse, но мне было интересно, есть ли библиотеки C ++, которые делают это для вас, т.е.

1. Handles SIMD/SSE functions  
2. Allows building of parse trees out of SIMD/SSE functions.  

Я очень новичок и никогда раньше не использовал SSE или MKL / ACML, просто выходил на новую территорию.

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Это может не делать точно , что вы хотите, но я советую вам взглянуть на macstl .Это реализация SIMD valarray, которая использует шаблонное метапрограммирование и может объединять выражения в один цикл.Вы можете использовать это как есть или, возможно, в качестве основы для чего-то более близкого к тому, что вам нужно.

1 голос
/ 10 августа 2011

Посмотрите на Intel ABB .Он использует подход своевременной компиляции IIRC.Он может использовать векторные инструкции и многопоточность в зависимости от размеров векторов, с которыми вы работаете.

...