Differences between revisions 2 and 5 (spanning 3 versions)
Revision 2 as of 2020-03-20 17:32:42
Size: 974
Comment:
Revision 5 as of 2020-03-20 19:50:46
Size: 1416
Comment:
Deletions are marked like this. Additions are marked like this.
Line 5: Line 5:
[[https://se.miyabikno-jobs.com/cython-compile-cythonize/|簡単なコンパイル]] Cythonについて調べると、setup.py なるファイルを作れという記事が多くヒットするが、現代ではこれは必要なくなった。([[https://se.miyabikno-jobs.com/cython-compile-cythonize/|ここ]]を参照)
Line 8: Line 8:
=== Cythonのコードをひとつのファイルで完結させる ===
Cythonを使って高速化したはいいけど、元々ひとつのコードだったものが複数のファイルになってしまうのは嫌だ。という場合の小技。
=== Cythonのコンパイル -> 実行を一発できるようにする ===
Cythonを使って高速化したはいいけど、毎回コンパイルするのは面倒だ。複数のコードになってしまうのは嫌だ。という場合の小技。
Line 11: Line 11:
コードのファイル名を cython_test.pyx とする。
最後に
{{{#!python
if __name__ == '__main__':
    import cython_test
    cython_test.main()
home directoryに ''.cython.sh'' という名前で以下を書き込んだシェルスクリプトを作る。 .c ファイルを残したい場合は4行目をコメントアウトすればよい。
{{{#!highlight sh
#!/usr/bin/bash
code=$1
cythonize -i $code > .cython_log.txt
rm ${code%.pyx}.c
echo 'import '${code%.pyx} > .a.py
echo ${code%.pyx}'.main()' >> .a.py
python .a.py "${@:2}"
Line 18: Line 21:
と書いておけば、コンパイルの時は読まれず、実行した時はmain関数が走る。このコードひとつをcythonizeしてからpythonに投げればおk また、 ''~/.bashrc'' に次の一行を書き足す。
{{{#!highlight bash
alias cythonsh='sh ~/.cython.sh'
}}}
これで ''.bashrc'' を有効にすれば、ターミナルで
Line 20: Line 27:
$ cythonize -a -i cython_test.pyx
Compiling /gpfs/home/(カレントディレクトリ)/cython_test.pyx because it changed.
[1/1] Cythonizing /gpfs/(カレントディレクトリ)/cython_test.pyx
$ python cython_test.pyx
> cythonsh (cythonコード).pyx 引数
Line 25: Line 29:
と打つだけでコンパイルから実行まで行われる。

注意点として、コードのバグ等でコンパイルが失敗した場合にも強行実行されてしまうので、Ctrl-Cで手動killしよう。

高速化の小技

Cython

Cythonについて調べると、setup.py なるファイルを作れという記事が多くヒットするが、現代ではこれは必要なくなった。(ここを参照)

Cythonのコンパイル -> 実行を一発でできるようにする

Cythonを使って高速化したはいいけど、毎回コンパイルするのは面倒だ。複数のコードになってしまうのは嫌だ。という場合の小技。

home directoryに .cython.sh という名前で以下を書き込んだシェルスクリプトを作る。 .c ファイルを残したい場合は4行目をコメントアウトすればよい。

   1 #!/usr/bin/bash
   2 code=$1
   3 cythonize -i $code > .cython_log.txt
   4 rm ${code%.pyx}.c
   5 echo 'import '${code%.pyx}  > .a.py
   6 echo ${code%.pyx}'.main()' >> .a.py
   7 python .a.py "${@:2}"

また、 ~/.bashrc に次の一行を書き足す。

   1 alias cythonsh='sh ~/.cython.sh'

これで .bashrc を有効にすれば、ターミナルで

> cythonsh (cythonコード).pyx 引数

と打つだけでコンパイルから実行まで行われる。

注意点として、コードのバグ等でコンパイルが失敗した場合にも強行実行されてしまうので、Ctrl-Cで手動killしよう。

KAGRA/Subgroups/PEM/PythonMemoJP/speedup (last edited 2021-08-04 18:33:51 by tatsuki.washimi)