标签: parallel-processing

如何将原子计数器添加到 powershell ForEach -Parallel 循环

在这个问题中,解释了如何添加到并发ThreadSafe集合Powershell:如何将结果添加到数组(ForEach-Object -Parallel)

我有一个更简单的用例,我只想增加一个值。(整数)。

是否可以在 Powershell 中使用某种原子整数数据类型来完成?

$myAtomicCounter = 0

$myItems | ForEach-Object -Parallel {
    #...other work

    $myAtomicCounter.ThreadSafeAdd(2)

    # .. some more work using counter
}

Write-Host($myAtomicCounter)
Run Code Online (Sandbox Code Playgroud)

parallel-processing powershell multithreading

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

Python 多处理中线程增加导致性能下降

我有一台 24 个核心的机器,每个核心有 2 个线程。我正在尝试优化以下代码以实现并行执行。但是,我注意到代码的性能在达到一定数量的线程后开始下降。

import argparse
import glob
import h5py
import numpy as np
import pandas as pd
import xarray as xr
from tqdm import tqdm
import time
import datetime
from multiprocessing import Pool, cpu_count, Lock
import multiprocessing
import cProfile, pstats, io


def process_parcel_file(f, bands, mask):
    start_time = time.time()
    test = xr.open_dataset(f)
    print(f"Elapsed in process_parcel_file for reading dataset: {time.time() - start_time}")

    start_time = time.time()
    subset = test[bands + ['SCL']].copy()
    subset = subset.where(subset != 0, np.nan)
    if mask:
        subset = …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing multithreading multiprocessing python-multiprocessing

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

`mclapply` 和 `foreach()` 循环工作过程的区别

这是出于好奇而提出的一般性问题。我正在使用该doParallel包进行并行计算。我使用这些包来进行模拟。

我观察到,当我使用foreach循环进行模拟时,Rstudio 中的当前使用内存急剧上升 (4+GiB),并且 Rstudio 有时崩溃。

现在我再次parallel::mclapply进行了相同的模拟,但令人惊讶的是没有问题,并且当前使用内存没有增加太多(10+MiB)。

我不明白代码内部发生了什么。我期待对上述过程的详细解释。

sessionInfo()因为我的 R 是

R version 4.2.1 (2022-06-23) -- "Funny-Looking Kid"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: aarch64-apple-darwin20 (64-bit)
Run Code Online (Sandbox Code Playgroud)

操作系统是MacOS。

doParallel软件包版本 1.0.17。

RStudio 版本 2023.03.01。

例子:

假设我们正在尝试计算 Erdos-Renyi 图的边数。我试图每次模拟图形并存储每次模拟的边计数值。

代码如下

