标签: parallel-processing

什么操作导致并行代码运行缓慢?

阅读本文:Hitchhiker的并发指南,更具体地说,关于Amdahl定律的部分- 并行程序的速度与其最慢的部分一样快,并且程序从一开始就越平行就越快.引入更多内核,我发现自己在想:如何确保从头开始编写尽可能并行的代码?如何确保我的代码能够获得添加多个内核的最大好处?而且,哪种操作会导致代码不并行,或者并行代码变慢?代码示例当然会受到赞赏.

parallel-processing erlang

3
推荐指数
1
解决办法
513
查看次数

OS X有哪些类型的线程?

内核级线程(如Linux和某些*BSD系统)还是其他什么?如果有任何差异,我正在使用pthreads.

parallel-processing macos multithreading bsd darwin

3
推荐指数
2
解决办法
1603
查看次数

MPI_Gather并行编程中的问题

我是一个插入并行编程的新手.根据我的理解,我尝试自己编码.然后我发现,我在MPI_Gather中不理解.让我们先看看代码,然后再解释.

#include "mpi.h"
#include <stdio.h>
int main (int argc, char *argv[]) {
int size;
int rank;
int a[12];
int i;
int start,end;

MPI_Init(&argc, &argv);

MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if(rank==0)
{
    for(i=0;i<12;i++)
    {
        a[i] = 100;
    }
}

start = 12/size*rank;
end = 12/size*(rank+1);
for(i=start;i<end;i++)
{
    a[i] = rank;
    printf("rank %d set a[%d] equal to %d\n",rank,i,rank);
}
MPI_Gather(&a[start],12/size*rank,MPI_INT,a,12/size*rank,MPI_INT,0,MPI_COMM_WORLD);
if(rank==0)
{
    for(i=0;i<12;i++)
    {
        printf("%d    %d\n",i,a[i]);
    }
}
MPI_Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

对于此代码,我的目标是收集在每个进程中生成的子数组中的值,并将其保存在数组a中.然后让进程0打印它.

首先,我将数组中的所有值初始化为100

然后,我计算每个过程的起始索引和结束索引(在这种情况下,过程的数量多为12的倍数)

接下来,我将值赋给等于它的数组

接下来,我收集它

最后,我将它打印在屏幕上

这是3个大小= 3的过程的输出

等级2设置[8]等于2

等级2设置[9]等于2

等级2设置[10]等于2 …

parallel-processing mpi

3
推荐指数
1
解决办法
2535
查看次数

在分析PSRS时为什么O(p ^ 2 log p ^ 2)= O(p ^ 2 log p)?

PSRS分析(定期抽样并行分类)在计算部分.为什么对常规样本进行排序的大小:O(p ^ 2 log p ^ 2)= O(p ^ 2 log p)?谢谢你的回答.

parallel-processing big-o

3
推荐指数
1
解决办法
81
查看次数

Parallel.ForEach x of x

所以我在c#4.0 WPF应用程序中工作并使用并行foreach循环使用我创建的数据库存储库将数据导出到数据库.我已经使用进度条使用并行foreach进行导出,但是希望能够提供更多深入的进度细节,例如导出第25项的第5项.我遇到的问题很明显,因为它正在运行与此同时,计数器不起作用,即总数会说出类似的结果

exporting 0 of 25
exporting 0 of 25
...
exporting 5 of 25
exporting 5 of 25
Run Code Online (Sandbox Code Playgroud)

任何人都可以指导如何在这样的并行循环中使行为工作:

int runningTotal = 0;
Parallel.ForEach(source, x =>
{
    Repository.Commit(x);
    runningTotal++;
    progressReporter.ReportProgress(() =>
    {
        //Progress bar update
        this.progressFile.Value++;
        this.lblProgress.Text = String
            .Format("Exporting Source {0} of {1}", runningTotal, source.Count)
    });
});
Run Code Online (Sandbox Code Playgroud)

希望这表明我希望实现的目标.

谢谢

c# parallel-processing wpf

3
推荐指数
1
解决办法
2987
查看次数

用于检查序列是否已排序的并行算法

我需要一个并行算法(成本最优)来检查给定的n个数字序列是否被排序.

sorting algorithm parallel-processing multithreading

3
推荐指数
1
解决办法
368
查看次数

使用细粒度方法线程安全地删除链表节点

为什么删除链表中的节点的以下代码段不是线程安全的?

编辑:注意每个节点都有自己的锁

// ... lock acquisition here
// ... assumption found to be valid here
prev->next = p->next;
p->next = NULL;
p->deleted = 1;
Run Code Online (Sandbox Code Playgroud)

parallel-processing multithreading linked-list

3
推荐指数
3
解决办法
6661
查看次数

在CUDA中查找最大值

我正在尝试在CUDA中编写代码以查找给定数字集的最大值.

假设您有20个数字,并且内核在2个5个线程的块上运行.现在假设10个线程同时比较前10个值,并且线程2找到最大值,因此线程2正在更新全局存储器中的最大值变量.当线程2正在更新时,将使用旧值进行比较的剩余线程(1,3-10)会发生什么?

如果我使用atomicCAS()锁定全局变量,线程(1,3-10)将使用旧的最大值进行比较吗?我怎样才能克服这个问题?

parallel-processing cuda reduction

3
推荐指数
1
解决办法
1万
查看次数

CUDA条件线程同步

CUDA编程指南指出了这一点

条件代码中允许__syncthreads(),但仅当条件在整个线程块中进行相同的求值时,否则代码执行可能会挂起或产生意外的副作用.

因此,如果我需要在一个块上使用条件分支同步线程,其中一些线程可能会或可能不会采用包含该__syncthreads()调用的分支,这是否意味着它不起作用?

我想象可能存在各种各样的情况,你可能需要这样做; 例如,如果您有二进制掩码并需要有条件地对像素应用某个操作.比如说,if (mask(x, y) != 0)然后执行包含的代码__syncthreads(),否则什么都不做.怎么办?

c++ parallel-processing synchronization cuda

3
推荐指数
1
解决办法
2291
查看次数

在多线程应用程序中使用Thread.Sleep的原因是什么?

很多时候,当我看到一些多线程代码时,我会看到Thread.Sleep()代码中的语句.

我甚至遇到了崩溃,我试图弄清楚问题所在,所以大部分的多线程代码都被注释掉了,慢慢地把它带到最后一块,当我添加一个for语句时:

for ( int i = 0; i < 1000000; ++i )
    ++i;
Run Code Online (Sandbox Code Playgroud)

它并没有崩溃.所以现在我更换Thread.Sleep()它似乎工作.我不能轻易地重新发布它在这里发布,但是Thread.Sleep()对于多线程应用程序是必要的吗?

他们的目的是什么?如果不使用它会导致意想不到的结果吗?

编辑:顺便说一下,我正在使用BackgroundWorker并且只在那里实现我的东西,但不确定是什么原因造成的.虽然我使用的API是托管应用程序,其中应用程序不是多线程的.所以例如我认为我不能同时在几个线程上调用它的API函数.不确定,但那是我的猜测.

.net c# parallel-processing multithreading sleep

3
推荐指数
1
解决办法
3847
查看次数