小编phy*_*Guy的帖子

Numpy突然使用所有CPU

直到最近,当我使用像np.dot(A,B)这样的numpy方法时,只使用了一个核心.但是,从今天开始,我的linux机器的所有8个核心都在使用,这是一个问题.

最小的工作示例:

import numpy as np
N = 100

a = np.random.rand(N,N)
b = np.random.rand(N,N)

for i in range(100000):
    a = np.dot(a,b)
Run Code Online (Sandbox Code Playgroud)

在我的另一台笔记本电脑上,它在单个核心上运行良好.这可能是由于一些新的图书馆?

今天早上我通过pip更新了matplotlib和cairocffi,但这就是全部.

任何想法如何回到单核心?

编辑:

我跑的时候

np.__config__.show()
Run Code Online (Sandbox Code Playgroud)

我得到以下输出

openblas_info:
    libraries = ['openblas', 'openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
    library_dirs = ['/usr/local/lib']
openblas_lapack_info:
    libraries = ['openblas', 'openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
    library_dirs = ['/usr/local/lib']
lapack_opt_info:
    libraries = ['openblas', 'openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
    library_dirs = ['/usr/local/lib']
blas_mkl_info:
  NOT AVAILABLE
blas_opt_info:
    libraries = …
Run Code Online (Sandbox Code Playgroud)

python numpy

6
推荐指数
1
解决办法
1649
查看次数

加速GPU与CPU进行矩阵运算

我想知道多少GPU计算可以帮助我加快模拟速度.

我的代码的关键部分是矩阵乘法.基本上代码看起来像下面的python代码,矩阵为1000,循环为long.

import numpy as np
m_size = 1000
sim_length = 50

a = np.random.rand(m_size, m_size)
b = np.random.rand(m_size, m_size)

for j in range(sim_length):
    result = np.dot(a,b)
Run Code Online (Sandbox Code Playgroud)

注意:我的矩阵很密集,大多数是随机的,循环是用cython编译的.

我天真的猜测是我有两个因素:

  • 更多并行线程(目前订购1个线程,订单100个线程的GPU?) - >订单加速100?[ 来源已经过时,从2011年开始]
  • 较低的处理器频率(目前3Ghz,GPU通常为2 Ghz) - >忽略

我希望这个观点是天真的,所以我错过了什么?

python gpu gpgpu matrix-multiplication

6
推荐指数
3
解决办法
9311
查看次数

Python-日志内存使用率

当某些程序正在运行时,python 3中有没有办法记录内存(内存)使用情况?

一些背景信息。我使用Slurm在HPC集群上运行模拟,在提交作业之前,我必须保留一些内存。我知道我的工作需要很多记忆,但是我不确定有多少。所以我想知道是否有一个简单的解决方案来记录一段时间内的内存。

python slurm

6
推荐指数
1
解决办法
1100
查看次数

在Slurm上使用python的多处理

我试图在Slurm上运行一些并行代码,其中不同的进程不需要进行通信。我天真地使用了python的slurm包。但是,看来我只在一个节点上使用了cpu。

例如,如果我有4个节点,每个节点有5个cpu,则我只会同时运行5个进程。如何告诉多处理程序在不同的节点上运行?

python代码如下所示

import multiprocessing

def hello():
    print("Hello World")

pool = multiprocessing.Pool() 
jobs = [] 
for j in range(len(10)):
    p = multiprocessing.Process(target = run_rel)
    jobs.append(p)
    p.start() 
Run Code Online (Sandbox Code Playgroud)

该问题与这一问题相似,但尚未得到详细解决。

python multiprocessing slurm

5
推荐指数
2
解决办法
5516
查看次数

Cython优化

我正在用Python编写一个相当大的模拟,希望从Cython中获得一些额外的性能.但是,对于下面的代码,我似乎没有那么多,即使它包含一个相当大的循环.大约100k次迭代.

我是否让一些初学者犯了错误,或者这个循环大小只是为了小而产生很大影响?(在我的测试中,Cython代码仅快了约2倍).

import numpy as np;
cimport numpy as np;
import math

ctypedef np.complex64_t cpl_t
cpl = np.complex64

def example(double a, np.ndarray[cpl_t,ndim=2] A):

    cdef int N = 100

    cdef np.ndarray[cpl_t,ndim=3] B = np.zeros((3,N,N),dtype = cpl)

    cdef Py_ssize_t n, m;
    for n in range(N):
        for m in range(N):

            if np.sqrt(A[0,n]) > 1:
                B[0,n,m] = A[0,n] + 1j * A[0,m]

    return B;
Run Code Online (Sandbox Code Playgroud)

python optimization numpy cython

4
推荐指数
1
解决办法
1337
查看次数