标签: parallel-processing

Parallel.ForEach 和 Regex 没有提高性能吗?

我有一个程序,它根据结果以某种方式对返回的结果集进行颜色编码。由于对结果进行颜色编码所需的时间较长(目前使用 Regex 和 RichTextBox.Select + .SelectionColor 完成),我在 400 个结果处切断了颜色编码。在这个数字左右,大约需要 20 秒,这大约是我认为合理的最长时间。

为了尝试提高性能,我重写了 Regex 部分以使用循环Parallel.ForEach来迭代MatchCollection,但时间大致相同(18-19 秒 vs 20 秒)!难道这个工作不太适合并行编程吗?我应该尝试一些不同的东西吗?欢迎任何建议。谢谢!

PS:我觉得有点奇怪,无论有没有 Parallel.ForEach,我的 CPU 利用率都没有达到 14% 左右。

代码

MatchCollection startMatches = Regex.Matches(tempRTB.Text, startPattern);

object locker = new object();
System.Threading.Tasks.Parallel.ForEach(startMatches.Cast<Match>(), m =>
{
    int i = 0;
    foreach (Group g in m.Groups)
    {
        if (i > 0 && i < 5 && g.Length > 0)
        {
            tempRTB.Invoke(new Func<bool>(
                delegate
                {
                    lock (locker)
                    {
                        tempRTB.Select(g.Index, g.Length);
                        if ((i & 1) == …
Run Code Online (Sandbox Code Playgroud)

c# regex parallel-processing multithreading .net-4.0

0
推荐指数
1
解决办法
1527
查看次数

如何同时滚动多个tableview

2Tableviews在一个ViewController具有不同大小的单元格高度。当我滚动时view controller,需要同时滚动tableview cell两个表格单元格也需要同时隐藏。

200px height顶部 tableview 中的单元格,50px height底部 tableview。

当我滑动 100px 时,顶部表格单元格滚动 100 px,底部表格单元格应该滚动 25px。

这种平行滚动可能吗?任何建议.. 提前致谢

parallel-processing objective-c uitableview uiscrollview ios

0
推荐指数
1
解决办法
2442
查看次数

在 SQL Server 中并行导入数据

我有 100 多个文件要导入 sql server,其中大部分是 500 MB。我想利用 SQL Server 的并行导入实用程序并阅读了许多网页,如下所示:

如何在 30 分钟内加载 1 TB 数据

https://technet.microsoft.com/en-us/library/dd537533(v=sql.100).aspx

使用表级锁定并行导入数据

https://technet.microsoft.com/en-us/library/ms186341(v=sql.105).aspx

控制批量导入的锁定行为

https://technet.microsoft.com/en-us/library/ms180876(v=sql.105).aspx

以及 stackoverflow 中的答案

并行插入单个表的最快方法

然而,他们都没有给出一个简单的代码示例。我知道如何使用批量插入/bcp,但我不知道从哪里开始并行导入?任何人都可以帮助我吗?

我的系统是Windows,我使用的是SQL server 2016。源数据文件为txt格式。

在此先感谢您的帮助!

杰森

sql-server parallel-processing bulkinsert sqlbulkcopy bulk-load

0
推荐指数
1
解决办法
1364
查看次数

并行构建多个包

如何并行构建包以减少 make 命令花费的时间(Golang)

我当前的目录是“雷神”

在我的Makefile里面

build:
    go build -o thor
    go build thor/package1
    go build thor/scripts/package2
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,所有的包都是独立运行的独立进程。当我运行make命令时,每个包都一个一个地构建。因此,如果每个包构建需要 30 秒,则总共需要 90 秒(30 秒 * 3)。但如果我可以并行构建这些包,只需要 30 秒。

在 shell 脚本的情况下,这种情况可以通过使用&在后台运行每个脚本并使用wait 等待每个脚本结束来处理

示例代码

#!/bin/bash
echo "Starts"
./s1.sh &
./s2.sh &
./s3.sh &
wait
echo "ends"
Run Code Online (Sandbox Code Playgroud)

在上述情况下,所有脚本 s1.sh , s2.sh , s3.sh 将同时运行并等待所有进程完成。

那么,我们可以在 Makefile 中也做这样的事情吗:)

parallel-processing makefile

0
推荐指数
1
解决办法
1371
查看次数

如何使用包“sparklyr”在R中实现lapply函数

我对 Spark 很陌生,我试图在网上寻找一些东西,但我没有找到任何令人满意的东西。

我一直使用该命令运行并行计算mclapply,我喜欢它的结构(即,第一个参数用作滚动索引,第二个参数是要并行化的函数,然后是传递给函数的其他可选参数)。现在我试图通过 Spark 做同样的事情,即,我想在 Spark 集群的所有节点之间分配我的计算。这就是我所学到的以及我认为应该如何构建代码的内容(我正在使用包sparklyr):

  1. 我使用命令创建到 Spark 的连接spark_connect
  2. 我在 Spark 环境中复制我的 data.framecopy_to并通过它的tibble访问它;
  3. 我想实现的“星火友好”的版本mclapply,但我已经看到有在包(我已经看到了存在的功能没有类似功能spark.lapplySparkR包,但不幸的是它是不是在CRAN了)。

下面是我实现的一个简单的测试脚本,它使用函数mclapply.

#### Standard code that works with mclapply #########
dfTest = data.frame(X = rep(1, 10000), Y = rep(2, 10000))

.testFunc = function(X = 1, df, str) {
    rowSelected = df[X, ]
    y = as.numeric(rowSelected[1] + rowSelected[2])
    return(list(y = y, str = str))
}

lOutput = mclapply(X = 1 …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r mclapply apache-spark sparklyr

0
推荐指数
1
解决办法
1414
查看次数

Camel Split 并行处理聚合消息

可能看起来像一个微不足道的问题,但不幸的是无法让它工作

这是代码

from("direct:START")
.process( (ex) -> {
   List<Integer> pages = IntStream.range(1,5).boxed().collect(Collectors.toList());
   ex.getOut().setBody( pages );
 })
.split(body())
.parallelProcessing()
.to("http://someurl?page=${body}");
 --> Get the collective body here
Run Code Online (Sandbox Code Playgroud)

如何获得这份工作!

parallel-processing rest concurrency split apache-camel

0
推荐指数
1
解决办法
2466
查看次数

为什么 std::for_each 比 __gnu_parallel::for_each 快

我试图理解为什么std::for_each在单线程上运行的~3速度比__gnu_parallel::for_each下面的例子快几倍:

Time =0.478101 milliseconds
Run Code Online (Sandbox Code Playgroud)

对比

Time =0.166421 milliseconds
Run Code Online (Sandbox Code Playgroud)

这是我用来进行基准测试的代码:

#include <iostream>
#include <chrono>
#include <parallel/algorithm>

//The struct I'm using for timming
struct   TimerAvrg
{
    std::vector<double> times;
    size_t curr=0,n;
    std::chrono::high_resolution_clock::time_point begin,end;
    TimerAvrg(int _n=30)
    {
        n=_n;
        times.reserve(n);
    }

    inline void start()
    {
        begin= std::chrono::high_resolution_clock::now();
    }

    inline void stop()
    {
        end= std::chrono::high_resolution_clock::now();
        double duration=double(std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count())*1e-6;
        if ( times.size()<n)
            times.push_back(duration);
        else{
            times[curr]=duration;
            curr++;
            if (curr>=times.size()) curr=0;}
    }

    double getAvrg()
    {
        double sum=0;
        for(auto t:times)
            sum+=t;
        return sum/double(times.size());
    }
}; …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing stl

0
推荐指数
1
解决办法
562
查看次数

如何在缺失值的插补中对missRanger使用并行计算?

我正在输入缺失值,missRanger因为我有 1000 个变量,所以花费的时间太长。我尝试使用并行计算,但它并没有使过程更快。这是代码

library(doParallel)
cores=detectCores()
cl <- makeCluster(cores[1]-1) 
registerDoParallel(cl)
library(missRanger)
train[1:lengthvar] <- missRanger(train[1:lengthvar], pmm.k = 3, num.trees = 100)
stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

我不确定要向此代码添加什么才能使其正常工作。

parallel-processing r missing-data imputation

0
推荐指数
1
解决办法
505
查看次数

使用 CUDA 进行并行动态编程

这是我第一次尝试用 CUDA 实现递归。目标是使用 CUDA 的强大功能从一组字符“12345”中提取所有组合以动态并行化任务。这是我的内核:

__device__ char route[31] = { "_________________________"};
__device__ char init[6] = { "12345" };

__global__ void Recursive(int depth) {

    // up to depth 6
    if (depth == 5) return;     
    // newroute = route - idx

    int x = depth * 6;
    printf("%s\n", route);

    int o = 0;
    int newlen = 0;
    for (int i = 0; i<6; ++i)
    {
        if (i != threadIdx.x)
        {
            route[i+x-o] = init[i];
            newlen++;
        }
        else                
        {
            o = 1;
        }
    } …
Run Code Online (Sandbox Code Playgroud)

parallel-processing cuda dynamic

0
推荐指数
1
解决办法
218
查看次数

使用上下文切换在线程池执行器中执行连续运行的线程/任务

我想连续运行n 个任务,但是这些任务是内存密集型的,我希望一次只有x 个处于活动状态。但最终所有这n 个任务都应该通过它们之间的上下文切换来运行。

简而言之,我想要另一种实现FixedThreadPool,其中额外的任务也应该与上下文切换一起运行。

我们是否有实现相同的线程池变体?或者有什么其他的实现方式?

更新:在阅读了一点并阅读下面的答案后,决定“分而治之”,即将连续运行的任务分解为小的短期任务单元,并一次又一次地提交给 FixedThreadPool

java parallel-processing performance multithreading threadpoolexecutor

0
推荐指数
1
解决办法
153
查看次数