我们可以在单个cpu上交替使用"并行编码"和"多线程编码"吗?
我在这两方面都没有多少经验,但我想把我的编码风格转移到上面的任何一个.
正如我现在发现的那样,许多单一应用程序已经过时,这对于未来的软件产业来说会更好吗?
假设我们有一个list(mylist)用作lapply函数的输入对象.有没有办法知道mylist正在评估哪个元素?该方法应该起作用,lapply并且snowfall::sfApply(也可能是其他人也适用于家庭成员).
在聊天时,Gavin Simpson提出了以下方法.这很有用,lapply但不是很重要sfApply.我想避免额外的包或摆弄列表.有什么建议?
mylist <- list(a = 1:10, b = 1:10)
foo <- function(x) {
deparse(substitute(x))
}
bar <- lapply(mylist, FUN = foo)
> bar
$a
[1] "X[[1L]]"
$b
[1] "X[[2L]]"
Run Code Online (Sandbox Code Playgroud)
这是没有削减它的并行版本.
library(snowfall)
sfInit(parallel = TRUE, cpus = 2, type = "SOCK") # I use 2 cores
sfExport("foo", "mylist")
bar.para <- sfLapply(x = mylist, fun = foo)
> bar.para
$a
[1] "X[[1L]]"
$b
[1] …Run Code Online (Sandbox Code Playgroud) 我有兴趣使用Microsoft的Direct Compute框架进行数值计算.整个概念似乎是一个相当糟糕的业务.是否有任何有用的资源,例如网络教程或电子书,我可以学习使用这个框架?
谢谢!
我的任务是将一个进程分成许多并行运行的小进程,分发给许多从机.请求通过HTTP传入,服务器将其分解为发送到从属计算机的多个子进程,等待所有从属请求返回响应,然后将聚合结果整理为单个数据对象,作为结果返回顶级请求.我认为node.js会很有用,但由于它是单线程的,我无法确定这是否可能,或者它是否会阻止等待每个请求返回之后再转到下一个请求.这可能与node.js一起使用吗?如果是这样,有人会指出我正确的方向吗?即一个节点模块使用或概述它将如何完成?
谢谢你的帮助.
我使用带有大量数据的分区表.根据MySQL文档,它在待办事项列表中:
涉及诸如SUM()和COUNT()之类的聚合函数的查询可以很容易地并行化.
...但是,我可以使用UNION子查询实现相同的功能吗?它们是并行化的,还是我必须创建一个多线程客户端来运行所有可能的分区键的并发查询?
编辑:
问题不是严格关于UNION或子查询.我想尽可能多地利用我的查询核心.有没有办法做到这一点(并确保它已完成)没有对我的应用程序进行并行化?
有关MySQL当前并行化功能的任何好文档?
我想通过为每个客户建立一个模型来拍摄Kaggle Dunnhumby的挑战.我想将数据拆分为十个组,并使用Amazon Web服务(AWS)在十个组中并行使用R来构建模型.我遇到的一些相关链接是:
我不明白的是:
如果你能分享建议和提示,指出我正确的方向,我将非常感激.
PS我在AWS上使用免费使用帐户,但在Amazon Linux AMI上从源代码安装R非常困难(由于缺少标题,库和其他依赖项而导致许多错误).
有没有办法实现Parallel.For这个for循环的版本?
for (int i = 0; i < 100; i += 2) { DoStuff(i); }
Run Code Online (Sandbox Code Playgroud)
我没有看到接受步骤参数的重载,但我想不出任何理由这在逻辑上是不可能的.
对此和此问题的接受答案建议使用Parallel.ForEach一系列int使用生成的s Enumerable.Range,但在我的情况下,我使用线程本地数据,因此.Parallel.ForEach不是一个选项
另一个选择是检查i % 2 == 0我的循环体是否return,但是仍然执行线程本地数据初始化器Func和终结器Func.以下是演示此选项的代码段:
Parallel.For<Bar>(0, limit,
() => new Bar(), //thread local data initialize
(i, state, local) => //loop body
{
if (i % 2 != 0) return local;
local.foo += DoStuff(i);
return local;
},
(local) => …Run Code Online (Sandbox Code Playgroud) 我正在使用Python 2.7.3.我使用子类multiprocessing.Process对象并行化了一些代码.如果我的子类Process对象中的代码没有错误,那么一切运行正常.但是,如果有在我的子类的过程对象代码中的错误,他们显然会崩溃默默(没有堆栈跟踪打印到父shell)和CPU使用率将下降到零.父代码永远不会崩溃,给人的印象是执行只是挂起.同时,很难追踪代码中的错误,因为没有给出关于错误位置的指示.
我在stackoverflow上找不到任何其他问题来处理同样的问题.
我想子类化的Process对象似乎是静默崩溃的,因为它们无法向父shell发送错误消息,但我想知道我能做些什么,这样我至少可以更高效地调试(以及其他我的代码的用户可以告诉我他们何时遇到问题).
编辑:我的实际代码过于复杂,但在它的错误的子类的处理对象的一个简单的例子是这样的:
from multiprocessing import Process, Queue
class Worker(Process):
def __init__(self, inputQueue, outputQueue):
super(Worker, self).__init__()
self.inputQueue = inputQueue
self.outputQueue = outputQueue
def run(self):
for i in iter(self.inputQueue.get, 'STOP'):
# (code that does stuff)
1 / 0 # Dumb error
# (more code that does stuff)
self.outputQueue.put(result)
Run Code Online (Sandbox Code Playgroud) 是否可以使用基于JVM的语言(如Scala)来使用Xeon Phi?有什么例子吗?
假设我有Python流处理代码,如下所示:
def F1(stream):
for x in stream:
yield f1(x)
def F2(stream):
for x in stream:
yield f2(x)
def F3(stream):
for x in stream:
yield f3(x)
def F4(stream):
for x in stream:
yield f4(x)
for x in F4(F3(F2(F1(range(1000000))))):
print(x)
Run Code Online (Sandbox Code Playgroud)
这大致相当于range 1000000 | F1 | F2 | F3 | F4Unix(假设range命令),但在Unix中,管道中的每个进程并行运行.
是否有一种简单的方法来并行化Python代码?