标签: parallel-processing

并行`for`循环,以数组作为输出

如何for并行运行循环(所以我可以使用我的Windows机器上的所有处理器),结果是3维数组?我现在的代码需要大约一个小时才能运行,如下所示:

guad = array(NA,c(1680,170,15))
for (r in 1:15)
{
  name = paste("P:/......",r,".csv",sep="")
  pp = read.table(name,sep=",",header=T)
    #lots of stuff to calculate x (which is a matrix)
  guad[,,r]= x  #
}
Run Code Online (Sandbox Code Playgroud)

我一直在寻找相关问题并认为我可以使用,foreach但我找不到将矩阵组合成数组的方法.

我是并行编程的新手,所以任何帮助都将非常感谢!

arrays parallel-processing for-loop r

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

Python多处理映射函数错误

我有一个简单的多处理示例,我正在尝试创建.普通的map()函数版本有效,但是当改为Pool.map时,我收到一个奇怪的错误:

from multiprocessing import Pool
from functools import partial
x = [1,2,3]
y = 10
f = lambda x,y: x**2+y

# ordinary map works:
map(partial(f,y=y),x)
# [11, 14, 19]

# multiprocessing map does not
p = Pool(4)
p.map(partial(f, y=y), x)
Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 504, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 319, in _handle_tasks
    put(task)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing functional-programming multiprocessing functools

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

控制D编程语言中的并行线程数

我正在学习D语言,因为我对它支持并行性感兴趣.这是我项目中的并行代码段:

import std.parallelism;


foreach (node v; taskPool.parallel(std.range.iota(z))) {
    // call here
    handle(v);
}
Run Code Online (Sandbox Code Playgroud)

如何控制并行工作的线程数?是否有相当于OpenMP的功能omp_set_num_threads

parallel-processing multithreading d openmp

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

R:在doParallel /降雪中制作集群

我在局域网上有两台服务器,全新安装了Centos 6.4 minimal和R 3.0.1.两台计算机都安装了doParallel,snow和snowfall软件包.

服务器可以很好地互相ssh.

当我尝试在任一方向上创建集群时,我会收到密码提示,但输入密码后,它会无限期挂起.

makePSOCKcluster("192.168.1.1",user="username")
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

编辑:

我也尝试在上面提到的计算机上调用makePSOCKcluster,其主机能够用作从属设备(来自其他计算机),但它仍然挂起.那么,是否可能存在防火墙问题?我也尝试使用带端口22的makePSOCKcluster:

