Numpyドット操作はすべてのCPUコアを使用しているわけではありません

ラム・イダバラパティ
  • 私は2つの行列でnumpyドット積を実行しています(aとbが2つの行列であると仮定します)。

  • aの形状が(10000、10000)で、bの形状が(1、10000)の場合、numpy.dot(a、bT)はすべてのCPUコアを使用しています。

  • ただし、aの形状が(10000、10000)で、bの形状が(2、10000)の場合、numpy.dot(a、bT)はすべてのCPUコアを使用しているわけではありません(1つのみを使用しています)。

これは、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
ナガベンカテッシュガヴィーニ

Numpyドット操作はすべてのCPUコアを使用しているわけではありません

numpy.show_config()は、アンダースコアレベルでOpenBLASを使用していることを明確に示しています。

したがって、OpenBLASは並列計算を担当する実際のものです。

しかし、sgemmOpenBLASでは、特定のしきい値まで計算を並列化しません(あなたの場合、bの行サイズは2から15です)。

回避策として、sgemmファイルのしきい値(GEMM_MULTITHREAD_THRESHOLD)を変更し、numpyを使用してOpenBLASをコンパイルできます。

GEMM_MULTITHREAD_THRESHOLD値を4から0変更して、すべてのsgemm計算を並列化します

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

OpenMpはすべてのCPU(デュアルソケット、Windows、Microsoft Visual Studio)を利用しているわけではありません

分類Dev

GNUParallelはすべてのプロセッサを使用しているわけではありません

分類Dev

角度コードがすべての注文を表示しているわけではありません

分類Dev

POSTメソッドがすべてのデータを送信しているわけではありません

分類Dev

pthreads_cond_broadcastは、待機しているすべてのスレッドをウェイクアップするわけではありません

分類Dev

Python-プーリングはすべてのコアを使用するわけではありません

分類Dev

ループはすべてのラウンドを出力しているわけではありません

分類Dev

PythonのStripメソッドはすべてをクリアするわけではありません

分類Dev

グリッドビュービューの高さがすべての水平アイテムをラップしているわけではありません

分類Dev

Tableauはすべてのレコードをカウントするわけではありません

分類Dev

rtlを使用したいのですが、すべてのコンポーネントを使用するわけではありません

分類Dev

Dockerコンテナ内で実行している場合、Node.jsクラスターモジュールはすべてのCPUコアを使用できるわけではありません

分類Dev

PyCharmがすべてのDjangoテストをテストしているわけではありません

分類Dev

Djangoobject.filterがすべての結果をロードしているわけではありません

分類Dev

Gitがすべてのファイルをプッシュしているわけではありません

分類Dev

SQL:トリガーがすべての行を収集しているわけではありません

分類Dev

multiがtrueに設定されていても、MongoDBがすべてのレコードを更新しているわけではありません

分類Dev

PowerShellのGet-Memberコマンドレットは、すべてのメソッドを報告するわけではありません

分類Dev

VBAコードはすべてのシートで機能するわけではありません

分類Dev

drcパッケージの用量反応曲線プロットはすべてのポイントを示しているわけではありません

分類Dev

TestNGは、クラスに存在するすべてのメソッドを実行しているわけではありません

分類Dev

Apache Spark(graphx)は、おそらくすべてのコアとメモリを利用しているわけではありません

分類Dev

「すべてのコードパスが値を返すわけではありません」エラーがメソッドで発生しますが、すべてのシナリオをカバーするためにいくつかのifステートメントを使用しました

分類Dev

すべてのアップデートをインストールできるわけではありません:部分的なアップグレード

分類Dev

すべてのアップデートをインストールできるわけではありません:部分的なアップグレード

分類Dev

メソッド内のすべてのコードが実行されるわけではありません

分類Dev

すべてのアップデートをインストールできるわけではありません(パッケージがありません)

分類Dev

HttpGetActionResultメソッドすべてのコードパスが値を返すわけではありません

分類Dev

このCodeigniter関数は、すべてのアクセント付き文字を考慮しているわけではありません

Related 関連記事

  1. 1

    OpenMpはすべてのCPU(デュアルソケット、Windows、Microsoft Visual Studio)を利用しているわけではありません

  2. 2

    GNUParallelはすべてのプロセッサを使用しているわけではありません

  3. 3

    角度コードがすべての注文を表示しているわけではありません

  4. 4

    POSTメソッドがすべてのデータを送信しているわけではありません

  5. 5

    pthreads_cond_broadcastは、待機しているすべてのスレッドをウェイクアップするわけではありません

  6. 6

    Python-プーリングはすべてのコアを使用するわけではありません

  7. 7

    ループはすべてのラウンドを出力しているわけではありません

  8. 8

    PythonのStripメソッドはすべてをクリアするわけではありません

  9. 9

    グリッドビュービューの高さがすべての水平アイテムをラップしているわけではありません

  10. 10

    Tableauはすべてのレコードをカウントするわけではありません

  11. 11

    rtlを使用したいのですが、すべてのコンポーネントを使用するわけではありません

  12. 12

    Dockerコンテナ内で実行している場合、Node.jsクラスターモジュールはすべてのCPUコアを使用できるわけではありません

  13. 13

    PyCharmがすべてのDjangoテストをテストしているわけではありません

  14. 14

    Djangoobject.filterがすべての結果をロードしているわけではありません

  15. 15

    Gitがすべてのファイルをプッシュしているわけではありません

  16. 16

    SQL:トリガーがすべての行を収集しているわけではありません

  17. 17

    multiがtrueに設定されていても、MongoDBがすべてのレコードを更新しているわけではありません

  18. 18

    PowerShellのGet-Memberコマンドレットは、すべてのメソッドを報告するわけではありません

  19. 19

    VBAコードはすべてのシートで機能するわけではありません

  20. 20

    drcパッケージの用量反応曲線プロットはすべてのポイントを示しているわけではありません

  21. 21

    TestNGは、クラスに存在するすべてのメソッドを実行しているわけではありません

  22. 22

    Apache Spark(graphx)は、おそらくすべてのコアとメモリを利用しているわけではありません

  23. 23

    「すべてのコードパスが値を返すわけではありません」エラーがメソッドで発生しますが、すべてのシナリオをカバーするためにいくつかのifステートメントを使用しました

  24. 24

    すべてのアップデートをインストールできるわけではありません:部分的なアップグレード

  25. 25

    すべてのアップデートをインストールできるわけではありません:部分的なアップグレード

  26. 26

    メソッド内のすべてのコードが実行されるわけではありません

  27. 27

    すべてのアップデートをインストールできるわけではありません(パッケージがありません)

  28. 28

    HttpGetActionResultメソッドすべてのコードパスが値を返すわけではありません

  29. 29

    このCodeigniter関数は、すべてのアクセント付き文字を考慮しているわけではありません

ホットタグ

アーカイブ