草庐IT

intel-mpi

全部标签

c++ - MPI_Recv - 如何确定计数?

假设我有一个包含2个进程的MPI程序,等级0和等级1。inti[20],j[20],temp,size;在排名为0的进程中,我有for(temp=0;temp假设排名为1的进程执行//Atthispoint,sizeisdeclared,butnotassignedanyvalue.MPI_Recv(j,size,MPI_INT,0,1,MPI_COMM_WORLD):cout我的问题是,在上面的语句中,是否需要声明“size”?或者MPI_Recv是否以某种方式“知道”它正在接收15个元素,并自动设置size=15?如果未定义大小,代码会发生什么情况?基本上,我的问题是,我向具有不同

c++ - 共享内存线程和 MPI 之间的主要区别?

虽然我一直在研究pthreads、OpenMP、intelTBB和一般线程,但我仍然不明白像OpenMP这样的消息传递接口(interface)实现与经典线程库之间的主要区别是什么,目前还不清楚对我来说。假设为线程池编写所有样板代码对我来说不是问题,而且我使用的是C++,这两种技术之间的区别归结为......?我还对在网络上使用线程操作同时将任务分配给所有连接的机器感兴趣。现在我也没有考虑OpenMP/OpenMPI支持的平台数量方面的限制。因为我想了解这两个概念是如何工作的。 最佳答案 “经典”线程共享线程之间的所有内存。这是相当

c++ - 使用可变参数模板重载函数模板 : Intel c++ compiler version 18 produces different result from other compilers. intel 错了吗?

考虑以下代码片段:templateclassA,typename...Ts>inta(Aarg){return1;//Overload#1}templateinta(Aarg){return2;//Overload#2}templatestructS{};intmain(){returna(S());}在使用模板类的实例调用函数a时,我希望编译器选择更特殊的函数重载#1。根据compilerexplorer、clang、gcc和17版之前的英特尔实际上会选择重载#1。相反,后来的英特尔编译器版本(18和19)选择重载#2。是代码定义不正确还是最新的英特尔编译器版本有误?

c++ - gcc 是否使用 Intel 的 SSE 4.2 指令进行文本处理(如果可用)?

我读了hereIntel引入了SSE4.2指令来加速字符串处理。文章引述:TheSSE4.2instructionset,firstimplementedinIntel'sCorei7,providesstringandtextprocessinginstructions(STTNI)thatutilizeSIMDoperationsforprocessingcharacterdata.Thoughoriginallyconceivedforacceleratingstring,text,andXMLprocessing,thepowerfulnewcapabilitiesofthes

c++ - 继承显式构造函数 (Intel C++)

英特尔C++编译器(版本16.0.3.207Build20160415)似乎在使用using继承基类的构造函数时删除了explicit说明符。这是错误吗?structB{explicitB(int){}};structD:B{usingB::B;};Bb=1;//NotOK,fineDd=1;//NotOKwithMicrosoftC++andGCC,butOKwithIntelC++ 最佳答案 我认为标准中的适当措辞如下(n4296,12.9继承构造函数):...Theconstructorcharacteristicsofaco

c++ - 这个时钟滴答适用于 Intel i3 吗?

我采用在线方式衡量SSE绩效。#ifndef__TIMER_H__#define__TIMER_H__#pragmawarning(push)#pragmawarning(disable:4035)//disablenoreturnvaluewarning__forceinlineunsignedintGetPentiumTimer(){__asm{xoreax,eax//VCwon'trealizethateaxismodifiedw/outthis//instructiontomodifytheval.//Problemshowsupinreleasemodebuilds_emit

c++ - 打开 MPI "Hello, World!"未编译

这是一个简单的MPI“Hello,World!”程序。#include#includeintmain(intargc,char**argv){intsize,rank;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&size);MPI_Comm_rank(MPI_COMM_WORLD,&rank);printf("SIZE=%dRANK=%d\n",size,rank);MPI_Finalize();return(0);}但是,它似乎没有编译:UndefinedfirstreferencedsymbolinfileMPI::Dat

c++ - std::sort 与 intel ipp 排序性能对比。我究竟做错了什么?

我正在尝试比较std::sort(使用结构的std::vector)与intelipp排序的性能。我正在IntelXeon处理器modelname:Intel(R)Xeon(R)CPUX5670@2.93GHz上运行这个测试我正在对长度为20000个元素的vector进行排序并排序200次。我已经尝试了2个不同的ipp排序例程即。ippsSortDescend_64f_I和ippsSortRadixDescend_64f_I。在所有情况下,ipp排序至少比std::sort慢5到10倍。我原以为ipp排序对于较小的数组可能会更慢,但除此之外它通常应该比std::sort快。我在这里错过

c++ - 我可以在 MPI 并行代码中抛出异常吗?

这些是我在为应该使用MPI(在C++中)并行运行的算法设计错误处理时遇到的一些一般性问题:异常是否在并行执行的代码中起作用?行为是否已定义?它们是如何工作的?不同的实现方式是否有所不同?这是好的做法-还是我应该使用返回码? 最佳答案 在理想情况下,您可以使用它们来完成您的要求。我所说的“理想世界”是指您可以选择MPI实现并能够自己管理它(而不是说服集群所有者为您重新配置它)。异常的最小配置将包括:--with-exceptions标志,可能还有一些。我最常使用LAM,默认情况下禁用异常。我相信这也是其他实现的默认设置。它们的工作方式

c++ - MPI_Scatter 和 MPI_Bcast 之间的区别

谁能解释一下MPI_Scatter和MPI_Bcast之间的区别?(除此之外任何进程都可以使用MPI_Scatter进行广播并且只有root可以使用MPI_Bcast)在哪些情况下我应该使用第一个而不是另一个? 最佳答案 MPI_Bcast()向所有人发送相同的数据,而MPI_Scatter()向每个进程发送输入数组的一部分。MPI_Bcast()与MPI_Reduce()相反,MPI_Scatter()与MPI_Gather()相反。像thisone这样的小计划是不言自明的。而且MPI_Scatter()和MPI_Bcast()都