标签: parallel-processing

Java中元素迭代器的并行计算

我现在有过几次同样的需求,并想就构建解决方案的正确方法获得其他想法。需要的是对多个线程上的多个元素执行一些操作,而无需一次将所有元素都放在内存中,只需要计算中的元素。就像,Iterables.partition是不够的,因为它预先将所有元素都放入内存中。

用代码表达,我想写一个 BulkCalc2,它和 BulkCalc1 做同样的事情,只是并行。下面的示例代码说明了我的最佳尝试。我不满意,因为它又大又丑,但它似乎实现了我的目标,即在工作完成之前保持线程的高度利用,在计算过程中传播任何异常,并且一次在内存中不必有超过numThreads 个 BigThing实例.

我会接受以最简洁的方式满足既定目标的答案,无论是改进 BulkCalc2 的方法还是完全不同的解决方案。

interface BigThing {

    int getId();

    String getString();
}

class Calc {

    // somewhat expensive computation
    double calc(BigThing bigThing) {
        Random r = new Random(bigThing.getString().hashCode());
        double d = 0;
        for (int i = 0; i < 100000; i++) {
            d += r.nextDouble();
        }
        return d;
    }
}

class BulkCalc1 {

    final Calc calc;

    public BulkCalc1(Calc calc) {
        this.calc = calc;
    }

