为何p1007r0中的std::assume_aligned可消除epilogue的需求?
代码向量化的工作机制与
std::assume_aligned的疑问 我对代码向量化的工作机制大致是这么理解的:
- 对于数组中首个128(或256等SIMD指令要求的)倍数地址之前的数据,会进行逐元素的慢速处理,这部分我们称之为prologue。
- 对于首个128倍数地址与最后一个128倍数地址之间的数组数据,会直接使用SIMD指令来处理。
- 对于最后一个128倍数地址到数组末尾之间的数据,同样会进行逐元素的慢速处理,这部分我们称之为epilogue。
我能理解std::assume_aligned为什么有助于消除prologue,但搞不清楚它为什么能让编译器消除epilogue。
提案原文里是这么说的:
若我们能让编译器知晓这一属性,它便可跳过循环的prologue和epilogue
内容的提问来源于stack exchange,提问作者NoSenseEtAl
相关产品推荐
相关产品推荐

