python-multiprocessing/multithreading 我错过了什么?
What am I missing in python-multiprocessing/multithreading?
我在 numpy 中创建、相乘然后对两个大矩阵的所有元素求和。我用两种方法、一个循环和 multiprocessing
模块的帮助(参见下面的代码片段)执行了数百次。
def worker_loop(n):
for i in n:
mul = np.sum(np.random.normal(size=[i,i])*np.random.normal(size=[i,i]))
def worker(i):
mul = np.sum(np.random.normal(size=[i,i])*np.random.normal(size=[i,i]))
n = range(100,300)
pool = ThreadPool(2)
pool.map(worker, n)
pool.close()
pool.join()
worker_loop(n)
测量时间表明 循环 比 multiprocessing
快。我也试过 threading
模块但没有成功(然后我读到这是个坏主意;阅读更多 here)
我开始尝试多线程,因为我需要将图像、标签、边界框……转换为 tfrecords。为此,我正在研究 tensorflow/inception 中的一个文件(如果你想深入了解 build_imagenet_data.py, line 453)。我相信多线程在这里起作用,这就是他们使用它的原因。
说到这里,我的问题可以这样表述,
- 我的代码中缺少什么;是否可以通过小的修改实现某些目标?
- 因为 tensorflow 是用 c++ 和 CUDA 编写的,所以 inception 中的示例是否有效?
- 什么时候建议将多处理或多线程与 numpy、tensorflow 等一起使用?
总有一些开销(同步、数据准备、数据复制等)。
但是:如果设置良好,您在 numpy 中的矩阵向量和向量向量操作已经是多线程的,使用 BLAS(这是无处不在的艺术标准,包括 numpy、matlab 和可能的 tensorflow 的 cpu-后端;尽管有不同的实现。
因此,如果 BLAS 能够占据所有核心(大尺寸更容易),您只会看到开销。
是的,在它的核心中,tensorflow 将至少由 C/C++/Fortran 加上 BLAS 之一实现,因为它的 CPU-backend 和一些 Cuda-libs 以 GPU 为目标。这也意味着,梯度计算和优化计算等核心算法永远不需要外部并行化(在所有用例的 99.9% 中)。
我在 numpy 中创建、相乘然后对两个大矩阵的所有元素求和。我用两种方法、一个循环和 multiprocessing
模块的帮助(参见下面的代码片段)执行了数百次。
def worker_loop(n):
for i in n:
mul = np.sum(np.random.normal(size=[i,i])*np.random.normal(size=[i,i]))
def worker(i):
mul = np.sum(np.random.normal(size=[i,i])*np.random.normal(size=[i,i]))
n = range(100,300)
pool = ThreadPool(2)
pool.map(worker, n)
pool.close()
pool.join()
worker_loop(n)
测量时间表明 循环 比 multiprocessing
快。我也试过 threading
模块但没有成功(然后我读到这是个坏主意;阅读更多 here)
我开始尝试多线程,因为我需要将图像、标签、边界框……转换为 tfrecords。为此,我正在研究 tensorflow/inception 中的一个文件(如果你想深入了解 build_imagenet_data.py, line 453)。我相信多线程在这里起作用,这就是他们使用它的原因。
说到这里,我的问题可以这样表述,
- 我的代码中缺少什么;是否可以通过小的修改实现某些目标?
- 因为 tensorflow 是用 c++ 和 CUDA 编写的,所以 inception 中的示例是否有效?
- 什么时候建议将多处理或多线程与 numpy、tensorflow 等一起使用?
总有一些开销(同步、数据准备、数据复制等)。
但是:如果设置良好,您在 numpy 中的矩阵向量和向量向量操作已经是多线程的,使用 BLAS(这是无处不在的艺术标准,包括 numpy、matlab 和可能的 tensorflow 的 cpu-后端;尽管有不同的实现。
因此,如果 BLAS 能够占据所有核心(大尺寸更容易),您只会看到开销。
是的,在它的核心中,tensorflow 将至少由 C/C++/Fortran 加上 BLAS 之一实现,因为它的 CPU-backend 和一些 Cuda-libs 以 GPU 为目标。这也意味着,梯度计算和优化计算等核心算法永远不需要外部并行化(在所有用例的 99.9% 中)。