問題タブ [pycuda]
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.
cuda - 複数のGPUでのCUDAコンテキスト、ストリーム、およびイベント
TL; DRバージョン:「CPUとGPUの動作を並行して実行できるように、Python / PyCUDAを使用して複数のGPUへのカーネル呼び出しをラウンドロビンするための最良の方法は何ですか?」「私がこれを最初に尋ねた人にはなれなかった。私が読み上げるべきことは何か?」という側面を持っている。
完全版:
複数のGPUを搭載したシステムでCUDAを使用するアプリケーションでコンテキストなどを処理するための最良の方法を知りたいです。コンテキストの再利用とレクリエーションが適切な場合のガイドラインについて説明している文献を探していますが、これまでのところ、ベストプラクティスや経験則などの概要を説明するものは見つかりませんでした。
私たちがしなければならないことの一般的な概要は次のとおりです。
- リクエストは中央のプロセスに入ります。
- そのプロセスは、単一の要求を処理するために分岐します。
- データはDBからロードされます(比較的高価です)。
以下は、リクエストに基づいて任意の回数(数十回)繰り返されます。
- 後のカーネルに必要なデータを計算するためのいくつかの簡単なカーネル呼び出し。
- 1回の遅いカーネル呼び出し(10秒)。
ついに:
- カーネル呼び出しの結果は、CPUで収集および処理されてから、保存されます。
現時点では、各カーネル呼び出しはコンテキストを作成してから破棄しますが、これは無駄に思えます。セットアップには、コンテキストとカーネルの負荷ごとに約0.1秒かかります。これはそれほど大きなことではありませんが、他のより高速なタスクをGPUに移動することはできません。
機械を効率よく使うために、コンテキストなどを管理する最善の方法を模索しています。シングルGPUの場合、それは比較的単純だと思います。
- GPU作業を開始する前に、コンテキストを作成します。
- データの最初のセットのカーネルを起動します。
- シリーズの最後のカーネル呼び出し後のイベントを記録します。
- 最初のデータセットがGPUで計算している間に、CPUで2番目のデータセットを準備します。
- 2番目のセットを起動し、繰り返します。
- 結果を収集して保存する前に、各イベントが同期されていることを確認してください。
オーバーラップしたメモリコピーを適切に使用することを前提とすると、これでうまくいくようです。
ただし、数十のアイテムのそれぞれをラウンドロビンして複数のGPUで処理する場合は、どうすればよいかわかりません。
ホストプログラムはPython2.7で、PyCUDAを使用してGPUにアクセスします。現在、マルチスレッドではありません。私はそれをそのままにしておきたいのですが(「今、2つの問題があります」など)、答えがスレッドを意味する場合、それはスレッドを意味します。同様に、データをブロックするときにメインスレッドでevent.synchronize()を呼び出すことができれば便利ですが、私たちのニーズでは、ハードウェアを効率的に使用することがより重要です。一度に複数のリクエストを処理する可能性があるため、このプロセスがGPUを使用していないときに、他のプロセスにGPUを使用させることが重要です。
排他的計算モードを使用する明確な理由はないと思います(つまり、カードのメモリを1つの作業項目でいっぱいにしない)ので、長年のコンテキストを含むソリューションはないと思いますテーブルから外れています。
私の質問をカバーする他のコンテンツへのリンクの形での回答は、APIだけでなく、その理由について十分に詳細に説明されていれば、完全に受け入れられます(推奨されます) 。読んでくれてありがとう!
python - PyCUDA インストール中のエラー
次の手順を使用して PyCUDA をインストールしようとしました: http://wiki.tiker.net/PyCuda/Installation/Linux で、ポイント 3 でコンパイルしていました:
コンソールから次の出力を取得します。
私は何をすべきか?
編集: 私の OS は: Arch Linux 3.3.2.1 です。GPU: NVIDIA GF 9600M GS
python - pycuda; nvcc fatal:Visual Studio構成ファイル'(null)'が見つかりませんでした
Visual C ++ Express 2010とすべての種類のNvidiaドライバー、SDKなどをインストールした後、pycuda入門チュートリアルを実行しようとしています。
エラーなし。しかし、IPythonでのこの呼び出しは
この後、このエラーに影響を与えることなくMS Windows SDKをインストールしましたが、Visual C ++ Express 2010でx64プログラムを選択できるようになりました。では、何を修正する必要がありますか?(プリコンパイルされたpycudaファイルを使用しました。)
ubuntu - ubuntuでのpycudaインストールエラー:/usr/bin/ld:-lcudaが見つかりません
私は初心者で、pycuda2011.2.2 を ubuntu 11.10 にインストールしていますが、完了できません。クーダは4.0です。
ライブラリをインストールしました:
$ sudo apt-get install build-essential python-dev python-setuptools libboost-python-dev libboost-thread-dev -y
次のように configure.py を呼び出します。
$ ./configure.py --cuda-root=/usr/local/cuda --cudadrv-lib-dir=/usr/lib --boost-inc-dir=/usr/include --boost-lib-dir= /usr/lib --boost-python-libname=boost_python-mt-py27 --boost-thread-libname=boost_thread-mt
しかし、私がするとき:
次のエラーが表示されます。
/usr/bin/ld: -lcuda が見つかりません
/usr/bin/ld: -lcurand の検索時に互換性のない /usr/local/cuda/lib/libcurand.so をスキップします
なぜこのエラーですか?
ありがとう。
python - Twisted のコードを特定のスレッドに延期する
Twisted と pyCUDA を使用してサーバーを作成しています。CUDA の動作に関する制限は、CUDA コンテキストを初期化したスレッドと同じスレッドでアクセスする必要があることです。しかし、Twisted のスレッドプールの実装では、特定のスレッドを要求することはできません。
たとえば、複数のクライアントがサーバーに接続されている場合、それらは CUDA で実行される計算を要求します。同じ CUDA オブジェクトで複数の操作が要求されます (初期化にはコストがかかります)。deferToThread 関数を使用したかったのですが、これでは特定のスレッドを延期することはできません。「一部の」スレッドだけです。私がやりたいことは、理想的には、deferToThread のようなメカニズムを使用することですが、コードが実行されるスレッドを指定することです。任意の提案をいただければ幸いです。おそらく Twisted はこのプロジェクトの間違った方法です。
python - 高度な視覚化を備えた Python での ABM
これがすべておかしくて不明確に見える場合は申し訳ありませんが、私は現在 Netlogo を学習してエージェントベースの集団行動をモデル化しており、代替ソフトウェアの選択に関するアドバイスを聞きたいと思っています. 私の主なことは、私が理解していることから、並列計算が可能になるため、PyCuda を大いに利用したいということです。しかし、それは、別の環境で数値スクリプトを作成し、さらに別の環境でビジュアルを実装する必要があるということですか?
もしそうなら、私の質問は次のとおりです。
どの数値パッケージを使用すればよいですか? PyEvolve、DEAP、またはその他の何か? PyEvolve はもはや開発されておらず、DEAP は時代遅れの (?) EAP のラッパーに過ぎないようです。
グラフィックに関しては、mayavi2 と vtk が有望だと思います。問題は、数値パッケージのどれもこれらに容易にバインドできないように見えることです。数値出力をデータファイルに保存して、たとえばmayavi2にフィードするよりも良い方法はありますか?
もう 1 つのオプションは、Netlogo を介してデータを生成し、(2) からグラフ作成パッケージにフィードすることです。これを行うことの不利益はありますか?
この混乱に光を当ててくれてありがとう。
python - PyCuda に新しいクラスを実装する
私は pycuda を使用する初心者です。これまでのところ、本「Cuda by example」からカーネルの書き方についていくつかの基本的なことを学びました。次のタスクは、既に C++ で記述されているクラスを内部で使用することです。カーネルの。この .h ファイルを pycuda にインポートするにはどうすればよいですか? この .h を転送するためにブースト python を使用する必要があるので、python の他のモジュールと同様にインポートできますか? 問題は、カーネル内でこの特別な変数だけが必要だということです。このクラスは導関数の計算に使用されます。このクラスがどのように構築されているかを確認できるように、いくつかの行を書きます。
adoublecuda.h:
...等。
#include "adoublecuda.h" と入力するだけで C-CUDA 内でこのクラスを使用し、PyCUDA に同じものを含めたいと考えています。このクラスはカーネル内でのみ使用しています (main 内で adouble 変数は必要ありません)。このヘッダー ファイルを PyCuda にインクルードするには、boost python を使用する必要がありますか?
アドバイスをいただければ幸いです。助けていただきありがとうございます。
cuda - pycuda -- エラー: コマンド 'x86_64-pc-linux-gnu-g++' が終了ステータス 1 で失敗しました
sabayon linux をインストールし、pycuda をインストールしようとしましたが、次のエラーが表示されます。
su -c "make install"
src/cpp/cuda.cpp:1:0 からインクルードされたファイル: src/cpp/cuda.hpp:12:18: 致命的なエラー: cuda.h: そのようなファイルまたはディレクトリのコンパイルは終了しませんでした。エラー: コマンド 'x86_64-pc-linux-gnu-g++' が終了ステータス 1 で失敗しました
私はcudaでコンパイルできることに言及しなければなりません。
同じことが起こり、私が試してみると
sudo -E sh -c "make install"
私の .bashrc は次のとおりです。
(ユーザーとして $PATH を echo すると、 /opt/cuda/bin が表示されますが、root として試してみると、何も表示されず、表示するために export PATH... を再度実行する必要がありました。)
python - UbuntuへのPycudaのインストール
pycudaのインストールに苦労しています。私はUbuntu12.04で実行しています。私は最初にEnthoughtpythonディストリビューションをインストールしました(コンピューターに既にpythonがインストールされていたとしても)。.profileのパスにenthoughtpythonの場所を追加しました(これは問題なく機能します。コマンドラインからpythonまたはipythonと入力すると、enthoughtバージョンが正しく使用されます)。次に、http: //wiki.tiker.net/PyCuda/Installation/Linux/Ubuntuの指示に従いました(すでにnumpyとcudaがインストールされているため、手順0-1をスキップします)。
すべてが正常に実行され、インストールされているようです。しかし、実際にpycudaを使おうとすると、失敗します。たとえば、hello_gpu.pyの例を実行しようとすると次のようになります。
または、アイドル状態からpycudaパッケージをインポートしようとすると、別のエラーが発生します。
問題の一部は、Pythonインタープリターへの正しいパスをどこかで指定していないことだと思いますが、このエラーが発生する場所を特定できません。どんな提案でも大歓迎です、私は考えがありません。