标签: parallel-processing

在R中运行异步功能

我有以下代码:

myfun <- function() {
  fun2()

  return(1+1)
}
Run Code Online (Sandbox Code Playgroud)

我希望fun2()被调用,然后移到下一行而不等待结果。fun2函数不返回任何内容,我也不关心它何时完成,我只需要启动它即可。最好的方法是什么?并行进程,多线程,异步调用?任何代码示例,不胜感激。

parallel-processing multithreading asynchronous r

5
推荐指数
2
解决办法
2439
查看次数

Java多线程提供非常小的性能增益

我想学习并行编程以加速算法并选择Java.
我写了两个函数来对long数组中的整数求和- 一个简单的迭代遍历数组,第二个 - 将数组分成几个部分,并在分离的线程中汇总部分.

我预计使用两个线程的速度大约是2倍.但是,我得到的只是加速了24%.而且,使用更多线程,我在两个线程上没有任何改进(可能少于1%).我知道应该有线程创建/加入开销,但我想它不应该那么大.

你能解释一下,我错过了什么或代码中的错误在哪里?这是代码:

import java.util.concurrent.ThreadLocalRandom;


public class ParallelTest {


public static long sum1 (long[] num, int a, int b) {
    long r = 0;
    while (a < b) {
        r += num[a];
        ++a;
    }
    return r;
}

public static class SumThread extends Thread {
    private long num[];
    private long r;
    private int a, b;

    public SumThread (long[] num, int a, int b) {
        super();
        this.num = num;
        this.a = a;
        this.b = b;
    } …
Run Code Online (Sandbox Code Playgroud)

java parallel-processing multithreading

5
推荐指数
1
解决办法
70
查看次数

控制并行循环中的线程数并减少开销

在我的Fortran 95代码中,我有一系列嵌套的DO循环,整个过程需要大量的时间来计算,所以我想用OpenMP添加并行功能(gfortran -fopenmp用于编译/构建).

有一个主要的DO循环,运行1000次.

其中有一个子DO循环,运行100次.

其他几个DO循环嵌套在此中,迭代次数随着DO循环的每次迭代而增加(第一次一次,最后一次最多1000次).

例:

DO a = 1, 1000

    DO b = 1, 100

        DO c = 1, d
            some calculations
        END DO

        DO c = 1, d
            some calculations
        END DO

        DO c = 1, d
            some calculations
        END DO
    END DO
    d = d + 1
END DO
Run Code Online (Sandbox Code Playgroud)

一些嵌套的DO循环必须以串行方式运行,因为它们本身包含依赖关系(也就是说,循环的每次迭代都有一个包含上一次迭代的值的计算),并且在这种情况下不能轻易并行化.

我可以轻松地使没有任何依赖项的循环并行运行,如下所示:

d = 1
DO a = 1, 1000

    DO b = 1, 100

