Здравствуйте, BulatZiganshin, Вы писали:
_>>Я бы сказал раз в 6. Т.е. само сложение именно что в 8 раз быстрее, BZ>за такт хасвел может выполнить 4 скалярных сложения или 2 simd плюс два скалярных
И причём тут это к нашей теме? )
_>>но есть накладные расходы на загрузку и выгрузку данных. BZ>за такт хасвел может выполнить 2 загрузки, причём любого размера — хоть 4 байта, хоть 32. плюс ещё есть куча ньюансов. в результате скорость загрузки ограничивает производительность скалярного, а не векторного кода, как ты думал. а точнее, её ограничивает то что за такт можно выполнить лишь 4 макрооперации (load, mul или load+mul), причём не более двух из них могут использовать загрузку. в векторном же как раз всё очень просто — лепим две load+mul каждый такт, store совершенно бесплатен, 1 такт уходит на cmp+blend
Очаровательно. ) Куча информации из документации и при этом ровно ноль информации по делу. Я вот так даже и не понял, ты собственно согласен с моим предположением, что векторизацию в том примере можно провести эффективнее, чем это делает gcc или не согласен? ) Если согласен, то к чему ты вообще всё это написал? ) А если не согласен, то где какие-нибудь аргументы? )