問題タブ [memoryview]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
numpy - cython で変数を入力して、memoryview 配列にすばやく渡すにはどうすればよいですか?
N 体積分器の二重ループを最適化しようとしていますが、コードの問題は、格納された変数をメモリ ビューの場所に書き込むときに大量のオーバーヘッドが発生することであることがわかりました。
私は元々、このコードを numpy でベクトル化していましたが、パーティクルの位置を更新するために別の for ループ内で呼び出され、オーバーヘッドが非常に大きくなりました。位置 (X) の np.ndarray Nx2 ベクトルがあり、運動量 (XOut) の Nx2 ベクトルを返したいです。以下にリストされている現在のコードはメモリ ビューを返しますが、最終的にはこれを埋め込みたいので問題ありません。このボトルネックをデバッグしたら、他の Cython 関数に関数を追加します。
cython -a "name.pyx" コマンドを試してみたところ、多かれ少なかれすべてが C タイプであることがわかりました。ただし、ループの下部に向かって、 XOut[ii,0] -= valuex のメモリビューへの書き込みが実行時間のほとんどを占めていることがわかりました。これを定数に変更して XOut[ii,0] -= 5 にすると、コードは最大 40 倍速くなります。これは、その行である種のコピー操作を行っているため、速度が低下していることを意味すると思います。私の Cython/C++ のバックグラウンドは初歩的なものですが、ポインターからメモリビューに書き込むように構文を変更する必要があると思います。どんなアドバイスでも大歓迎です。ありがとう!