    public TreeMap<Integer, …
Run Code Online (Sandbox Code Playgroud)

java parallel-processing iterator

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

解析大字符串的最快方法(多线程)

我即将开始一个项目,该项目将获取文本块,将大量数据解析为某种对象,然后可以对其进行序列化、存储和统计/收集数据。这需要尽可能快,因为我需要开始处理 > 10,000,000 个文本块,并且每天将收到 100,000 条。

我在具有 12 个至强核心 + 超线程的系统上运行它。我也可以访问/了解一些关于 CUDA 编程的知识,但对于字符串内容,我认为它不合适。从每个字符串中,我需要解析大量数据,其中一些我知道确切的位置,有些我不知道并且需要使用正则表达式/一些聪明的东西。

所以考虑这样的事情:

object[] parseAll (string [] stringsToParse)
{
     parallel foreach 
          parse( string[n] )
}

object parse(string s)
{
     try to use exact positions / substring etc here instead of regex's
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  • 使用正则表达式来 substr 慢多少。
  • .NET 会比其他语言慢得多吗?
  • 我可以做什么样的优化(如果有的话)来最大化并行性。
  • 还有什么我没有考虑过的吗?

谢谢你的帮助!对不起,如果这是冗长的。

c# regex string parallel-processing parsing

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

什么是 JaMP,我如何了解它?

在一个项目中,我被要求通过 Java 实现共享内存并行化JaMP,它扩展了 Java for OpenMP。我几乎是该领域的初学者,经过 10 分钟的搜索,互联网并没有证明自己很有帮助。

我的主要问题:是JaMP仅 linux 的实现吗?如果没有,开始学习的良好起点是什么?

java parallel-processing multithreading openmp

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

MPI 矩阵-矩阵乘法的问题:集群比单台计算机慢

我使用 MPI 编写了一个小程序来并行化矩阵-矩阵乘法。问题是:在我的电脑上运行程序时,大约需要10秒才能完成,但在集群上大约需要75秒。我想我有一些同步问题,但我无法弄清楚(还)。

这是我的源代码:

/*matrix.c
mpicc -o out matrix.c
mpirun -np 11 out
*/

#include <mpi.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define N 1000

#define DATA_TAG 10
#define B_SENT_TAG 20
#define FINISH_TAG 30

int master(int);
int worker(int, int);

int main(int argc, char **argv) {
    int myrank, p;
    double s_time, f_time;

    MPI_Init(&argc,&argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
    MPI_Comm_size(MPI_COMM_WORLD, &p);

    if (myrank == 0) {
        s_time = MPI_Wtime();
        master(p);
        f_time = MPI_Wtime();
        printf("Complete in %1.2f seconds\n", f_time - s_time);
        fflush(stdout);
    }
    else {
        worker(myrank, …
Run Code Online (Sandbox Code Playgroud)

c parallel-processing mpi matrix-multiplication

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

Scikit-learn 是否发布了 Python GIL?

我想在不同的线程中训练多个一类 SVM。有人知道 scikit 的 SVM 是否发布了 GIL?我在网上没有找到任何答案。

谢谢

python parallel-processing multithreading machine-learning scikit-learn

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

使用 foreach 和 %dopar% 将列添加到数据框

在 Windows 7 和 Ubuntu 64 位 11.04 上的 Revolution R 2.12.2 中,我有一个超过 100K 行和 100 多列的数据框,并且我为每个原始列派生了 ~5 列(sqrt、log、log10 等)并将它们添加到同一个数据框中。如果没有使用 foreach 和 %do% 的并行性,这可以正常工作,但速度很慢。当我尝试将它与 foreach 和 %dopar% 并行化时,它不会访问全局环境(以防止竞争条件或类似情况),因此我无法修改数据框,因为“未找到”数据框对象。

我的问题是我怎样才能让它更快?换句话说,如何并行化列或转换?

简化示例:

require(foreach)    
require(doSMP)
w <- startWorkers()
registerDoSMP(w)

transform_features <- function()
{    
    cols<-c(1,2,3,4) # in my real code I select certain columns (not all)

    foreach(thiscol=cols, mydata) %dopar% { 
        name <- names(mydata)[thiscol]
        print(paste('transforming variable ', name))
        mydata[,paste(name, 'sqrt', sep='_')] <<- sqrt(mydata[,thiscol])
            mydata[,paste(name, 'log', sep='_')] <<- log(mydata[,thiscol])
    }
}


n<-10 # I …
Run Code Online (Sandbox Code Playgroud)

parallel-processing performance foreach r

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

为什么多线程应用程序通常会扩展不良?

我目前正在思考多线程应用程序可能无法很好扩展的原因。

我知道并一直与之抗争的两个原因是:

  1. 线程之间的通信没有做好,导致速度变慢
  2. 芯片上的内核数和内存带宽与 CPU 不成比例地增加。这导致每个内核的内存带宽越慢,芯片上使用的内核越多。

还有什么问题?

parallel-processing multithreading multicore

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

lambda 表达式错误:表达式必须是可修改的左值

好的,代码是:

vector<vector<double>> imageFiltered;

// some processing codes here

parallel_for( blocked_range<unsigned>(0, imageFiltered.size()),
    [=](const blocked_range<unsigned>& r) {
        for( unsigned i = r.begin(); i != r.end(); ++i ){
            for( unsigned j = 0; j != imageFiltered[i].size(); ++j ) {
                imageFiltered[i][j] = 0; // error here?expression must be a modifiable lvalue
            }
        }
});
Run Code Online (Sandbox Code Playgroud)

我写了另一个类似的代码块,它工作得很好。所以,这里有一点帮助。PS:parallel_for 来自 Interl TBB。

parallel-processing lambda tbb

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

OpenMP:并行快速排序

我尝试使用 OpenMP 在分区部分和 QuickSort 部分并行化 QuickSort。我的C代码如下:

#include "stdlib.h"
#include "stdio.h"
#include "omp.h"

// parallel partition
int ParPartition(int *a, int p, int r) {
    int b[r-p];
    int key = *(a+r); // use the last element in the array as the pivot
    int lt[r-p]; // mark 1 at the position where its element is smaller than the key, else 0
    int gt[r-p]; // mark 1 at the position where its element is bigger than the key, else 0
    int cnt_lt = 0; …
Run Code Online (Sandbox Code Playgroud)

c parallel-processing multithreading quicksort openmp

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

在 R 中使用多核计算 SVD

我想svd()在 R 中的大型稀疏矩阵 (17k x 2m) 上运行,并且我可以访问集群。有没有一种使用多核在 R 中计算 SVD 的直接方法?

RScaLAPACK 包(http://www.inside-r.org/packages/cran/RScaLAPACK)似乎使这成为可能,但它似乎不再受到积极支持(http://cran.r-project.org /web/packages/RScaLAPACK/),我认为这是有原因的。

parallel-processing multicore r svd cran

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