2024年09月13日

一日一項目 高速化で四苦八苦してたのしー といいのにぃ

∑(1/n)を n = 1 ~ 10億まで計算。これをPython, C++で速度比較。PythonはNumbaの jit を使うと高速化できた。さらに prangeも使うと並列化できて高速化。

@jit(nopython=True, parallel=True)
def series_sum(num_max):

関数の前に @jit()を置くだけでJITコンパイラが動き、並列化も可能となるのです。すばらしい。

C++の場合にはOpenMPを使う。これも使い方は簡単であった。高速化達成である。Pythonの @jitよりも速いであるぞま。

ところがOpenMPの場合には出力が混ざる現象か出た。計算途中結果を表示するプログラムだったので。Pythonはそれやってない。
並列化すると出力が混ざる・・・・ std::cout << をいくつかが同時に処理するかららしい。Copilot先生に訊いた。そして混ざらないようにする指示も紹介があった。それを真似たのだが混ざった。ここでワタクシはドン詰まりである。ま~計算結果だけ必要で途中結果はいらんのでそういう表示しなければ無問題!!  どや。

つーわけでPythonのコードでも途中表示するようにしたら混ざるのかテストだ。そのうち。

なにかやるとなにか出てくる。問題が出てくる、弊害が出てくる、副作用が出てくる。それこそが生きているって事なのだよ、ちみい。問題がなにもない = なにもやっとらん なのだわす。

このように自分の出来の悪さをごまかすのだが、いつの日か出来の悪さを克服したいものである。どや。某物書きの真似してみました(笑)

posted by toinohni at 07:27| 東京 ☀| Comment(0) | ソフト系雑学 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください