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