Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 阵列上的SSE/SIMD指令:处理边界_Arrays_Filtering_Sse_Simd_Convolution - Fatal编程技术网

Arrays 阵列上的SSE/SIMD指令:处理边界

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的倍数 我不

我有一个关于英特尔SSE指令的问题,但它是SIMD编程/并行的一般问题

例如,我们可以考虑A。如果内核的大小是3,我必须避免输入数组的第一个和最后一个元素,因为它们没有邻居(是的,我必须设置边界条件)。很容易将“特殊情况”与输入数组的其余元素分开处理(检查上面链接中的代码以查看不同的“if”语句)

例如,当使用8位数据的SSE时,我可以一次计算16个值(128位/8位=16个同时操作)。但是,我应该如何管理边界条件?在本例中,最后16个值(实际上是15个)存在问题,即使数组大小是16的倍数


我不确定我是否正确地解释了这个问题。问题是:在处理数组和SIMD指令时,我应该如何处理边界?我搜索相关的源代码,但我没有找到任何解释这一点的东西,甚至在英特尔的网站上。欢迎任何想法。

您可以像手动展开循环一样处理它们。在主循环之前和/或之后插入清理代码。代码清理的if语句数量太多,性能下降太多,与传统编程相比,我没有发现使用SSE有什么真正的好处。我找不到正确的方法来处理这个问题。如果是这样的话,那么要么你做得不对,要么循环的行程计数太小,根本不值得优化。