草庐IT

并行性

全部标签

c++ - 我应该将哪个C++库用于利用第三方应用程序的大型并行计算数字处理项目

简介我想在一个新的编程项目上寻求很多建议,我将自己开始。我将非常精确地完成我想完成的工作以及我的基本要求。因此,这将是一个漫长的问题。请多多包涵。我将把问题分为五个部分:实际问题模拟问题要求和首选项附加信息建议请求列表1.实际问题摩天大楼和大型桥梁承受着动态风荷载。这意味着,如果设计不当,它们可能会因风振而折叠(这实际上发生在1940年:http://www.youtube.com/watch?v=3mclp9QmCGs)。为了正确设计这种结构,需要有效的数字运算软件来进行分析和模拟。2.模拟问题存在众多能够模拟流体流动或结构力学的软件。许多已经开发了30多年,并且它们都是成熟可靠的技

c++ - 与 C++/OpenMP 的所有相对所有比较的对称性并行化嵌套 for 循环

我有一个比较所有元素的简单问题。比较本身是对称的,因此不必进行两次。以下代码示例通过显示所访问元素的索引显示了我正在寻找的内容:intn=5;for(inti=0;i输出是:01020304121314232434所以每个元素相互比较一次。当我想并行化这段代码时,我遇到了一个问题,首先我必须坚持动态调度,因为每次迭代的计算时间确实变化很大而且我不能使用崩溃,因为嵌套迭代是索引-依赖于外循环。对外部循环使用#pragmaompparallelforschedule(dynamic,3)可能会导致在最后执行单核,而对内部循环使用它可能会在每次迭代中导致此类执行外循环。是否有更复杂的方法来执

c++ - STL 并行搜索算法的保证

STL中搜索算法的并行版本(例如std::find、std::find_if)是否保证将迭代器返回到符合条件的范围内的第一个元素?文档没有明确提及是否是这种情况-在“C++并发操作”中有一个具体不返回第一个元素的实现。 最佳答案 标准库算法的行为*例如std::find,std::find_if在C++标准中有明确规定。从C++14开始,并行算法的指定行为没有异常(exception)。这意味着假设的并行实现仍然需要遵守这些要求才能合规。*从评论来看,OP指的是C++标准库,而不是标准模板库。我做出区分是因为STL可能会定义一组不同

c++ - 熵和并行随机数生成器播种

我有一个循环,我在其中向某些点添加噪声;这些后来被用作一些统计测试的基础。涉及的数据集非常大,所以我想使用openMP将其并行化以加快处理速度。当我想要多个PRNG时,问题就出现了。我有自己的基于NR模方法(我认为是rand4)的PRNG类,但我不确定如何正确播种PRNG以确保适当的熵通常我会做这样的事情prng.initTimer();但是如果我有一组prng,每个工作线程一个,那么我不能简单地在每个实例上调用initTimer——计时器可能不会改变,计时器关闭可能会引入相关性。我需要防止自然相关性,而不是恶意攻击者(这是实验数据),所以我需要有一种安全的方法来为rng数组做种。我想

c++ - 避免并行递归异步算法中的递归模板实例化溢出

这个问题通过一个简化的例子更容易解释(因为我的真实情况远非“最小”):给定...templatevoidpost_in_thread_pool(T&&f)...函数模板,我想创建一个具有树状递归结构的并行异步算法。我将使用std::count_if编写以下结构的示例作为占位符。我将要使用的策略如下:如果我检查的范围长度小于64,我将回到顺序std::count_if功能。(0)如果它大于或等于64,我将在线程池中生成一个作业,该作业在范围的左半部分递归,并在当前线程上计算范围的右半部分。(1)我将使用原子共享int“等待”计算两半。(2)我将使用原子共享int累积部分结果。(3)简化代

c++ - 没有 ExecutionPolicy 的 std::transform 或 std::generate 可以并行吗?

在C++17中引入了并行标准算法(使用ExecutionPolicy参数重载),其中定义了执行顺序、交错和并行化的严格规则,例如([algorithm.parallel.exec/3]):Theinvocationsofelementaccessfunctionsinparallelalgorithmsinvokedwithanexecutionpolicyobjectoftypeexecution::sequenced_policyalloccurinthecallingthreadofexecution.[Note:Theinvocationsarenotinterleaved;s

c++ - CUDA 并行化嵌套 for 循环

我是CUDA新手。我正在尝试并行化以下代码。现在它位于内核上但根本不使用线程,因此速度很慢。我试着用这个answer但到目前为止无济于事。内核应该生成前n个质数,将它们放入device_primes数组,稍后从主机访问该数组。代码是正确的,在串行版本中运行良好,但我需要加快速度,也许使用共享内存。//CUDAkernelcode__global__voidgeneratePrimes(int*device_primes,intn){//inti=blockIdx.x*blockDim.x+threadIdx.x;//intj=blockIdx.y*blockDim.y+threadId

c++ - 在 Windows 上创建并行离屏 OpenGL 上下文

我正在尝试设置并行多GPU离屏渲染上下文。我使用“OpenGLInsights”一书第27章“NVIDIAQuadro上的多GPU渲染”。我还研究了wglCreateAffinityDCNVdocs但仍然无法确定。我的机器有2个NVidiaQuadro4000卡(无SLI)。在Windows764位上运行。我的工作流程是这样的:使用GLFW创建默认窗口上下文。映射GPU设备。销毁默认的GLFW上下文。为每个设备创建新的GL上下文(目前只尝试一个)为每个上下文设置boost线程并使其在该线程中处于当前状态。分别在每个线程上运行渲染程序。(不共享资源)一切都是在没有错误的情况下创建和运行的

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将有一个来自另一个线程的指令池来(尝试)执行。即使没有真正的停顿,如果两个线程被安排使用不同的执行资源,来自两个线程的指令也可以在同一个内核上同时执行。因此,例如,如果代码严重依赖于主内存延迟(例