标签: parallel-processing

EJB如何并行化长时间CPU密集型流程?

该应用程序具有CPU密集型长进程,当客户端请求时,该进程当前在一个服务器(EJB方法)上串行运行.

理论上可以(从概念的角度)将该进程拆分为N个块并并行执行它们,只要可以收集并连接所有并行作业的输出,然后再将其发送回发起进程的客户端.我想使用这种并行化来优化性能.

如何使用EJB实现此并行化?我知道我们不应该在EJB方法中创建线程.相反,我们应该发布消息驱动bean(MDB)消息(每个作业一个).但那时它不再是同步通话了.在这种情况下,同步似乎是一个要求,因为我需要在将所有作业的输出发送回客户端之前收集它们的输出.

这有解决方案吗?

java architecture parallel-processing ejb

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

英特尔TBB许可证

我对英特尔线程构建模块商业版与开源许可证感到困惑.开源版本在GPLv2下获得了运行时异常的许可,但是这用普通英语意味着什么呢?它是否可以用于商业的闭源应用程序,只要它只与未修改的.dll链接?

parallel-processing licensing gpl intel tbb

13
推荐指数
1
解决办法
2596
查看次数

CUDA:if语句中的__syncthreads()

我有一个关于CUDA同步的问题.特别是,我需要对if语句中的同步进行一些澄清.我的意思是,如果我将__syncthreads()放在if语句的范围内,该块语句被块内的一小部分线程击中,会发生什么?我认为有些线程将"永远"等待其他不会达到同步点的线程.所以,我编写并执行了一些示例代码来检查:

__global__ void kernel(float* vett, int n)
{
    int index = blockIdx.x*blockDim.x + threadIdx.x;
    int gridSize = blockDim.x*gridDim.x;

    while( index < n )
    {   
        vett[index] = 2;
        if(threadIdx.x < 10)
        {
            vett[index] = 100;
            __syncthreads();
        }
        __syncthreads();

        index += gridSize;
    }
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,我观察到输出非常"正常"(64个元素,块大小为32):

100 100 100 100 100 100 100 100 100 100 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
100 100 100 100 100 …
Run Code Online (Sandbox Code Playgroud)

c parallel-processing cuda synchronizing

13
推荐指数
3
解决办法
6517
查看次数

Python大迭代次数失败

我使用多处理模块在Python中编写了简单的monte-carloπ计算程序.它工作正常,但是当我为每个工作者传递1E + 10次迭代时,会出现一些问题,结果是错误的.我无法理解问题是什么,因为1E + 9迭代的一切都很好!

import sys
from multiprocessing import Pool
from random import random


def calculate_pi(iters):
    """ Worker function """

    points = 0  # points inside circle

    for i in iters:
        x = random()
        y = random()

        if x ** 2 + y ** 2 <= 1:
            points += 1

    return points


if __name__ == "__main__":

    if len(sys.argv) != 3:
        print "Usage: python pi.py workers_number iterations_per_worker"
        exit()

    procs = int(sys.argv[1])
    iters = float(sys.argv[2])  # 1E+8 is cool …
Run Code Online (Sandbox Code Playgroud)

python iteration parallel-processing pi montecarlo

13
推荐指数
1
解决办法
1182
查看次数

多处理中不同工作人员的输出相同

我有一些非常简单的案例,可以将工作分解并分配给工人.我从这里尝试了一个非常简单的多处理示例:

import multiprocessing
import numpy as np
import time

def do_calculation(data):
    rand=np.random.randint(10)
    print data, rand
    time.sleep(rand)
    return data * 2

if __name__ == '__main__':
    pool_size = multiprocessing.cpu_count() * 2
    pool = multiprocessing.Pool(processes=pool_size)

    inputs = list(range(10))
    print 'Input   :', inputs

    pool_outputs = pool.map(do_calculation, inputs)
    print 'Pool    :', pool_outputs
Run Code Online (Sandbox Code Playgroud)

上面的程序产生以下输出:

Input   : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0 7
1 7
2 7
5 7
3 7
4 7
6 7
7 7
8 6 …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing multiprocessing

13
推荐指数
1
解决办法
3113
查看次数

goroutines如何在多核处理器上运行

我是Go语言的新手,所以如果我的问题非常基本,请原谅.我写了一个非常简单的代码:

func main(){
    var count int // Default 0

    cptr := &count

    go incr(cptr)

    time.Sleep(100)

    fmt.Println(*cptr)
}

// Increments the value of count through pointer var
func incr(cptr *int) {
    for i := 0; i < 1000; i++ {
            go func() {
                    fmt.Println(*cptr)
                    *cptr = *cptr + 1
            }()
      }
    }
Run Code Online (Sandbox Code Playgroud)

count的值应该增加一个循环运行的次数.考虑案例:

循环运行100次 - >计数值为100(循环运行100次时这是正确的).

循环运行> 510次 - >计数值为508或510.即使它是100000也会发生.

我在8核处理器机器上运行它.

parallel-processing go goroutine

13
推荐指数
2
解决办法
7536
查看次数

如何在haskell快速傅里叶变换上应用parallelim数据?

我有一个用于解决快速傅里叶变换的haskell代码,我想在其上应用数据并行性.但是,我使用的每个策略都会产生太多的火花,而且大多数都会溢出.

有没有人知道如何在以下算法上应用良好的数据并行策略:

-- radix 2 Cooley-Tukey FFT

fft::[Complex Float] -> [Complex Float]
fft [a] = [a]
fft as = interleave ls rs
  where
    (cs,ds) = bflyS as
    ls = fft cs
    rs = fft ds

interleave [] bs = bs
interleave (a:as) bs = a : interleave bs as

bflyS :: [Complex Float] -> ([Complex Float], [Complex Float])
bflyS as = (los,rts)
  where
    (ls,rs) = halve as
    los = zipWith (+) ls rs
    ros = zipWith (-) ls rs
    rts …
Run Code Online (Sandbox Code Playgroud)

parallel-processing haskell fft

13
推荐指数
1
解决办法
706
查看次数

13
推荐指数
1
解决办法
8326
查看次数

如何并行化排序?

我想分类很多东西.

Julia的标准库排序是单线程的.如何利用我的多核机器更快地对事物进行排序?

sorting parallel-processing multithreading julia

13
推荐指数
1
解决办法
542
查看次数

Java8中Iterator和Spliterator的区别

我在学习的过程中认识到这Parallelism是一个主要优势Spliterator.

这可能是一个基本的问题,但任何人都可以解释我的主要差异Iterator,并Spliterator和举一些例子?

parallel-processing iterator java-8 spliterator

13
推荐指数
2
解决办法
5417
查看次数