a3m*_*ord 14 c algorithm comparison compare vectorization
我正在使用的算法花费了大部分时间将一个数组与一行矩阵进行比较.如果任何第i个元素相同,则算法调用过程A,如果没有元素相等,则调用过程B. 例如:
[1, 4, 10, 3, 5]并且[5, 3, 0, 3, 0]调用A()因为对于第4个位置,两个数组中的值都是3.
[1, 4, 10, 3, 5]并且[5, 3, 0, 1, 0]调用B()因为对于相同的位置,值永远不会相同.
注意(1)数组和矩阵行总是具有相同的大小N,以及(2)算法A() 在至少一个值匹配时调用.
在C中执行此操作的最简单但非常天真的方法是:
for(int i=0; i<N; i++)
if( A[i] == B[i] ){
flag = 1;
break;
}
Run Code Online (Sandbox Code Playgroud)
这仍然非常低效.在最坏的情况下,我将进行N次比较.这里真正的问题是该算法可以进行数万亿次这些比较.
N(矩阵中数组/行的大小)从100到1000不等.我想加快这个程序.我看了矢量化,发现我可以使用cmpeq_pd.但是,矢量化仍然有限,因为我的所有条目都是 longs.有没有人有想法?我可以申请面具吗?
更多信息/背景:
mfr*_*fro -3
如果您使用的是 gcc 并且使用的是 x86 平台,那么您的代码可能会受益于使用memcmp()而不是“自行开发的”for循环。memcmp()(分别是它的内置对应部分)做了一些非常聪明的优化。