2024年08月11日

一日一項目 Python高速化JITってものがある なあぁにぃぃみつけちまったな

Python本を読んでいたら高速化にJITというものがあるとのことなので試し。numba ね。

from numba import jit
import numpy as np
import time

# JITコンパイルを適用する関数
@jit(nopython=True)
def sum_array(arr):
    total = 0
    for i in range(arr.shape[0]):
        total += arr[i]
    return total

# 大きな配列を作成
arr = np.random.rand(1000000)
# JITコンパイルされた関数を実行
# ある処理の実行時間計測
start_time = time.time()
result = sum_array(arr)
# 計測したい処理
end_time = time.time()
elapsed_time = end_time - start_time
print("処理にかかった時間:", elapsed_time, "秒")
print(result)

   Gemini先生かchatGPT3.5先生かの回答だが、なにか?  まずは jit を importするのである。おまいはそこで じっと しとけーーや。その じっと とちゃーーーーーう!!
で実は上のコードを実行して、次に @jitのところをコメントアウトして比較したらまったく高速化できとらん。コメントアウトした方が早い!!  なんじゃこりゃあ・・・・
でGemini先生かchatGPT3.5先生かに訊いたのである。するとJITは初回は手間暇があるので高速にならない、2回目から高速になるというのだ。上のような処理を1回だけやるのでは高速化は無理ってことだで。そこで次のような話になるのですわっと。

from numba import jit
import numpy as np
import time

@jit(nopython=True)
def sum_array(arr):
    total = 0
    for i in range(arr.shape[0]):
        total += arr[i]
    return total

arr = np.random.rand(1000000)
# 初回実行
start_time = time.time()
result = sum_array(arr)
print("初回実行時間:", time.time() - start_time)

# 2回目以降の実行
start_time = time.time()
result = sum_array(arr)
print("2回目以降の実行時間:", time.time() - start_time)

初回実行は高速化と無関係。かえって時間かかるわい。しかし、一度 じっと しておると2回めは高速なのである。
2回め以降は JIT Compilerでコンパイルしたバイナリーを使うからである(この表現は正しいか知らんが)。

こういうのJulia言語でもあったなあ。Julia言語はc/c++に匹敵するぐらいの高速だというデタラメ宣伝があってな。ワタクシ、試してみて初回の遅さに、デタラメ言うんじゃねー、遅いわい。とむかっ腹。グラフ描画のプログラムだけど。それも初回はJITが仕事するので遅くなる。2回めからは高速になるって。

するとnumbaで高速化するって、要するに何度も使う関数があれば2回め以降は高速になるってものだなあ。つーか、それ、どのような用途に?  知らん。

ま~ numba というJITがあるぞのって雑学ですわ。そもそもワタクシが高速化が必要なアプリを書くわけではないのでして、えーえー。

というわけで外気36℃とか。これがな、スーパーとか図書館とかエアコン効いているところでは25℃ぐらいなのだよ。25℃のところと36℃のところを言ったり来たり。帰って室内はエアコン28℃設定で扇風機の風も使う。するてね、どうも鼻水が出るだよ。風邪かしら。
この気温の差って何かよくないのかしら。36℃の環境にずーといるのは良くないと思うけどね。最近は街中の戸建て建築現場と道路工事現場の人たちって上着がデブっていて。ファン内蔵の上着で風が当たって少しはマシなのかしら。知らんけど。

つまり、numba で JIT で高速化を図れるとは言っても単純に高速化できるわけではないのだよ、ちみい。。。
ってかね、ワタクシPython2の頃から少しずつ少しずつ たまに使って なのだけどPython 3.12を今は使っているのですけど、numba って初めて聞いたのであるぞの。
知らないことはおっぱいあるのだよ、ちがーーーう。いっぱいあるのだよ。つーか、c/c++とか多言語だって知らないことはたくさんあるだわす(笑)
どや。

で、上のnumbaの例で @のところ。デコレータというんだって。それもワタクシは馴染みがないのである。ま~Pythonの専門家になろうという高望みはないのだが、本・サイト記事等でPython Codeを見て知らない記述があったら調べてみるぞのってレベルですわっとんとん。

冬は外気が2℃ぐらいのときも室内は24℃ぐらいなので温度差は22℃か。夏場は外気36℃で室内が25℃として温度差は11℃だな。
この温度差がどのような影響をもたらすか。つーか、冬も外気2℃ってのはかなり寒いときで12,1月でも10℃ぐらいだろ。そうであると温度差は14℃ぐらいか。
うーむ。冬のほうが温度差は大きいな。で、風邪のような症状はなかったのだがな。

夏場の36℃<—>26℃の温度変化ってのは良くないのであるかしら。知らんけど。

Pythonを高速化するのは、Pythonで科学技術計算をする場合には重要である、らしい。しかーーーし、ワタクシはPythonで科学技術計算はしなーーーい。つーか、何もしなーーーーい。
出版社から例題をDLしてVScodeでクリック・実行ってやるだけなのであるぞの。

いいじゃん。暇つぶしなんだし。なにを (笑)

   
ん!? 思いついたぞ。上の初回実行のところはダミーとして使うんだ。そこでJITがコンパイルすればいいのだから。よってに2回めは高速になる。2回めに本来の処理を書けばよいのであるぞの。てかね。ま~高速化しなければならないようなコードはワタクシ書かないし。うむ。

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