Информация об изменениях

Сообщение Re[15]: За счет чего выстреливают языки? от 16.07.2015 11:05

Изменено 16.07.2015 12:10 BulatZiganshin

Здравствуйте, alex_public, Вы писали:

BZ>>вот-вот. ты хоть знаешь, сколько сложений за такт может выполнить этот хасвел? или думаешь, что раз avx2 то всё должно быть тупо в 8 раз быстрей?


_>Я бы сказал раз в 6. Т.е. само сложение именно что в 8 раз быстрее,


за такт хасвел может выполнить 4 скалярных сложения или 2 simd плюс два скалярных

_>но есть накладные расходы на загрузку и выгрузку данных.


за такт хасвел может выполнить 2 загрузки, причём любого размера — хоть 4 байта, хоть 32. плюс ещё есть куча ньюансов. в результате скорость загрузки ограничивает производительность скалярного, а не векторного кода, как ты думал. а точнее, её ограничивает то что за такт можно выполнить лишь 4 макрооперации (load, mul или load+mul), причём не более двух из них могут использовать загрузку. в векторном же как раз всё очень просто — лепим две load+mul каждый такт, store совершенно бесплатен, 1 такт уходит на cmp+blend
Re[15]: За счет чего выстреливают языки?
Здравствуйте, alex_public, Вы писали:

BZ>>вот-вот. ты хоть знаешь, сколько сложений за такт может выполнить этот хасвел? или думаешь, что раз avx2 то всё должно быть тупо в 8 раз быстрей?


_>Я бы сказал раз в 6. Т.е. само сложение именно что в 8 раз быстрее,


за такт хасвел может выполнить 4 скалярных сложения или 2 simd плюс два скалярных

_>но есть накладные расходы на загрузку и выгрузку данных.


за такт хасвел может выполнить 2 загрузки, причём любого размера — хоть 4 байта, хоть 32. плюс ещё есть куча ньюансов. в результате скорость загрузки ограничивает производительность скалярного, а не векторного кода, как ты думал. а точнее, её ограничивает то что за такт можно выполнить лишь 4 макрооперации (load, add или load+add), причём не более двух из них могут использовать загрузку. в векторном же как раз всё очень просто — лепим две load+add каждый такт, store совершенно бесплатен, 1 такт уходит на cmp+blend