Я делаю произведение на одну точку с двумя точками (Предположим, a и b - две матрицы).
Когда форма a равна (10000, 10000) и форма b равна (1, 10000), тогда numpy.dot (a, bT) использует все ядра процессора.
Но когда форма a равна (10000, 10000) и форма b (2, 10000), то numpy.dot (a, bT) не использует все ядра ЦП (только одно).
Этопроисходит, когда размер строки b составляет от 2 до 15 (то есть от (2, 10000) до (15, 10000)).
Пример:
import numpy as np
a = np.random.rand(10**4, 10**4)
def dot(a, b_row_size):
b = np.random.rand(b_row_size, 10**4)
for i in range(10):
# dot operation
x = np.dot(a, b.T)
# Using all CPU cores
dot(a, 1)
# Using only one CPU core
dot(a, 2)
# Using only one CPU core
dot(a, 5)
# Using only one CPU core
dot(a, 15)
# Using all CPU cores
dot(a, 16)
# Using all CPU cores
dot(a, 50)
np.show_config ()
openblas_lapack_info:
define_macros = [('HAVE_CBLAS', None)]
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
lapack_opt_info:
define_macros = [('HAVE_CBLAS', None)]
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
blas_mkl_info:
NOT AVAILABLE
lapack_mkl_info:
NOT AVAILABLE
blas_opt_info:
define_macros = [('HAVE_CBLAS', None)]
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
blis_info:
NOT AVAILABLE
openblas_info:
define_macros = [('HAVE_CBLAS', None)]
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c