草庐IT

并行性

全部标签

c++ - 使用 std::async 控制并行度

有没有办法显式设置/限制std::async和相关类使用的并行度(=独立线程数)?Perusingthethreadsupportlibrary没有发现任何有希望的东西。据我所知,std::async实现(通常?)在内部使用线程池。是否有标准化的API来控制它?对于背景:我在一个设置(共享集群)中,我必须手动限制使用的内核数量。如果我没有做到这一点,负载共享调度程序就会出现问题,我就会受到惩罚。特别是,std::thread::hardware_concurrency()没有任何有用的信息,因为物理内核的数量与我所受的约束无关。这是一段相关的代码(在具有并行性TS的C++17中,可能会

c++ - 并行缩减

我已经阅读了MarkHarris的文章OptimizingParallelReductioninCUDA,我发现它确实非常有用,但有时我仍然无法理解一两个概念。它写在第18页://Firstaddduringload//eachthreadloadsoneelementfromglobaltosharedmemunsignedinttid=threadIdx.x;unsignedinti=blockIdx.x*blockDim.x+threadIdx.x;sdata[tid]=g_idata[i];__syncthreads();优化代码:2次加载和第一次添加减少://performf

c++ - 如何有效地并行化分而治之算法?

这几天我一直在刷新排序算法的内存,遇到了找不到最佳解决方案的情况。我写了一个快速排序的基本实现,我想通过并行执行来提高它的性能。我得到的是:templatevoidquicksort(IteratorTypebegin,IteratorTypeend){if(distance(begin,end)>1){constIteratorTypepivot=partition(begin,end);if(distance(begin,end)>10000){threadt1([&begin,&pivot](){quicksort(begin,pivot);});threadt2([&pivot

c++ - 指令级并行探索

我只是想知道是否有任何有用的工具可以让我在某些算法中利用指令级并行。更具体地说,我有一个子集来自多媒体领域的算法,我想知道利用ILP的最佳方法是什么在这个算法中。所有这些算法都是用C语言实现的,因此理想情况下,我将这些算法作为某种工具的输入,它会告诉我哪些指令可以并行执行。非常感谢任何积分!罗伯特 最佳答案 问题在于考虑到有多少种不同的处理器类型,决定一条指令是否将被并行执行是相当困难的。充分了解您的objective-cPU体系结构将为您开展此类工作提供良好的起点。没有任何软件能够击败拥有正确知识的人类思维。一般来说,虽然编译器和

c++ - 如何有效地并行设置位 vector 的位?

考虑N的位vector其中的位(N很大)和M的数组数字(M中等,通常比N小得多),每个都在0..N-1范围内指示vector的哪一位必须设置为1.后一个数组未排序。位vector只是一个整数数组,特别是__m256i,其中每个__m256i被打包成256位结构体。如何在多个线程中有效地拆分这项工作?首选语言是C++(MSVC++2017工具集v141),汇编也很棒。首选CPU是x86_64(内在没问题)。如果有任何好处,则需要AVX2。 最佳答案 假设您想将这项工作分配给T线程。这是一个非常有趣的问题,因为它不能通过分区简单地并行化

c++ - 在 64 位机器上,我可以安全地并行操作 64 位四字的各个字节吗?

背景我正在对图像中的行和列进行并行操作。我的图像是8位或16位像素,我在64位机器上。当我对列进行并行操作时,两个相邻的列可能共享相同的32位int或64位long。基本上,我想知道我是否可以安全地并行操作同一四字的各个字节。最小测试我写了一个最小的测试函数,但我无法使它失败。对于64位long中的每个字节,我在p阶的有限域中同时执行连续乘法。我知道Fermat'slittletheorema^(p-1)=1modp当p为质数时。我为我的8个线程中的每一个改变值a和p,并且我执行k*(p-1)乘法一个。当线程完成时,每个字节都应该为1。事实上,我的测试用例通过了。每次运行时,我都会得到

c++ - 为什么 D 中的并行代码如此糟糕?

这是我在C++和D中比较并行性的一个实验。我使用相同的设计在两种语言中实现了一种算法(一种用于网络社区检测的并行标签传播方案):并行迭代器获取句柄函数(通常闭包)并将其应用于图中的每个节点。这是D中的迭代器,使用std.parallelism中的taskPool实现:/***Iterateinparalleloverallnodesofthegraphandcallhandler(lambdaclosure).*/voidparallelForNodes(F)(Fhandle){foreach(nodev;taskPool.parallel(std.range.iota(z))){//

c++ - for 循环/for_each 的每次迭代都可以并行完成吗? (C++11)

我正在迭代一个结构vector并单独处理每个结构。它看起来像这样:for_each(begin(data),end(data),DoTask);//assume"data"isstd::vector//assumeDoTaskisafunctionthattakesaDataTbyreference代码非常慢,因为DoTask连接到特定网站并分析HTML。加快速度的最佳方法是什么?我的目标是同时分析多个DataT。我对线程很陌生,但是std::async和std::future看起来很有前途。 最佳答案 你可以这样做for(T&d:

c++ - 并行前缀和 - 最快的实现

我想用C++实现并行前缀和算法。我的程序应该采用输入数组x[1....N],并且它应该在数组y[N]中显示输出。(注意N的最大值为1000。)到目前为止,我浏览了许多研究论文,甚至浏览了维基百科中的算法。但是我的程序还应该显示输出、步骤以及每个步骤的操作/说明。我想要最快的实现,就像我想要最小化操作数量和步骤一样。例如::x={1,2,3,4,5,6,7,8}-Inputy=(1,3,6,10,15,21,28,36)-Output但除了显示y数组作为输出外,我的程序还应该显示每个步骤的操作。我也引用这个线程calculateprefixsum,但可以从中得到很多帮助。

[go 面试] 并行与并发的区别及应用场景解析

引言在现代计算领域,我们经常听说并行与并发这两个概念。它们都与任务处理有关,但具体又有哪些区别呢?本文将深入探讨并行与并发的区别,以及它们在不同场景下的应用。并行与并发的区别并行的定义与特点并行是指同时执行多个任务的能力。在并行计算中,多个任务可以同时进行,互不干扰。这种方式可以充分利用多核处理器等硬件资源,提高任务处理的效率。并发的定义与特点并发是指多个任务交替进行的能力。在并发处理中,多个任务按照时间片轮转的方式进行,每个任务都有一定的执行时间。并发可以提高系统的响应性和资源利用率。并行与并发的区别与联系并行与并发的主要区别在于任务的执行方式和资源需求。并行是同时执行多个任务,需要具备并行