質問: '__main__': main() ``` ### 試したこと 色々、コアの数を変更したりスレッドを利用したりしてみましたがなかなか成果か現れません。 ### 補足情報(FW/ツールのバージョンなど) [実行環境] MacBook Pro (15-inch, 2016) プロセッサ : 2.6 GHz Intel Core i7 ( 4コア8スレッド ) メモリ : 16 GB 2133 MHz LPDDR3 Python 3.6.4 [実行結果] 1コア:93.36475276947021秒 100% 2コア:45.95268726348877秒 約203% 3コア:32.04803204536438秒 約291% 4コア:25.691081047058105秒 約363% 5コア:25.711262941360474秒 約363% 6コア:24.469857692718506秒 約381% 7コア:23.86842966079712秒 約391% 8コア:23.69063401222229秒 約394%
回答: 本質的には、マルチプロセス処理にはかなりオーバーヘッドがあります。特にpythonの実装だと、プロセス間通信にpickleを使っていますし。ですから、まずそこで限界があります。 今回のケースでは更に、CPUのコア数の限界があります。8コアと仰っていますが、恐らく4コア8スレッドのハイパースレッディング機能のあるCPUではないかと思います。 あくまでも物理的には4コアですから、4(ハードウェア)スレッド以上使っても(処理内容にもよりますが)あまり高速化されないのが普通です。 参考: ハイパースレッディング (Hyper-Threading)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 同時マルチスレッディング - Wikipedia ASCII.jp:Core iシリーズにも使われる「SMT」の利点と欠点 (1/4)|ロードマップでわかる!当世プロセッサー事情 マルチスレッドで高速化出来ない件に関しては、GILで調べるとわかります。 結論だけ書くと、基本的に、そのマルチスレッドは演算を高速化する目的には使えません。 参考: karky7のブログ: PythonのGILについて簡単に調べてみました グローバルインタプリタロック - Wikipedia