> makePSOCKcluster("192.168.1.1",user="username",port=22)
Error in socketConnection("localhost", port = port, server = TRUE, blocking = TRUE,  :
  cannot open the connection
In addition: Warning message:
In socketConnection("localhost", port = port, server = TRUE, blocking = TRUE,  :
  port 22 cannot be opened
Run Code Online (Sandbox Code Playgroud)

这是我的iptables

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r cluster-computing snowfall snow

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

并行化许多GET请求

是否有任何有效的方法来并行化Java中的大量GET请求.我有一个200,000行的文件,每个行都需要来自Wikimedia的GET请求.然后我必须将一部分响应写入一个公共文件.我已将下面代码的主要部分粘贴为参考.

while ((line = br.readLine()) != null) {
    count++;
    if ((count % 1000) == 0) {
        System.out.println(count + " tags parsed");
        fbw.flush();
        bw.flush();
    }
    //System.out.println(line);
    String target = new String(line);
    if (target.startsWith("\"") && (target.endsWith("\""))) {
        target = target.replaceAll("\"", "");
    }
    String url = "http://en.wikipedia.org/w/api.php?action=query&prop=revisions&format=xml&rvprop=timestamp&rvlimit=1&rvdir=newer&titles=";
    url = url + URLEncoder.encode(target, "UTF-8");
    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    // optional default is GET
    con.setRequestMethod("GET");
    //add request header
    //con.setRequestProperty("User-Agent", USER_AGENT);
    int responsecode = con.getResponseCode();
    //System.out.println("Sending 'Get' request to URL: …
Run Code Online (Sandbox Code Playgroud)

java parallel-processing multithreading get httprequest

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

R snow中的makeCluster函数无限期挂起

我正在使用 Linux机器的makeClusterR包中的函数snow来启动远程Linux机器上的SOCK集群.一切似乎已经解决了两台机器成功通信(我能够建立两者之间的ssh连接).但:

makeCluster("192.168.128.24",type="SOCK")
Run Code Online (Sandbox Code Playgroud)

没有任何结果,只是无限期挂起.

我究竟做错了什么?

非常感谢

parallel-processing r snow

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

差异b/w MPI,TCP/IP

我对MPI,套接字和TCP/IP有些困惑.所有这三种通信协议都可以使用Infiniband,以太网等不同的互连,还是其他什么?如果问题听起来很幼稚,我很抱歉,但我真的对这三个术语感到困惑.

parallel-processing mpi

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

如何加速处理5000个独立任务的Mac应用程序?

我有一个长期运行(5-10小时)的Mac应用程序,可以处理5000个项目.通过执行多个转换(使用Saxon),运行一堆脚本(在Python和Racket中),收集数据,并将其序列化为一组XML文件,SQLite数据库和CoreData数据库来处理每个项目.每个项目完全独立于其他项目.

总之,它做了很多,需要很长时间,并且似乎是高度可并行化的.

在加载了需要处理它的所有项目后,该应用程序使用GCD来并行化工作,使用dispatch_apply:

dispatch_apply(numberOfItems, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^(size_t i) {
    @autoreleasepool {
        ...
    }
});
Run Code Online (Sandbox Code Playgroud)

我正在使用12核(24虚拟)的Mac Pro上运行该应用程序.所以我希望一直处理24件物品.但是,我通过记录发现正在处理的项目数量在8到24之间变化.这实际上是为运行时间增加了几个小时(假设它一次可以处理24个项目).

一方面,也许GCD真的非常聪明,它已经给了我最大的吞吐量.但是我很担心,因为很多工作都是在这个应用程序产生的脚本中发生的,也许GCD是从不完整的信息推断出来的,并没有做出最好的决定.

任何想法如何提高性能?正确性之后,第一个所需属性缩短了此应用程序运行所需的时间.我不关心功耗,占用Mac Pro或其他任何东西.

更新:实际上,这在文档中看起来很惊人:"在任何给定时刻并发队列执行的任务的实际数量是可变的,并且可以随着应用程序中的条件的变化而动态变化.许多因素会影响由执行的任务执行的任务数量.并发队列,包括可用内核的数量,其他进程正在完成的工作量,以及其他串行调度队列中任务的数量和优先级." (重点补充)看起来让其他进程正常工作会对应用程序中的调度产生负面影响.

能够只是说"同时运行这些块,每个核心一个,不要尝试更聪明地做任何事情",这真是太好了.

parallel-processing macos xcode objective-c grand-central-dispatch

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

如何在Dynamic对象中使用Parallel.ForEach方法

我已经使用Parallel.ForEach功能来同时处理多个客户端,如下所示:

Clients objClient = new Clients();
List<Clients> objClientList = Clients.GetClientList();

Parallel.ForEach<Clients>(objClientList, list =>
{
    SendFilesToClient(list);
});
Run Code Online (Sandbox Code Playgroud)

但是现在,我没有创建Client类,而是决定动态创建客户端对象,如下所示:

var xDoc = XDocument.Load(new StreamReader(xmlPath + @"\client.xml"));
dynamic root = new ExpandoObject();

XmlToDynamic.Parse(root, xDoc.Elements().First());

dynamic clients = new List<dynamic>();

for (int i = 0; i < root.clients.client.Count; i++)
{
    clients.Add(new ExpandoObject());
    clients[i].Id = root.clients.client[i].id;
    clients[i].Name = root.clients.client[i].name;
    List<string> list = new List<string>();
    for (int j = 0; j < root.clients.client[i].emails.email.Count; j++)
    {
        list.Add(root.clients.client[i].emails.email[j].ToString());
    }
    clients[i].Email = string.Join(",", list);
}
Run Code Online (Sandbox Code Playgroud)

现在我不使用Client类并动态生成对象,如何使用Parallel.ForEach功能同时处理动态对象中的多个客户端,就像我以前使用类对象一样?

希望我清楚自己.

此外,如果您能告诉我我的方法是否有问题或者告诉我更好的方法,我将不胜感激.

c# parallel-processing .net-4.0 dynamicobject parallel.foreach

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

R中"用户","系统"和"过去"时间的含义是什么

我在R中采用并行计算,并做一些基准工作.我注意到,当使用多个内核,system.time节目增加了时间usersystem,但elapsed时间减少.这是否表明并行计算是有效的?谢谢.

parallel-processing r

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