使用 SIMD 指令进行平滑样条
我在代码中使用这种类型的样条,我想知道该算法是否可以受益来自SIMD指令的使用。 (ARM 上的 NEON)使用的代码是以下源代码的 C 翻译(Fortran 语言):
- http://pages.cs.wisc.edu/~deboor/pgs/chol1d.f(最消耗CPU的程序)
- http://pages.cs.wisc.edu/~deboor/pgs/setupq.f (设置过程)
- http://pages.cs.wisc.edu/~deboor/pgs/smooth.f(调用上述过程的主函数)
您能否根据您的经验判断,如果这代码有机会通过使用 SIMD 指令进行优化吗?
是否有将代码从“正常”代码转换为使用 SIMD 指令的代码的指南?
谢谢
I'm using this type of spline in my code and I'm wondering if the algorithm can benefit from the use of SIMD instructions. (NEON on ARM) The code used is a C translation of the following sources (in Fortran):
- http://pages.cs.wisc.edu/~deboor/pgs/chol1d.f (the most CPU consuming procedure)
- http://pages.cs.wisc.edu/~deboor/pgs/setupq.f (the setup procedure)
- http://pages.cs.wisc.edu/~deboor/pgs/smooth.f (the main function that calls the above procedures)
Can you tell, from your experience, if this code has a chance of being optimized by using SIMD instructions?
Is there a guideline for converting code from 'normal' code to code using SIMD instructions?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
看起来循环中存在串行依赖性,因此,如果您有多个可以并行操作的数据集(例如 4 个),那么可能容易使用 SIMD 进行矢量化的唯一方法。这些数据集需要具有相同的大小。
It looks like there are serial dependencies in the loops, so probably the only way that this will lend itself easily to vectorization with SIMD is if you have multiple data sets (e.g. 4) which you can operate on in parallel. These data sets would need to be the same size.