小编Bre*_*ood的帖子

多处理的最大大小.Queue项目?

我正在使用Python开发一个相当大的项目,该项目需要将一个计算密集型后台任务卸载到另一个核心,这样主服务就不会变慢.当multiprocessing.Queue用于传递工作进程的结果时,我遇到了一些显然很奇怪的行为.为a threading.Thread和a 使用相同的队列进行multiprocessing.Process比较,线程工作得很好但是在将大项放入队列后进程无法加入.注意:

import threading
import multiprocessing

class WorkerThread(threading.Thread):
    def __init__(self, queue, size):
        threading.Thread.__init__(self)
        self.queue = queue
        self.size = size

    def run(self):
        self.queue.put(range(size))


class WorkerProcess(multiprocessing.Process):
    def __init__(self, queue, size):
        multiprocessing.Process.__init__(self)
        self.queue = queue
        self.size = size

    def run(self):
        self.queue.put(range(size))


if __name__ == "__main__":
    size = 100000
    queue = multiprocessing.Queue()

    worker_t = WorkerThread(queue, size)
    worker_p = WorkerProcess(queue, size)

    worker_t.start()
    worker_t.join()
    print 'thread results length:', len(queue.get())

    worker_p.start()
    worker_p.join()
    print 'process results length:', len(queue.get())
Run Code Online (Sandbox Code Playgroud)

我已经看到了,这工作得很好size = 10000 …

python queue multithreading multiprocessing

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

来自多个进程的并发GPU内核执行

我有一个应用程序,我希望在多个进程之间共享一个GPU.也就是说,这些进程中的每一个都会创建自己的CUDA或OpenCL上下文,目标是相同的GPU.根据Fermi白皮书[1],应用程序级上下文切换小于25微秒,但是在GPU上启动时启动有效地序列化 - 因此Fermi不能很好地完成这项工作.根据Kepler白皮书[2],有一种叫做Hyper-Q的东西允许来自多个CUDA流,MPI进程或进程内线程的多达32个同时连接.

我的问题:是否有人在Kepler GPU上尝试过此操作并验证其内核是否在从不同进程调度时同时运行?这只是一个CUDA功能,还是可以在Nvidia GPU上与OpenCL一起使用?AMD的GPU是否支持类似的东西?

[1] http://www.nvidia.com/content/PDF/fermi_white_papers/NVIDIA_Fermi_Compute_Architecture_Whitepaper.pdf

[2] http://www.nvidia.com/content/PDF/kepler/NVIDIA-Kepler-GK110-Architecture-Whitepaper.pdf

cuda gpu nvidia opencl amd-processor

9
推荐指数
1
解决办法
2829
查看次数