#ER random graph generator
src1 <- {"#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericMatrix ER_AdjMatGEN_cpp(int N, double p){
  NumericMatrix temp(N,N);
  for(int i=0; i< N; i++){
    for(int j=0; j < i; j++){ …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r parallel.foreach mclapply doparallel

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

pmap对于玩具示例来说很慢

我正在测试Julia中的并行性,看看我的机器上是否有加速(我正在选择一种语言来实现新的算法).我不想花费大量时间编写一个巨大的例子,所以我在发布版Julia 0.4.5(Mac OS X和双核)上进行了以下测试:

$ julia -p2

julia> @everywhere f(x) = x^2 + 10
julia> @time map(f, 1:10000000)
julia> @time pmap(f, 1:10000000)
Run Code Online (Sandbox Code Playgroud)

pmap显着慢于map(> 20x)并且分配超过内存的10倍.我究竟做错了什么?

谢谢.

parallel-processing pmap julia

4
推荐指数
1
解决办法
321
查看次数

在cython中使用nogil和cpdef类方法

我想设计一个cdef类,其方法可以并行运行,因此我需要将它们设置为nogil.我看到我可以为cdef方法做到这一点,但由于某种原因我无法理解我不允许对cpdef方法做同样的事情.这特别是失败了

cdef class Test:
    cdef int i
    def __init__(self):
        self.i = 0
    cpdef int incr(self) nogil:
        self.i += 1;
        return self.i
Run Code Online (Sandbox Code Playgroud)

虽然同样cdef int incr会有效.这有点令人惊讶,因为在正常cpdef函数nogil中允许属性:

cpdef int testfunc(int x) nogil:
    return x + 1
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么或做错了吗?

parallel-processing cython

4
推荐指数
1
解决办法
1616
查看次数

如何在Spark中按分区对键/值进行分组?

我有一个Spark Streaming应用程序,它每秒接收几条JSON消息,每个消息都有一个标识其源的ID.

使用此ID作为键,我能够执行a MapPartitionsToPair,从而创建一个JavaPairDStream,其中包含键/值对的RDD,每个分区一个键值对(因此,如果我收到5个JSON消息,例如,我得到一个RDD与5个分区,每个分区都将消息的ID作为密钥,并将JSON消息本身作为值).

我现在想做的是,我想将具有相同键的所有值分组到同一个分区中.因此,例如,如果我有3个带有键'a'的分区和2个带有键'b'的分区,我想创建一个带有2个分区而不是5个分区的新RDD,每个分区包含一个键所具有的所有值,一个用于'a'和一个'b'.

我怎么能做到这一点?到目前为止这是我的代码:

JavaReceiverInputDStream<String> streamData2 = ssc.socketTextStream(args[0], Integer.parseInt(args[1]),
            StorageLevels.MEMORY_AND_DISK_SER);

JavaPairDStream<String,String> streamGiveKey= streamData2.mapPartitionsToPair(new PairFlatMapFunction<Iterator<String>, String, String>() {
        @Override
        public Iterable<Tuple2<String, String>> call(Iterator<String> stringIterator) throws Exception {

            ArrayList<Tuple2<String,String>>a= new ArrayList<Tuple2<String, String>>();

            while (stringIterator.hasNext()){
                String c=stringIterator.next();
                if(c==null){
                    return null;

                }

                JsonMessage retMap = new Gson().fromJson(c,JsonMessage.class);
                String key= retMap.getSid();
                Tuple2<String,String> b= new Tuple2<String,String>(key,c);
                a.add(b);

                System.out.print(b._1+"_"+b._2);
                // }
                //break;
            }


            return a;
        }
    });
Run Code Online (Sandbox Code Playgroud)

//我创建了一个JavaPairDStream,其中每个分区包含一个键/值对.

我尝试使用grouByKey(),但无论消息的数量是多少,我的分区号都是2.

我该怎么做?非常感谢.

parallel-processing apache-spark spark-streaming

4
推荐指数
1
解决办法
3714
查看次数

Julia只占我CPU的20-30%.我该怎么办?

我正在运行一个在Julia中进行数字ODE集成的程序.我正在运行Windows 10(64位),英特尔酷睿i7-4710MQ @ 2.50Ghz(8个逻辑处理器).

我注意到当我的代码在julia上运行时,只有最多30%的CPU在使用中.进入parallelazation文档,我开始使用Julia: C:\Users\*****\AppData\Local\Julia-0.4.5\bin\julia.exe -p 8并期望看到改进.然而,我没有看到它们.

因此,我的问题如下:我是否有一种特殊的方式来编写代码以便更有效地使用CPU?这可能是我的操作系统(Windows 10)造成的限制吗?

我用以下命令在julia控制台中提交我的代码: include("C:\\Users\\****\\AppData\\Local\\Julia-0.4.5\\13. Fast Filesaving Format.jl").

在这段代码中,我使用了一些额外的包: using ODE; using PyPlot; using JLD.

我使用Windows"任务管理器"测量CPU使用率.

parallel-processing optimization julia

4
推荐指数
1
解决办法
762
查看次数

为什么我不能通过在C++ 11中运行多个线程来获得任何性能改进?

我有以下测试程序,其中包含一个简单的函数,可以找到我尝试在多个线程中运行的素数(仅作为示例).

#include <cstdio>
#include <iostream>
#include <ctime>
#include <thread>

void primefinder(void)
{
   int n = 300000;

   int i, j;
   int lastprime = 0;
   for(i = 2; i <= n; i++) {
      for(j = 2; j <= i; j++) {
           if((i % j) == 0) {
               if(i == j)
                   lastprime = i;
               else {
                   break;
               }
           }
      }
   }

   std::cout << "Prime: " << lastprime << std::endl;
}

int main(void)
{
   std::clock_t start;
   start = std::clock();

   std::thread t1(primefinder);
   t1.join();

   std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing multithreading c++11

4
推荐指数
1
解决办法
627
查看次数

parallel.foreach和httpclient - 奇怪的行为

我有一段代码循环遍历集合,并为每次迭代调用httpclient.httpclient调用的api平均需要30-40ms才能执行.顺序调用它,我得到预期的结果,但是一旦我使用Parallel.foreach,它需要更长的时间.仔细查看日志,我可以看到很多httpclient调用需要1000ms才能执行,然后时间会回落到30-40ms.查看api日志,我可以看到它几乎没有超过100毫秒.我不知道为什么我会得到这个高峰.

代码是

using (var client = new HttpClient())
{
  var content = new StringContent(parameters, Encoding.UTF8, "application/json");
  var response = client.PostAsync(url, content);
  _log.Info(string.Format("Took {0} ms to send post", watch.ElapsedMilliseconds));
  watch.Restart();

  var responseString = response.Result.Content.ReadAsStringAsync();
  _log.Info(string.Format("Took {0} ms to readstring after post", watch.ElapsedMilliseconds));
}
Run Code Online (Sandbox Code Playgroud)

并行调用是这样的

    Console.WriteLine("starting parallel...");
    Parallel.ForEach(recipientCollections, recipientCollection => 
      {    
        // A lot of processing happens here to create relevant content
        var secondaryCountryRecipientList = string.Join(",",refinedCountryRecipients);
        var emailApiParams = new SendEmailParametersModel(CountrySubscriberApplicationId,
                                        queueItem.SitecoreId, queueItem.Version, queueItem.Language, countryFeedItem.Subject,
                                        countryFeedItem.Html, countryFeedItem.From, _recipientsFormatter.Format(secondaryCountryRecipientList));

       log.Info(string.Format("Sending email request for …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing asp.net-web-api2

4
推荐指数
2
解决办法
2491
查看次数

ARM并行指令ASX和SAX的用途?

有人可以解释何时使用并行加/减ARM指令ASX和/或SAX?在什么情况下/算法需要用来调出半字,然后加上AND减去上/下半字?以下是每个的解释:

ASX

  • 交换半字Rm,然后添加顶部半字和减去底部半字.

SAX

  • 交换半字Rm,然后减去前半字和添加下半字.

parallel-processing assembly arm

4
推荐指数
1
解决办法
163
查看次数