标签: parallel-processing

多维嵌套OpenMP循环

在OpenMP中并行化多维尴尬并行循环的正确方法是什么?维度的数量在编译时是已知的,但是哪个维度是大的.他们中的任何一个可能是一,二或一百万.当然我不希望N omp parallel是一个N维循环......

思考:

  • 问题在概念上很简单.只有最外层的"大"循环需要并行化,但循环维度在编译时是未知的并且可能会发生变化.

  • 将动态设置omp_set_num_threads(1)#pragma omp for schedule(static, huge_number)使某些环路并行化无操作?这会产生不良的副作用/开销吗?感觉像一个kludge.

  • OpenMP规范(2.10,A.38,A.39)讲述整合及不符合要求的嵌套并行之间的差异,但没有提出解决这个问题的最好的办法.

  • 可以重新排序循环,但可能会导致大量缓存未命中.展开是可能的,但不是重要的.还有另外一种方法吗?

这是我要并行化的内容:

for(i0=0; i0<n[0]; i0++) {
  for(i1=0; i1<n[1]; i1++) {
    ...
       for(iN=0; iN<n[N]; iN++) {
         <embarrasingly parallel operations>
       }
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

c parallel-processing openmp nested-loops

10
推荐指数
1
解决办法
3690
查看次数

Perl,如何从url并行获取数据?

我需要从许多Web数据提供程序中获取一些数据,这些数据提供程序不公开任何服务,因此我必须编写类似这样的内容,例如使用WWW :: Mechanize:

use WWW::Mechanize;
@urls = ('http://www.first.data.provider.com', 'http://www.second.data.provider.com', 'http://www.third.data.provider.com');
%results = {};
foreach my $url (@urls) {
 $mech = WWW::Mechanize->new();
 $mech->get($url);
 $mech->form_number(1);
 $mech->set_fields('user' => 'myuser', pass => 'mypass');
 $resp = $mech->submit();
 $results{$url} = parse($resp->content());
}
consume(%results);
Run Code Online (Sandbox Code Playgroud)

是否有一些(可能是简单的:-)方式将数据同时提取到一个公共的%结果变量,即:并行地从所有提供者那里获取?

parallel-processing perl fetch

10
推荐指数
2
解决办法
6094
查看次数

MPI和D:链接器选项

我正在尝试使用D编程语言的MPI.D完全支持C ABI,可以链接并调用任何C代码.我已经完成了显而易见的事情并将MPI标题翻译为D.然后我将测试程序从维基百科翻译成D.我使用以下命令编译它:

dmd test.d -L-lmpistubs

它在我刚运行时起作用./test,并打印:

0: We have 1 processors

但是,当我跑步时mpiexec -n 8 test,它什么都不打印.我的理解是MPI可执行文件需要一堆奇怪的链接选项,这就是mpicc存在自动化过程的工具的原因.但是,如果我在D中尝试使用MPI,这对我没有帮助.我认为这是因为我没有使用正确的链接器选项.有人可以告诉我mpicc,我可以做什么以及如何让DMD做同样的事情?

编辑:我找到了答案mpicc -showme.这显示了mpicc转发的命令gcc.但是,我也意识到我做错了头文件翻译.下一个问题: 如何做对.

parallel-processing linker d mpi mpiexec

10
推荐指数
1
解决办法
818
查看次数

Java的同步会更新完整的缓存,还是只更新我同步的对象?

如果我访问同步方法或同步块内的对象,那个被访问元素中的所有对象是否也同步?

想象一下,有一个对象Queue具有同步add()take()方法,接受并分发复杂对象Thing.Thing有很多列表与其他不同的对象.

现在,图像线程Before创建Thing并放入一些现有对象Thing,修改其中一些对象,依此类推.该Before线增加ThingQueue.稍后一点线程After从中Thing获取Queue.

问题:Will Thing及其所有子/子对象是否处于Before离开它们的状态?即使线程After可能稍早在这些子元素中的一个上工作?因为我映像处理器的线程After可能仍然有一些关于该子元素的缓存信息(该子对象的地址仍然相同).只有通过Thing同步方式访问父对象,所有这些缓存的东西才会失效?

请不要给出使用并发库等的答案.我想了解发生了什么.

java parallel-processing concurrency synchronization monitor

10
推荐指数
2
解决办法
1757
查看次数

Android下线程的替代方式

Android的Java和Oracle的Java略有不同.是否可以使用以下actor或协同程序

同样适用于Android,以避免在Android的Java和Oracle的Java之间使用线程和共享更多代码?是否有其他框架可用于两个Java版本.

先感谢您.

parallel-processing multithreading android coroutine actor

10
推荐指数
1
解决办法
1902
查看次数

在Haskell中运行并行URL下载

下面是Haskell代码(HTTP)下载给定目录中缺少的文件:

module Main where

import Control.Monad ( filterM
                     , liftM
                     )
import Data.Maybe ( fromJust )
import Network.HTTP ( RequestMethod(GET)
                    , rspBody
                    , simpleHTTP
                    )
import Network.HTTP.Base ( Request(..) )
import Network.URI ( parseURI )
import System.Directory ( doesFileExist )
import System.Environment ( getArgs )
import System.IO ( hClose
                 , hPutStr
                 , hPutStrLn
                 , IOMode(WriteMode)
                 , openFile
                 , stderr
                 )
import Text.Printf ( printf )

indices :: [String]
indices =
  map format1 [0..9] ++ map format2 [0..14] ++ ["40001-41284" :: …
Run Code Online (Sandbox Code Playgroud)

io parallel-processing haskell

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

为什么在这个例子中使用Reducer没有显着的加速?

(require '[clojure.core.reducers :as r])

(def data (into [] (take 10000000 (repeatedly #(rand-int 1000)))))

(defn frequencies [coll]
  (reduce (fn [counts x]
    (merge-with + counts {x 1}))
    {} coll))

(defn pfrequencies [coll]
  (r/reduce (fn [counts x]
    (merge-with + counts {x 1}))
    {} coll))


user=> (time (do (frequencies data) nil))
"Elapsed time: 29697.183 msecs"

user=> (time (do (pfrequencies data) nil))
"Elapsed time: 25273.794 msecs"

user=> (time (do (frequencies data) nil))
"Elapsed time: 25384.086 msecs"

user=> (time (do (pfrequencies data) nil))
"Elapsed time: 25778.502 …
Run Code Online (Sandbox Code Playgroud)

parallel-processing clojure reducers

10
推荐指数
2
解决办法
1520
查看次数

有人可以向我解释以下os.fork()示例吗?

[代码取自Mark Lutz编程Python第4版]

"forks child processes until you type 'q'"
import os
def child():
    print('Hello from child', os.getpid())
    os._exit(0) # else goes back to parent loop

def parent():
    while True:
        newpid = os.fork()
        if newpid == 0:
            child()
        else:
            print('Hello from parent', os.getpid(), newpid)
        if input() == 'q': break

parent()
Run Code Online (Sandbox Code Playgroud)

运行时代码输出的内容:

Hello from parent 2057 2062 
Hello from child 2062

Hello from parent 2057 2068 
Hello from child 2068

Hello from parent 2057 2069 
Hello from child 2069

Hello from parent …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing

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

如何提高这种算法的性能?

我有一个100000对的文本文件:单词和频率.

test.in文件包含单词:

  • 1行 - 所有字频对的总数
  • 2行~100 001 - 字频对
  • 100 002行 - 用户输入字的总数
  • 从100 003到最后 - 用户输入的单词

我解析这个文件并把文字放进去

Dictionary<string,double> dictionary;
Run Code Online (Sandbox Code Playgroud)

我想在以下代码中执行一些搜索+命令逻辑:

for(int i=0;i<15000;i++)
{
    tempInputWord = //take data from file(or other sources)

    var adviceWords = dictionary
                .Where(p => p.Key.StartsWith(searchWord, StringComparison.Ordinal))
                .OrderByDescending(ks => ks.Value)
                .ThenBy(ks => ks.Key,StringComparer.Ordinal)
                .Take(10)
                .ToList();

    //some output
}
Run Code Online (Sandbox Code Playgroud)

问题:此代码必须在不到10秒的时间内运行.

在我的计算机(核心i5 2400,8gb RAM)上使用Parallel.For() - 大约91秒.

你能给我一些如何提高性能的建议吗?

更新:

万岁!我们做到了!谢谢@CodesInChaos,@ usr,@ T_D以及参与解决问题的所有人.

最终代码:

var kvList = dictionary.OrderBy(ks => ks.Key, StringComparer.Ordinal).ToList();

var strComparer = new MyStringComparer();
var intComparer = …
Run Code Online (Sandbox Code Playgroud)

.net c# parallel-processing performance dictionary

10
推荐指数
2
解决办法
1498
查看次数

使用s3cmd并行将文件上载到s3

我在服务器上有一大堆文件,我想将它们上传到S3.这些文件以.data扩展名存储,但实际上它们只是一堆jpeg,png,zip或pdf.

我已经编写了一个简短的脚本,它找到了mime类型并将它们上传到S3上,但是它运行起来很慢.有没有办法使用gnu parallel进行下面的运行?

#!/bin/bash

for n in $(find -name "*.data") 
do 
        data=".data" 
        extension=`file $n | cut -d ' ' -f2 | awk '{print tolower($0)}'` 
        mimetype=`file --mime-type $n | cut -d ' ' -f2`
        fullpath=`readlink -f $n`

        changed="${fullpath/.data/.$extension}"

        filePathWithExtensionChanged=${changed#*internal_data}

        s3upload="s3cmd put -m $mimetype --acl-public $fullpath s3://tff-xenforo-data"$filePathWithExtensionChanged     

        response=`$s3upload`
        echo $response 

done 
Run Code Online (Sandbox Code Playgroud)

此外,我确信这个代码一般可以大大改进:)反馈提示将不胜感激.

parallel-processing bash amazon-s3 s3cmd gnu-parallel

10
推荐指数
1
解决办法
6096
查看次数