Здравствуйте, alex_public, Вы писали:
_>Только вот фокус в том, что если мы заменим приведённый алгоритм на что-то вроде a[x]=b[x]+c[x]; при том же объёме данных, то как раз получим то самое ускорение в 6 раз от векторизации. ))) Хотя великим теоретикам микроархитектур такое наверное сложно предвидеть. )))
в этом случае расклад будет совсем другой. а главное для тебя, практика — больше шансов что тупые компиляторы смогут это сами правильно векторизовать
_>Кстати, gcc и clang сейчас поддерживают гораздо более удобную векторизацию через перегрузку операторов для __attribute__ ((vector_size(32))). Но здесь все эти варианты не пройдут — нужен чистый ассемблер.
есть всякие библиотеки, посмотри в частности у агнера фога. и зачем тебе чистый ассемблер? лучше чем с интринсиками тут даже я не напишу
_>Хотя в начале было бы ещё интересно посмотреть на результат icc для этого кода, вдруг он достаточно умный...
это запросто. у меня вообще одна программа (кажись тот самый crc32) давала наиболее быстрый x64 код с msvc2013, а x86 — с msvc2010
только непонятно что ты дальше с этим делать будешь? перейдёшь на этот компилятор? ручная векторизация по крайней мере означает что дальше у тебя всё будет работать независимо от компиляторов и их ключей