putanik писал(а):у современных процессоров длинный pipeline, 4-8 parallel MAC units, multiple cores, very complicated memory access. Data must be properly aligned. You need to re-write your source algorithm to make sure the pipeline is fully load-able, the parallelism is exploited, etc. The gain may be 10..100x. To make full use of modern processors, you need assembly or IPP-like libs. Otherwise ... what you are comparing is not clear, скажем так.
что больше всего смешит в примере, это использование double. Double, Karl! есть очень мало задач в которых исходные данные поступают с такой точностью. для остальных использование double - маркер непрофессионализма. дальше использование тиме() вместо performance counter-ов, ни к селу ни к городу засунутые прагмы, итд и тп.
Вообще-то мой титул на последней работе был Senior Scienist (Intel), и занимался я непосредственно разработкой алгоритмов, а не руководством толпой. Но не в этом суть.
Респектую!
У меня сейчас вопросов конкретных нету, но думаю подтянутся, если не против я бы потом поспрашал.
Что касается скорострельность и роста до x10-x100. Я в это не верил, но когда начал играться с оптимизацией в основном доступ к памяти и получил прирост x40 то немного офигел. Думаю что когда прикручу работу с упакованными числами то ещё раза в 4 подниму. Хорошо бы конечно поиметь доступ к avx2, там 256 разрядные регистры , но пока не знаю как сделать.
По текущему состоянию я имею пару гигафлопов на одном ядре, думаю получить в районе 30-40 когда задействую все ресурсы. Не лапак конечно но все равно не плохо.