草庐IT

C++并行排序

全部标签

c++ - C++11 theads 的最基本并行化失败

我尝试通过g++4.7使用C++11theading库。首先我有一个问题:是否预计下一个版本不需要手动链接pthread库?所以我的程序是:#include#include#includevoidf(inti){std::coutt;for(inti=0;i我编译:g++-4.7-Wall-Wextra-Winline-std=c++0x-pthread-O3helloworld.cpp-ohelloworld它返回:Helloworldfrom:Helloworldfrom:Helloworldfrom:322purevirtualmethodcalledterminatecalle

c++ - 从基于线程的流水线转移到基于任务的并行? (C++)

我正在研究如何将一些现有的C++代码从基于线程的并行性迁移到基于任务的并行性,以及这种迁移是否可取。这是我的场景:假设我有一些函数要在某个事件上执行。假设我有一台相机,每次到达一帧时我都想做一些繁重的处理并保存结果。一些处理是串行的,所以如果我只是在同一个线程中串行处理每一帧,我就无法获得完整的CPU使用率。假设帧每33毫秒到达一次,并且帧的处理延迟接近100毫秒。因此,在我当前的实现中,我创建了3个处理帧的线程,并以循环方式将每个新帧分配给其中一个工作线程。所以线程T0可能会处理帧F0、F3、F6等。现在我得到了充分的CPU使用率,我不必丢帧来保持实时速率。由于处理需要各种大的、临时

c++ - 我应该在 openMP 并行区域内使用 gnu 并行模式功能吗(for 循环,任务)

我有一个由openMP加速的程序,在并行区域内,函数如std::nth_element、std::sort、std::partition被调用。实际上,这些函数用于处理每个openmp-thread对应的数组部分。最近,我发现g++实现了上述函数的并行版本,所以我想知道我应该在#pragmaomptask中使用像__gnu_parallel::nth_element这样的函数还是#pragmaomp用于区域?如果我使用并行模式,线程总数是否会超过omp_set_num_threads()设置的限制并导致更差的加速? 最佳答案 简单(

c++ - OpenMP 并行代码与串行代码的输出不同

我不得不更改和扩展我的算法以进行一些信号分析(使用polyfilterbank技术)并且不能使用我的旧OpenMP代码,但是在新代码中结果并不像预期的那样(结果在开始位置与串行运行相比,该数组在某种程度上是不正确的[串行代码显示预期结果])。所以在第一个循环tFFTin中,我有一些FFT数据,我将其与窗口函数相乘。目标是一个线程为每个多相因子运行内部循环。为了避免锁定,我使用了reductionpragma(没有复杂的reduction是标准定义的,所以我使用我的那个,其中每个线程的omp_priv变量都用omp_orig[所以用tFFTin]初始化)。我使用有序pragma的原因是结

c++ - 从两端用 Min 和 Max 进行选择排序

我想知道为什么这段代码没有输出正确的数字序列(升序)。它已取自此Material-UpgradedSelectionSort.例如,当我插入像这样的数组值时-[8,5,6,1,4,7,3,0,2,9]它返回-[0,1,3,4,5,7,8,6,2,9].#includeusingnamespacestd;voidSwap(intArr[100],intTemp_min,intTemp_max){inttemp;temp=Arr[Temp_min];Arr[Temp_min]=Arr[Temp_max];Arr[Temp_max]=temp;}voidOptimizedSelectSort

c++ - 我的归并排序算法使用 OpenMP 时速度较慢,我怎样才能让它比序列化形式更快?

我正在研究并行编程并在排序算法上对其进行测试。我发现最简单的方法是使用OpenMP,因为它提供了一种实现线程的简单方法。我做了一个研究,发现其他人已经这样做了,然后我尝试了一些代码。但是,当我在Linux上使用perfstat-r10-d测试它时,我得到的时间比序列化代码更糟糕(在某些情况下,它是时间的两倍)。我尝试在数组中使用不同数量的元素,我使用的最大值是1.000.000个数字,如果我使用更多,我会收到错误。voidmerge(intaux[],intleft,intmiddle,intright){inttemp[middle-left+1],temp2[right-middl

C#中的并行处理、并行查询的方法你用对了吗?

Parallel.ForEachParallel.ForEach 是一个用于在集合上并行执行迭代操作的强大工具。它通过有效地利用多核处理器的能力来提高性能。Parallel.ForEach 不仅能够简化并行编程,而且它在执行简单循环时可以提供比传统迭代更好的性能。下面是一个简单的示例,演示了如何使用 Parallel.ForEach 并行处理一个整数列表:usingSystem;usingSystem.Collections.Generic;usingSystem.Threading.Tasks;classProgram{staticvoidMain(){Listnumbers=GetNumb

c++ - 对索引值数组进行排序、打包和重新映射,以尽量减少重叠

坐:概览:我有这样的东西:std::vectorvalues;std::vectorindexes;structRange{intfirstElement;//firstelementtobeusedinindexesarrayintnumElements;//numberofelementtobeusedfromindexedarrayintminIndex;/*minimumindexencounteredbetweenfirstElementandfirstElements+numElements*/intmaxIndex;/*maximumindexencounteredbet

携程酒店排序推荐广告高效可靠数据基座--填充引擎

作者简介yang,携程资深后端开发工程师,专注推荐系统架构、数据流批一体、系统稳定性、效率提升等领域;kevin,携程高级研发经理,专注以技术驱动解决推荐系统中产品业务上的共性问题,创新生产模式,重构生产力;莫秃,携程高级后端开发工程师,负责酒店机器学习平台的研发工作;一、背景与思考1.1背景携程酒店排序推荐广告工程(以下简称酒店推荐工程)在数据层面引入抽象化的统一数据协议UnifiedPB,解决了过去各场景各自维护,建立各自的数据流,网状开放式数据表,烟囱式迭代的问题,实现了全场景数据的标准化、规范化、统一化。那么,UnifiedPB具体是什么呢?它是基于protobuf构建的统一工程、策略

c++ - 如何使用 CUDA/Thrust 根据其中一个数组中的值对两个数组/vector 进行排序

这是一个关于编程的概念性问题。总而言之,我有两个数组/vector,我需要对一个数组/vector进行排序,其中的变化也在另一个数组中传播,因此如果我对arrayOne进行排序,对于排序中的每个交换-同样的事情也会发生在arrayTwo上。现在,我知道std::sort允许您定义一个比较函数(对于我假设的自定义对象),我正在考虑定义一个以同时交换arrayTwo。所以我想要的是-使用CUDA根据其中一个vector中的值对两个vector进行排序。这就是我的不确定性上升的地方,基本上我想使用Thrust库来进行排序。它是否支持自定义比较函数的定义?如果是这样,我仍然没有弄清楚如何在ar