我知道你可以设置用于所有.par操作的线程数,如下所示:
collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(parlevel: Int)
但是,是否可以设置仅用于一个.par调用的线程数?
我的项目是使用OpenMP在C中做一些并行的算法.现在我想用Python做同样的项目.有没有类似于openmp for python的东西?
我将在二进制文件中存储350M预先计算的双数,并在我的dll启动时将它们加载到内存中.有没有内置的方法可以并行加载它,或者我应该自己将数据拆分成多个文件并自己处理多个线程?
回答评论:我将在足够强大的盒子上运行这个dll,很可能只在64位的盒子上运行.因为无论如何所有对我的号码的访问都是通过属性,我可以将我的号码存储在几个数组中.
[更新]
大家好,谢谢你的回答!我期待在不同的盒子上进行大量的基准测试.关于需要:我想加快一个非常慢的计算,所以我要预先计算一个网格,将其加载到内存中,然后进行插值.
在并行处理项目列表时,是否有充分理由增加Futures(vs parallel collection)的复杂性?
List(...).par.foreach(x=>longRunningAction(x))
Run Code Online (Sandbox Code Playgroud)
VS
Future.traverse(List(...)) (x=>Future(longRunningAction(x)))
Run Code Online (Sandbox Code Playgroud) 我有一大堆自定义对象,我需要执行独立(可并行化)的任务,包括修改对象参数.我尝试过使用Manager().dict和'sharedmem'ory,但两者都没有用.例如:
import numpy as np
import multiprocessing as mp
import sharedmem as shm
class Tester:
num = 0.0
name = 'none'
def __init__(self,tnum=num, tname=name):
self.num = tnum
self.name = tname
def __str__(self):
return '%f %s' % (self.num, self.name)
def mod(test, nn):
test.num = np.random.randn()
test.name = nn
if __name__ == '__main__':
num = 10
tests = np.empty(num, dtype=object)
for it in range(num):
tests[it] = Tester(tnum=it*1.0)
sh_tests = shm.empty(num, dtype=object)
for it in range(num):
sh_tests[it] = tests[it]
print sh_tests[it]
print '\n' …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用该parallel包,并发现makeCluster无法完成.我已经跟踪了以下几行newPSOCKnode:
con <- socketConnection("localhost", port = port, server = TRUE,
blocking = TRUE, open = "a+b", timeout = timeout)
Run Code Online (Sandbox Code Playgroud)
该命令停止(授予默认超时值很大).我怀疑这是因为我们的工作计算机上存在一些"过度热心的IT规则",但欢迎任何有关如何跟踪(和修复)问题根源的建议.这是Windows7-64,"Enterprise",R 3.0.1.
更多信息:内部调试会话,我设置timeout < - 10,但它仍然挂起 - 好像socketConnection被困在某处甚至无法检查超时值.
这是与Richie Cotton的数据相同的转储:
Browse[3]> ls.str()
arg : chr "parallel:::.slaveRSOCK()"
cmd : chr "\"C:/Users/carl.witthoft/Documents/R/R-3.0.1/bin/x64/Rscript\" -e \"parallel:::.slaveRSOCK()\" MASTER=localhost PORT=11017 OUT="| __truncated__
env : chr "MASTER=localhost PORT=11017 OUT=/dev/null TIMEOUT=2592000 METHODS=TRUE XDR=TRUE"
machine : chr "localhost"
manual : logi FALSE
master : chr "localhost"
methods : logi TRUE …Run Code Online (Sandbox Code Playgroud) 我有这个看似琐碎的并行快速实现,代码如下:
import System.Random
import Control.Parallel
import Data.List
quicksort :: Ord a => [a] -> [a]
quicksort xs = pQuicksort 16 xs -- 16 is the number of sparks used to sort
-- pQuicksort, parallelQuicksort
-- As long as n > 0 evaluates the lower and upper part of the list in parallel,
-- when we have recursed deep enough, n==0, this turns into a serial quicksort.
pQuicksort :: Ord a => Int -> [a] -> [a]
pQuicksort _ [] = …Run Code Online (Sandbox Code Playgroud) 有没有办法让gmake永远不会从一组并行运行两个目标?
我不想使用.NOTPARALLEL,因为它强制整个Makefile按顺序运行,而不仅仅是所需的部分.
我还可以添加依赖项,以便一个依赖于另一个,但是然后(除了uglu)我需要构建所有它们以构建最后一个,这是不必要的.
我需要这个的原因是我的Makefile的一部分(只有一部分)调用ghc --make,它自己处理它的依赖.并且不可能在两个不同的目标上并行运行它,因为如果两个目标共享一些依赖关系,它们可以重写彼此的.o文件.(但ghc顺序调用很好.)
更新:举一个具体的例子.假设我需要在Makefile中编译两个程序:
prog1取决于prog1.hs和mylib.hs;prog2取决于prog2.hs和mylib.hs.现在,如果我调用ghc --make prog1.hs,它会检查它的依赖,既编译prog1.hs并mylib.hs到各自的目标和接口文件和链接prog1.我打电话时也是如此ghc --make prog2.hs.因此,如果两个命令并行运行,则会覆盖mylib.o另一个命令,从而导致其严重失败.
但是,我需要它既不prog1依赖prog2也不反过来,因为它们应该单独编译.(实际上它们非常庞大,有很多模块,需要编译它们都会大大减慢开发速度.)
我有一个描述地面集的矩阵NxM(通常是10k X 10k元素).每行代表一个对象,每列代表一个特定的特征.例如,在矩阵中
f1 f2 f3
x1 0 4 -1
x2 1 0 5
x3 4 0 0
x4 0 1 0
Run Code Online (Sandbox Code Playgroud)
对象x1在特征1中具有值0,在特征1中具有值4,在特征-1中具有值0.这个值是一般实数(double's).
我必须计算所有对象(所有对线)之间的几个自定义距离/不相似度.为了比较,我想计算L1(曼哈顿)和L2(欧几里德)距离.
我使用Eigen库来执行我的大部分计算.为了计算L2(欧几里得),我使用以下观察:对于两个大小为n的向量a和b,我们有:
||a - b||^2 = (a_1 - b_1)^2 + (a_2 - b_2)^2 + ... +(a_n - b_n)^2
= a_1^2 + b_1^2 - 2 a_1 b_1 + a_2^2 + b_2^2 - 2 a_2 b_2 + ... + a_n^2 + b_n^2 - 2 a_n b_n
= a . a + b . … 我试图在一个简单的例子上运行并行循环.
我究竟做错了什么?
from joblib import Parallel, delayed
import multiprocessing
def processInput(i):
return i * i
if __name__ == '__main__':
# what are your inputs, and what operation do you want to
# perform on each input. For example...
inputs = range(1000000)
num_cores = multiprocessing.cpu_count()
results = Parallel(n_jobs=4)(delayed(processInput)(i) for i in inputs)
print(results)
Run Code Online (Sandbox Code Playgroud)
代码的问题在于,当在Python 3中的Windows环境下执行时,它会打开num_corespython实例来执行并行作业,但只有一个是活动的.这不应该是这种情况,因为处理器的活动应该是100%而不是14%(在i7-8个逻辑核心下).
为什么额外的实例没有做任何事情?