Arrays 阵列上的SSE/SIMD指令:处理边界
我有一个关于英特尔SSE指令的问题,但它是SIMD编程/并行的一般问题 例如,我们可以考虑A。如果内核的大小是3,我必须避免输入数组的第一个和最后一个元素,因为它们没有邻居(是的,我必须设置边界条件)。很容易将“特殊情况”与输入数组的其余元素分开处理(检查上面链接中的代码以查看不同的“if”语句) 例如,当使用8位数据的SSE时,我可以一次计算16个值(128位/8位=16个同时操作)。但是,我应该如何管理边界条件?在本例中,最后16个值(实际上是15个)存在问题,即使数组大小是16的倍数Arrays 阵列上的SSE/SIMD指令:处理边界,arrays,filtering,sse,simd,convolution,Arrays,Filtering,Sse,Simd,Convolution,我有一个关于英特尔SSE指令的问题,但它是SIMD编程/并行的一般问题 例如,我们可以考虑A。如果内核的大小是3,我必须避免输入数组的第一个和最后一个元素,因为它们没有邻居(是的,我必须设置边界条件)。很容易将“特殊情况”与输入数组的其余元素分开处理(检查上面链接中的代码以查看不同的“if”语句) 例如,当使用8位数据的SSE时,我可以一次计算16个值(128位/8位=16个同时操作)。但是,我应该如何管理边界条件?在本例中,最后16个值(实际上是15个)存在问题,即使数组大小是16的倍数 我不
我不确定我是否正确地解释了这个问题。问题是:在处理数组和SIMD指令时,我应该如何处理边界?我搜索相关的源代码,但我没有找到任何解释这一点的东西,甚至在英特尔的网站上。欢迎任何想法。您可以像手动展开循环一样处理它们。在主循环之前和/或之后插入清理代码。代码清理的if语句数量太多,性能下降太多,与传统编程相比,我没有发现使用SSE有什么真正的好处。我找不到正确的方法来处理这个问题。如果是这样的话,那么要么你做得不对,要么循环的行程计数太小,根本不值得优化。