すこしプログラムの質問から離れてしまうかもしれないですが,答えて頂けると幸いです.
CPUがcore i7 9700kでスレッドが8個あるはずのパソコンでプログラムをしているのですが,並列処理等していないのにcpuの使用率が90パーセントから100パーセント近くなってしまいます.古い4スレッドのパソコンで同じプログラムを実行してもcpuの使用率は50パーセントもいかないです.何か設定等の問題でしょうか?環境はpycharmを使っています.
何がCPUを試用しているのか調べましょう。
また、ディスクアクセス率が高くないかもですね。
AnacondaとかのMKLを内部で使ってるnumpyでは、行列計算とかで可能なら勝手に並列計算してくれます
> 古い4スレッドのパソコンで同じプログラムを実行してもcpuの使用率は50パーセントもいかない
古いパソコンのnumpyはOpenBLASを使ってて、CPUがcore i7 9700kのパソコンのnumpyはMKLを使ってる、ということはありませんでしょうか?
それぞれのパソコンのPythonで下記を実行したら分かります
import numpy as np
np.__config__.show()
参考
https://insilico-notebook.com/python-blas-performance/#toc_id_3
承知しました.ディスク使用率は低く,CPUはpycharmに使われているのですが,もっと細かく調べてみます.
> CPUはpycharmに使われている
あれ、CPUはPythonに使われてるのではないのですか
では、私のコメントは的外れです
失礼しました
>fbpb0様
すいません,私の言葉足らずです.pycharmでpythonのプログラムを動かしているので,pythonにCPUが使われていると思います.
調べたところ,両者ともMKLが使われていました.
> 両者ともMKLが使われていました.
新しいCPUの方がMKLでの最適化がより有効に効いて、全コアを有効に使って計算されてる、みたいなことかも
import numpy as np
import time
n = 10000; A = np.random.rand(n, n); B = np.random.rand(n, n)
tmp = time.perf_counter(); C = A @ B; t = time.perf_counter() - tmp
print(t)
を実行したら、MKLが使われてたら並列計算されると思います
最後に表示される「t」が、計算にかかった時間です
環境変数「MKL_NUM_THREADS」または「OMP_NUM_THREADS」に「1」を設定したら、MKLでのスレッド数が1になり並列計算されなくなるので、並列計算される場合よりも「t」が大きくなるはずです
並列計算をやめると「t」が何倍になるのかが、並列計算の効果です (差では無くて比で考える)
それが、古いパソコンと、CPUがcore i7 9700kのパソコンで違うのでは?
(CPUがたくさん使われるcore i7 9700kの方が並列計算の効果が大きい)
回答2件
あなたの回答
tips
プレビュー