我知道可以使用std :: set_intersection()执行两个排序的向量或集合之间的交集。是否可以使用openMP 4.0 SIMD执行相同的集合交集。我需要在我的代码中多次执行两个排序向量之间的集合交集,因此c ++ set_intersection()在这里成为瓶颈(由perf工具识别)。是否可以使用SIMD执行set_intersection以加速大向量之间的集合交集。如果是,那怎么办?
我正在使用gcc-4.9.2
我需要在两个排序的向量之间执行交集 - 其中第一个向量的大小最多为1,000,第二个向量的大小最多为10,000个元素。
如果无法使用openMP 4.0 SIMD执行set_intersection,那么是否可以使用Boost SIMD进行集合交集。如果是,那么如何。
提前多多感谢
答案 0 :(得分:3)
这是我放在一起的一些OpenMP代码,用于查找两个有序集合的交集。合并结果时可以在没有关键部分的情况下执行此操作(以及并行排序合并它们),但我没有在此处执行此操作。
也可以使用SIMD(高效)进行此操作。我会明确地使用内部或SIMD矢量类。
setupui.dll