标签: parallel-processing

使用parSapply生成随机数

我试图运行一个函数,函数中有一个随机数生成器.结果与我的预期不符,所以我做了以下测试:

# Case 1
set.seed(100)
A1 = matrix(NA,20,10)
for (i in 1:10) {
  A1[,i] = sample(1:100,20)
}

# Case 2
set.seed(100)
A2 = sapply(seq_len(10),function(x) sample(1:100,20))

# Case 3
require(parallel)
set.seed(100)
cl <- makeCluster(detectCores() - 1)
A3 = parSapply(cl,seq_len(10), function(x) sample(1:100,20))
stopCluster(cl)

# Check: Case 1 result equals Case 2 result
identical(A1,A2)
# [1] TRUE

# Check: Case 1 result does NOT equal to Case 3 result
identical(A1,A3)
# [1] FALSE

# Check2: Would like to check if it's a matter …
Run Code Online (Sandbox Code Playgroud)

random parallel-processing r

0
推荐指数
1
解决办法
571
查看次数

通过int在C中乘以和添加到int数组的最快方法?

我在C语言编程时学习了一些关于pthreads和性能的知识,我想知道最好的方法是int在数组中添加一个单独的元素(相当大的一个,大约有5000个元素)以及将a乘以int数组中的所有元素的最佳方法.

我尝试并行执行此操作,但没有太大改进.我的并行方法是传递struct包含add/multiply的值以及指向数组的指针.我将此作为论据传递给了pthread_create.在被调用的函数中,我将给定值添加/乘以数组中的所有元素.

我觉得有一种更好的方法可以将数字乘以或添加到数组中的所有5000个元素(或更多).我也听说过那些SIMD命令.这可能有助于这种情况吗?

c arrays parallel-processing pthreads

0
推荐指数
1
解决办法
187
查看次数

在Haskell中同步并行进程

在Haskell中,如何print并行运行多个(monad?)函数(例如)并按照完成时间的顺序查看它们的输出?我想要三个进程,每个进程最终都在打印函数中.

import Control.Parallel
main = a `par` b `pseq` (a,b)
    where
        a = print("ack",ack 3 10)
        b = print("fac",fac 42)
Run Code Online (Sandbox Code Playgroud)

如果我不使用pseq,它将显示par组合指定的最后一个.我想确保在程序结束之前完成所有进程.我试过这个,但它没有显示a,b的输出:

...
main = a `par` b `pseq` print("done.")
...
Run Code Online (Sandbox Code Playgroud)

注意:我的程序以以下行结束:

fac 0 = 1
fac n = n * fac (n-1)
ack 0 n = n+1
ack m 0 = ack (m-1) 1
ack m n = ack (m-1) (ack m (n-1))
Run Code Online (Sandbox Code Playgroud)

parallel-processing monads haskell

0
推荐指数
1
解决办法
140
查看次数

为什么我认为并行的程序不平行

package main

import (
    "fmt"
    "runtime"
    "sync"
)

var wg sync.WaitGroup

func alphabets() {
    for char := 'a'; char < 'a'+26; char++ {
        fmt.Printf("%c ", char)
    }
    wg.Done() //decrement number of goroutines to wait for
}

func numbers() {
    for number := 1; number < 27; number++ {
        fmt.Printf("%d ", number)
    }
    wg.Done()
}