        DO c = 1, d
            some calculations with dependencies
        END …
Run Code Online (Sandbox Code Playgroud)

parallel-processing fortran loops openmp gfortran

5
推荐指数
1
解决办法
362
查看次数

TPL-定义的ExecutionDataflowBlockOptions BoundedCapacity降低了性能

有什么方法可以通过TPL节流来限制性能下降吗?

我有一个复杂的组件管道,并试图限制所需的内存需求。我从多个文件中并行读取,管道中的组件可能会从这些文件的随机部分中读取一些内容,其余组件则进行CPU绑定操作。

我使用通用测试方法将性能测试平台简化为这些测试。

private void TPLPerformaceTest(int generateNumbers, ExecutionDataflowBlockOptions transformBlockOptions)
{
    var transformBlock = new TransformBlock<int, int>(i => i, transformBlockOptions);

    var storedCount = 0;
    var generatedCount = 0;
    var store = new ActionBlock<int>(i => Interlocked.Increment(ref storedCount));

    transformBlock.LinkTo(store);
    transformBlock.Completion.ContinueWith(_ => store.Complete());

    for (int i = 0; i < generateNumbers; i++)
    {
        transformBlock.SendAsync(i).Wait(); //To ensure delivery
        Interlocked.Increment(ref generatedCount);
    }
    transformBlock.Complete();
    store.Completion.Wait();

    Assert.IsTrue(generatedCount == generateNumbers);
    Assert.IsTrue(storedCount == generateNumbers);
}
Run Code Online (Sandbox Code Playgroud)

第一个没有节流。在我的CPU上,大约需要12秒钟才能完成,消耗约800MB的RAM,平均CPU利用率约为35%

[Test]
public void TPLPerformaceUnlimitedTest()
{
    var …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing performance performance-testing tpl-dataflow

5
推荐指数
1
解决办法
908
查看次数

MPI +线程并行化与仅MPI的优势(如果有的话)是什么?

给定一个由几个节点组成的集群,每个节点都托管多核处理器,在使用纯全MPI的节点节点内的OpenMP/pthread 之间使用MPI有什么好处?如果我理解正确,如果我在一个节点上运行MPI程序并指示进程数等于内核数,那么我将在一个单独的内核上运行多个进程的一个诚实的并行MPI作业.那么为什么要使用节点内的线程和节点之间的MPI来进行混合并行化呢?在MPI + CUDA混合的情况下我毫无疑问,因为MPI不能使用GPU,但它可以使用CPU内核,那么为什么要使用线程呢?

parallel-processing multithreading mpi

5
推荐指数
1
解决办法
3161
查看次数

Java8 - 以并行方式处理Stream <Callable <... >>以非线程安全的消费者的惯用方法?

假设我有一个Stream<Callable<SomeClass>> stream;.该流正在访问超过一百万个不适合内存的对象.

将此转换为a的惯用方法是什么Stream<SomeClass>,以确保在Callable::call传递给非线程安全的消费者(可能通过调用.sequential().forEach()或其他一些瓶颈机制)之前并行执行?

即并行处理流,但顺序传递输出(随机顺序ok,只要它是单线程).

我知道我可以通过在原始流和消费者之间建立一个ExecutionService和一个来做我想做的事Queue.但这似乎是很多代码,是否有一个神奇的单行程?

java parallel-processing java-8 java-stream

5
推荐指数
1
解决办法
2309
查看次数

快速(矢量化)方法,以从第二DF中找到属于同等大小的矩形(由两个点给出)的一个DF中的点

我的数据框"A"看起来像这样:

type    latw    lngs    late    lngn
0   1000    45.457966   9.174864    45.458030   9.174907
1   1000    45.457966   9.174864    45.458030   9.174907
2   1000    45.458030   9.174864    45.458094   9.174907
3   1000    45.458094   9.174864    45.458157   9.174907
4   1000    45.458157   9.174864    45.458221   9.174907
5   1000    45.458221   9.174864    45.458285   9.174907
6   1000    45.458285   9.174864    45.458349   9.174907
7   1000    45.458349   9.174864    45.458413   9.174907
8   1000    45.458413   9.174864    45.458477   9.174907
9   1000    45.458477   9.174864    45.458540   9.174907
10  1000    45.458540   9.174864    45.458604   9.174907
11  1000    45.458604   9.174864    45.458668   9.174907
12  1000 …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing numpy dataframe pandas

5
推荐指数
1
解决办法
278
查看次数

用零并行填充std :: vector

我想std::vector<int>用openmp 填充零。如何快速做到这一点?

我听说循环遍历向量将每个元素设置为零很慢,而且std::fill快得多。现在还是这样吗?

将std :: vector <int>的每个值重置为0的最快方法

我是否必须手动将std::vector<int>区域划分为多个区域,#pragma omp for在每个线程上使用循环,然后std::fill在循环中使用?

c++ parallel-processing vector openmp

5
推荐指数
1
解决办法
872
查看次数

使R包中的函数可并行化的最佳实践是什么?

我开发了一个包含令人难以置信的并行功能的R包.

我希望以对用户透明的方式实现这些功能的并行化,而不管他/她的OS(至少理想情况下).

我环顾四周看看其他软件包作者是如何导入基于foreach的Parallelism的.例如,Max Kuhn的caret包导入foreach要使用,%dopar%依赖 于用户指定并行后端.(使用了几个示例doMC,这在Windows上不起作用.)

注意doParallel适用于Windows和Linux/OSX并使用内置parallel包(请参阅此处的注释以进行有用的讨论),导入doParallelregisterDoParallel()在用户指定parallel=TRUE为参数时调用函数是否有意义?

parallel-processing r parallel-foreach r-package

5
推荐指数
2
解决办法
585
查看次数

为什么矩阵乘法在具有7个内核的工作站上比在我的笔记本电脑上运行速度慢?

我运行了以下matlab代码:

rng(1)
matrix_size = 200;
iterations = 100000;
A = rand(matrix_size);
B = rand(matrix_size);

profile on
for i = 1:iterations
  A * B;
end
profile off
Run Code Online (Sandbox Code Playgroud)

在我的MacAir(Intel(R)Core(TM)i5-4260U CPU @ 1.40GHz)上,这需要39秒.在具有7核(Intel(R)Xeon(R)CPU E5-2687W v4 @ 3.00GHz)的工作站上,这需要62秒.

我没有说明-singleCompThread.工作站有12个核心,但有5个单线程进程在运行.我(差不多)有7个核心给自己.他们一直都是最大限度的.

怎么会这样?

运行上面的代码时-singleCompThread,它在54s内完成.

parallel-processing matlab

5
推荐指数
1
解决办法
143
查看次数