草庐IT

并行性

全部标签

c++ - 并行写入数组

我有大量数据,我需要从不同线程的随机位置读取/写入这些数据。拥有一个mutex显然会降低性能。我的想法是有许多mutexes每个负责数组中的特定范围。这样,在写入之前,我可以根据要写入的数组中的索引锁定正确的mutex。理论上它可以减少比赛。但我想知道-也许有更好的方法? 最佳答案 这听起来很合理。不过,有很多事情需要考虑:您声明您的想法是拥有“许多互斥量,每个互斥量负责数组中的特定范围”。您可能应该考虑访问模式来决定如何将条目分配给互斥锁。如果线程倾向于在附近的条目上工作,您可以考虑使用不同的方案将条目分配给互斥量,例如,条目索引

c++ - C++中接口(interface)类和实现类的并行继承

我正在尝试以类似于Java接口(interface)的方式使用C++抽象基类。假设我们有以下只有纯虚函数的接口(interface)类:classShape{virtualdoublearea()=0;};classSquare:publicShape{virtualvoidsetLength(doublelength)=0;};classRectangle:publicSquare{virtualvoidsetWidth(doublewidth)=0;};我尝试通过以下方式实现Square和Rectangle:classSquareImpl:publicSquare{/*implem

c++ - openMP 没有并行线程

我的问题是我无法与openMP并行化。我的系统:Ubuntu11.4Intel(R)Core(TM)i5CPUM430@2.27GHz编译器:g++版本:4.5.2带有标志-fopenmp通过这段代码,我看到只有一个线程:intnthreads,tid,procs,maxt,inpar,dynamic,nested;//Startparallelregion#pragmaompparallelprivate(nthreads,tid){//Obtainthreadnumbertid=omp_get_thread_num();//Onlymasterthreaddoesthisif(ti

c++ - 并行计算右侧连续的零位(尾随) : an explanation?

考虑thislink来自BitTwiddlingHacks网站。为了计算尾随位,使用了以下算法:unsignedintv;//32-bitwordinputtocountzerobitsonrightunsignedintc=32;//cwillbethenumberofzerobitsontherightv&=-signed(v);/*THISLINE*/if(v)c--;if(v&0x0000FFFF)c-=16;if(v&0x00FF00FF)c-=8;if(v&0x0F0F0F0F)c-=4;if(v&0x33333333)c-=2;if(v&0x55555555)c-=1;谁

c++ - 如何使用自定义库的 boost 库进行性能测试

我需要对用C++编写的库进行性能测试。该库由几组结构组成。我已经对这些类进行了序列化测试,但不确定如何对这些类进行性能测试。下面是库中结构的示例structX{public:intp;doubleq;X();~X();}structY{floatm;doublen;Y();~Y();}structZ{public:std::map>Xtype;std::map>Ytype;inti;stringname;Z();~Z();}如果提供任何示例,那将是非常好的。 最佳答案 好的,所以我为类型添加了序列化(你为什么不加它?)structX

c++ - boost::asio lib 的那些 async_* 函数是否由操作系统并行执行

最近我在使用boost::asio库,并且对那些async_*函数有疑问。假设我连续调用多个boost::asio::async_write(),这些async_write()函数是否可能由底层操作系统并行执行,即使io_service是单线程运行的谢谢! 最佳答案 isitpossiblethattheseasync_write()functionsexecutedparallellybytheunderlyingoperatingsystem是的,他们是!有两种类型的异步操作,CPU绑定(bind)任务和IO绑定(bind)任务

c++ - 用零并行填充 std::vector

我要填写一个std::vector零与openmp。如何快速做到这一点?我听说循环遍历vector以将每个元素设置为零很慢,而且std::fill快多了。现在还是这样吗?Fastestwaytoreseteveryvalueofstd::vectorto0我必须手动划分std::vector吗?进入区域,使用#pragmaompfor遍历每个线程,然后使用std::fill在循环中? 最佳答案 您可以将vector拆分为每个线程要填充的blockstd::fill:#pragmaompparallel{autotid=omp_get

c++ - 遍历 2D 矩阵的可并行算法,同时了解 col/row-wise 邻域

我有一个相当大的N*N整数矩阵Matrix2D(假设内存充足),1,在每个行/列中,我需要记录元素的col/row索引,如果它的值不同于它是右/下邻居。2,我想找到一个可并行化的最优算法,最好是通过OMP。所以,最后我会有一些数据结构,比如,std::vector>RowWiseDiscontinuity(N);//N=#ofrowsstd::vector>ColWiseDiscontinuity(N);//N=#ofcols其中内部std::vector记录行/列索引。我把我的串行版本放在这里但是发现很难并行化OMP...有人可以提供一些想法如何使用omp实现遍历这个2D矩阵吗?代码

c++ - std::valarray 和并行化

这可能是个愚蠢的问题。关于this我读过的网站Thevalarrayspecificationallowsforlibrariestoimplementitwithseveralefficiencyoptimizations,suchasparallelizationofcertainoperations目前std::valarray在不同平台和编译器上的并行化情况如何?海湾合作委员会,VS2010/2013,当当?特别是C++11的标准线程支持。UPD:如果某些sompilers不支持此功能。最好的方法是什么:在多个线程中将某些功能应用于容器的元素?显然,天真的解决方案会很短,并且可

c++ - Microsoft 并行模式库 (PPL) 与 OpenMP

我想比较PPL和OpenMP的性能,但无法在网上找到详细的调查。我相信没有多少人对PPL有经验。我正在使用VisualStudio2010在Windows上开发我的软件,并且不想在短期内将其移植到其他地方。如果便携性不是问题,只关心性能,您如何看待这两种方法? 最佳答案 在MSDN上有一个greatcomparisonOpenMP和ConcRT的属性(PPL的核心):OpenMP模型特别适合高性能计算,在这种情况下,非常大的计算问题分布在单个计算机的处理资源中。在这种情况下,硬件环境已知,开发人员可以合理地期望在执行算法时独占计算资