func main() {
    runtime.GOMAXPROCS(2)
    wg.Add(2) //wait for two goroutines

    fmt.Println("Starting Go Routines")
    go alphabets()
    go numbers()

    fmt.Println("\nWaiting To Finish")

    wg.Wait() //wait for the two goroutines to …
Run Code Online (Sandbox Code Playgroud)

parallel-processing concurrency go

0
推荐指数
1
解决办法
158
查看次数

Python中的多处理.为什么没有加速?

我试图掌握Python中的多处理.我从创建此代码开始.它只是计算整数i的cos(i),并测量一个人使用多处理时和一个人不使用时的时间.我没有观察到任何时差.这是我的代码:

    import multiprocessing
    from multiprocessing import Pool
    import numpy as np
    import time


    def tester(num):
        return np.cos(num)


    if __name__ == '__main__':


        starttime1 = time.time()
        pool_size = multiprocessing.cpu_count()
        pool = multiprocessing.Pool(processes=pool_size,
                            )
        pool_outputs = pool.map(tester, range(5000000))
        pool.close()
        pool.join()
        endtime1 = time.time()    
        timetaken = endtime1 - starttime1  

        starttime2 = time.time()
        for i in range(5000000):
            tester(i)
        endtime2 = time.time()
        timetaken2 = timetaken = endtime2 - starttime2

        print( 'The time taken with multiple processes:', timetaken)
        print( 'The time taken the usual way:', timetaken2)
Run Code Online (Sandbox Code Playgroud)

我观察到两次测量之间没有(或非常小的)差异.我正在使用8芯机器,所以这是令人惊讶的.我在代码中做错了什么? …

python parallel-processing ipython multiprocessing python-3.x

0
推荐指数
1
解决办法
2894
查看次数

在MATLAB中并行执行

我是MATLAB的新手,我只是尝试执行一个并行的小程序,但问题是并行执行需要比串行执行更多的时间?


close all
clear all
clc

a= rand(1e6,1);
b= rand(1e6,1);
c= zeros(size(a));
d= ones(size(c));
e= zeros(size(d));

tic
tstart=tic;
for i=1:length(a)
    c(i)=a(i)+b(i);
    d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
    e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
    c(i)=a(i)+b(i);
    d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
    e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
    c(i)=a(i)+b(i);
    d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
    e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
end
t_normal_for=toc(tstart)

tstart=tic;
parfor i=1:length(a)
    c(i)=a(i)+b(i);
    d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
    e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
    c(i)=a(i)+b(i);
    d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
    e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
    c(i)=a(i)+b(i);
    d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
    e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
end
t_parfor=toc(tstart)

***************************************
t_normal_for =

    0.3860


t_parfor =

    2.8403
Run Code Online (Sandbox Code Playgroud)

谁能帮忙!事实上,我的计算机中有4名工人,MATLAB的版本是R2014a.请问另一个问题,我可以向计算机中的每个工作人员发送相同的功能吗?

提前谢谢Ammar

parallel-processing matlab execution

0
推荐指数
1
解决办法
71
查看次数

我可以(安全地)在Parallel.For循环结构中写入数组吗?

下面的代码片段是否会results针对迭代范围的所有索引正确写入?

虽然有多个线程同时访问同一个对象; 由于索引,每个线程都在写入内存中的唯一位置.

let results:NewType[] = Array.zeroCreate temp.Length
let mutable data = Unchecked.defaultof<OldType>

let loopResult = 
    System.Threading.Tasks.Parallel.For(
        0, 
        temp.Length, 
        (fun i -> 
            data <- temp.[i]
            results.[i] <- NewType(data.X, data.Y) 
        )
    )
Run Code Online (Sandbox Code Playgroud)

.net parallel-processing f# multithreading

0
推荐指数
1
解决办法
283
查看次数

{:任务1失败 - "无法找到功能"knn""出错

我试图在R上运行并行kNN程序,但我收到此错误:

{:任务1失败 - "无法找到功能"knn""出错

这是该计划:

library(class)
library(doSNOW)
library(foreach)

train <- read.csv('train.csv')
test <- read.csv('test.csv')
trainY <- read.csv('trainY.csv')
cl <- as.vector(as.matrix(trainY))

system.time(summary(knn(train, test, cl, k=25, prob = TRUE)))


clus <- makeCluster(4)
registerDoSNOW(clus)
countrows=nrow(test)

system.time(foreach( icount(countrows) ) %dopar% {
  summary(knn(train, test, cl, k=25, prob = TRUE))
})

stopCluster(clus)
Run Code Online (Sandbox Code Playgroud)

windows parallel-processing r knn

0
推荐指数
1
解决办法
7701
查看次数

并行返回错误结果的parallel_reduce

我正在尝试使用英特尔TBB parallel_reduce来获取由双精度组成的数组元素的总和.但是,与OpenMP减少实现相比,结果是不同的.

这是OpenMP的一个:

double dAverageTemp = 0.0;
#pragma omp parallel for reduction(+:dAverageTemp)
for (int i = 0; i < sCartesianSize; i++)
    dAverageTemp += pdTempCurr[i];
Run Code Online (Sandbox Code Playgroud)

此代码返回正确的值"317.277 493 "; 但是这个TBB代码:

double dAverageTemp = tbb::parallel_reduce(tbb::blocked_range<double*>(pdTempCurr, pdTempCurr + sCartesianSize - 1),
                                        0.0,
                                        [](const tbb::blocked_range<double*> &r, double value) -> double {
                                            return std::accumulate(r.begin(), r.end(), value);
                                        },
                                        std::plus<double>()
                                        );
Run Code Online (Sandbox Code Playgroud)

坚持认为结果是"317.277 193 ".

我在这里错过了什么?

c++ parallel-processing tbb openmp

0
推荐指数
1
解决办法
79
查看次数

OpenMDAOv1.x:警告:并行派生不在MPI下运行

我刚刚在超级计算机上安装了OpenMDAOv1.3.安装成功,所有测试都通过或跳过.但是,当我运行测试时,我得到以下警告:

*path/OpenMDAO/openmdao/core/driver.py:228: UserWarning: parallel derivs %s specified but not running under MPI
  warnings.warn("parallel derivs %s specified but not running under MPI")
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做(如果有的话),所以我正在寻找有关警告信息含义的信息.我们计划与OpenMDAO的内置MPI功能并行运行.我目前在系统上加载了openmpi-1.8.4.

parallel-processing mpi openmdao

0
推荐指数
1
解决办法
98
查看次数