Для некоторых очень грубых чисел: я слышал, что некоторые люди на ompf.org утверждают, что 10-кратное увеличение скорости для некоторых ручных оптимизированных процедур трассировки лучей. У меня также были хорошие ускорения. По моим оценкам, в зависимости от проблемы я получал где-то между 2x и 6x, и у многих из них было несколько ненужных магазинов и загрузок. Если в вашем коде имеется большое количество ветвлений, забудьте об этом, но для задач, которые, естественно, параллельны данным, вы можете справиться довольно хорошо.
Однако я должен добавить, что ваши алгоритмы должны быть рассчитаны на параллельное выполнение данных.
Это означает, что если у вас есть общая математическая библиотека, как вы упомянули, то для этого нужно использовать упакованные векторы, а не отдельные векторы, или вы просто будете тратить свое время.
например. Что-то вроде
namespace SIMD {
class PackedVec4d
{
__m128 x;
__m128 y;
__m128 z;
__m128 w;
//...
};
}
Большинство проблем , где производительность имеет значение , можно распараллелить, поскольку вы, скорее всего, будете работать с большим набором данных. Для меня ваша проблема звучит как случай преждевременной оптимизации.