我有一个与英特尔SSE指令有关的问题,但它是SIMD编程/并行的一般性。
例如,我们可以考虑1D filter/convolution。如果内核的大小是3,我必须避免输入数组的第一个和最后一个元素,因为它们没有邻居(是的,我必须设置边界条件)。很容易将输入数组的其余元素分开处理'特殊情况'(检查上面链接中的代码以查看不同的'if'语句)。
例如,当使用具有8位数据的SSE时,我可以一次计算16个值(128位/ 8位= 16个同时操作)。但是,我应该如何管理边界条件?在这种情况下,我遇到了最后16个值(实际上是15个)的问题,即使数组大小是16的倍数。
我不确定我是否正确解释了这个问题。关键是:在处理数组和SIMD指令时,我应该如何处理边界?我搜索相关的源代码,但我找不到任何解释这一点的内容,即使在英特尔的网站上也是如此。任何想法都会受到欢迎。