草庐IT

并行机

全部标签

c++ - 当终止条件取决于来自不同部分的更新时,为什么 OMP 并行部分中的 while 循环无法终止

下面的C++代码是合法的,还是我的编译器有问题?使用将代码编译到共享库中gcc版本4.4.620110731(红帽4.4.6-3)(海湾合作委员会)和openMP,然后通过R2.15.2调用。intit=0;#pragmaompparallelsectionsshared(it){#pragmaompsection{std::cout我获得了以下输出(对于来自2个线程的交织输出表示歉意,但我认为它是可以解释的):EnteringsectionAIterationEnteringsectionBwithit=00Iteration1Iteration2Iteration3Iteratio

c++ - 超线程如何影响并行化?

我在超线程CPU上使用OpenMP代码。如果其他条件都相同,在非超线程CPU上性能会如何变化?我注意到处理器利用率为100%,无论我运行多少线程,但改变线程数确实可以提高性能。怎么会这样?非INTEL多线程CPU的情况是否相同? 最佳答案 超线程带来的性能提升(如果有的话)很难预测。超线程意味着如果一个线程由于(几乎)任何原因而停止,CPU将有一个来自另一个线程的指令池来(尝试)执行。即使没有真正的停顿,如果两个线程被安排使用不同的执行资源,来自两个线程的指令也可以在同一个内核上同时执行。因此,例如,如果代码严重依赖于主内存延迟(例

c++ - 虚幻引擎4并行计算

我目前正在研究虚幻引擎在计算密集型项目中的可用性,谷歌并没有提供太大帮助。我需要在游戏循环的后台为当前使用OpenMP实现的项目做一些繁重的计算。流体模拟。Windows上的虚幻引擎使用visualstudio进行编译和构建,因此应该支持visualstudio编译器所具有的功能,但我不清楚您是否可以使用OpenMP的正确设置进行UE编译。或者,我可以轻松地使用英特尔的线程构建blockTBB来完成这项工作,这显然已经在UE中使用了……尽管可能只是内存分配器部分?总的来说,我想我的问题是对使用UE的跨平台高度并行计算有什么支持。如果您需要在所有可用内核上运行大量相同的计算,您如何在UE

c++ - 并行循环中的惰性 vector 访问

在性能关键的并行代码中,我有一个vector,其元素是:计算成本很高,结果是确定性的(给定位置的元素值将仅取决于位置)随机访问(通常访问次数大于或远大于vector的大小)集群访问(许多访问请求相同的值)vector由不同的线程共享(竞争条件?)为避免堆碎片整理,永远不要重新创建对象,而是尽可能重置和回收放置在vector中的值将由多态对象提供目前,我预先计算了vector的所有可能值,因此竞争条件应该不是问题。为了提高性能,我正在考虑创建一个惰性vector,以便代码仅在请求vector元素时才执行计算。在并行区域中,可能会发生多个线程同时请求并可能计算同一元素的情况。我如何处理这种

c++ - 哪些并行计算 API 可以很好地利用套接字?

我的程序使用套接字,我可以使用哪些并行计算API来帮助我,而不用强制我从套接字转到其他任何东西?当我们在具有特殊的非套接字基础设施系统的集群上时,此API会模拟套接字之类的东西但使用该基础设施(因此程序执行速度比套接字快得多,但仍使用套接字API)。 最佳答案 你熟悉MessagePassingInterface(MPI)吗??这通常是在并行计算机上扩展代码的方法。正如您所指出的,它与大多数套接字API不兼容,但扩展的好处几乎肯定会超过转换代码的成本。 关于c++-哪些并行计算API可以

如何使用多个输入文件并在Python中进行并行处理?

我有30个CSV文件。我想在熊猫中给予它作为循环的输入吗?每个文件都有诸如Fileaa,Fileab,Fileac,Filead的名称,...我有多个输入文件,我想接收一个输出。通常我使用read_csv,但是由于内存错误,“read_csv”不起作用。f="./file.csv"df=pd.read_csv(f,sep="/",header=0,dtype=str)因此,我想尝试在Python2.7中并行处理看答案您可能想看看dask.DaskDocs显示演示关于如何在许多CSV文件中读取并输出单个DASK数据框:importdask.dataframeasdddf=dd.read_csv(

C#定时器和网络并行呼叫

我想有一个Timer运行5秒钟,同时启动网络请求到后端。然后,我想等待计时器和请求在执行措施之前完成的请求。privateasyncvoiddoWork(){awaitTask.Delay(5000);awaitdoPostRequest();doSomethingElse();}类似于上述代码,除了使这两个任务并行执行。我怎样才能做到这一点?看答案您可以使用Task.WhenAll为了那个原因:privateasyncvoiddoWork(){awaitTask.WhenAll(Task.Delay(5000),doPostRequest());doSomethingElse();}也有Ta

c++ - 如何使用 TBB 并行化 std::partition

有没有人有任何使用TBB有效并行化std::partition的技巧?这已经完成了吗?这是我的想法:如果数组很小,std::partitionit(serial)andreturn否则,使用自定义迭代器将数组视为2个交错数组(在缓存大小的block中交错)为每对迭代器启动一个并行分区任务(递归到步骤1)在两个分区/中间指针之间交换元素*返回合并后的分区/中间指针*我希望在一般情况下,与数组的长度相比,或者与将数组分成连续block时所需的交换相比,这个区域会很小。尝试之前有什么想法吗? 最佳答案 我会将其视为平行样本排序的退化情况。

当用户与C#并行使用Excel打开CSV文件时,如何读写CSV文件?

这是我在Stackoverflow上问的第一个问题,非常令人兴奋。很抱歉我的语法和其他类型的错误,如果您纠正它们,我将不胜感激。我想编写一个程序,该程序首先存在于特定文件夹中,将其存储在列表变量中,添加一些新行并将其写入同一文件中。此过程将在一段时间内连续重复。当文件由程序读取和编写时,如果使用记事本打开,则不会出现错误,并且程序可以并行访问该文件。但是,如果它使用OfficeExcel打开,则程序会出现错误,即“由于另一个过程使用该文件,因此拒绝了文件访问。”。我想问你:1)是否可以优先考虑该程序,因此程序仍然可以访问该文件,但用户无法访问该文件?还是程序和用户都可以访问文件?2)如果解决方

c++ - 如何在 openmp 中并行执行 while 和 while 循环?

我正在尝试学习使用OpenMP进行并行编程,并且我有兴趣将以下dowhile循环与其中的多个while循环并行化:do{while(left0&&data[right]>=pivot)right--;/*swapelements*/if(left我实际上还没有弄清楚如何并行化while和dowhile循环,找不到任何资源专门描述如何并行化while和dowhile循环。我找到了for循环的说明,但我无法从中对while和dowhile循环做出任何假设。那么,您能否描述一下我如何并行化我在此处提供的这些循环?编辑我已将dowhile循环转换为以下仅使用for循环的代码。for(i=1;i