問題タブ [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.
osx-mountain-lion - EPDPythonとシステムPython--OSXMountainLion 10.8
私は2週齢のMacユーザーなので、ここで我慢してください。Macに付属のシステムPythonではなく、デフォルトのPythonインタープリターとしてEPDpythonを設定しようとしています。EPDは、インストール時に.bash_profileを変更することでこれを自動的に行うことを理解していましたが、EPDをインストールした後、.bash_profileは変更されておらず、私が見る限り、システムpythonがデフォルトのインタープリターのままです。これを変更するにはどうすればよいですか?
デフォルトのPythonをEPDに変更したい主な理由は、インストールするすべてのパッケージが、EPDに関連付けられたsite-packagesディレクトリではなく、/ Library / Python / 2.7/site-packagesディレクトリに自動的に配置されるためです。特に、PyCudaをEPDのsite-packagesディレクトリにインストールすることができません。
これが何らかの意味を持っていることを願っています。私は迷子になっていて、ここからどこへ行けばいいのかわかりません。ヘルプは大歓迎です。
cuda - CUDA で複数のセルの値を変更する
私は答えを見つけることができませんが、それは単純なものでなければなりません。私はセルオートマトンの状態を計算する必要があるプログラムを書いています.CUDAがどのように機能するかを理解するために、最初に非常に単純なプログラムを作成しようとしました. 行列を取り、すべてのスレッドはそのセルと、このセルの上下にあるセルの値をインクリメントする必要があります。したがって、次のマトリックスを指定すると:
次の結果が得られることを期待しています。
最初の行の値は 2 です。これは、最初の行の値をもう一度インクリメントできる行がないためです。同様の方法で、最後の行の値は 2です。
しかし、次のような行列を取得しています。
そして、4行目、5行目、6行目に2の値がある理由を理解できません.2ではなく3でなければなりません.
ここに私のコードがあります:
もう 1 つ興味深い点: 次の行のいずれかをコメントすると、次のようになります。
すべてが期待どおりに機能し、予期しない値はありません。場合によっては、CUDA が 1 つのスレッドで隣接する 3 つのセルの値を処理できないようです。
cuda - CUDAスケジューラーの働き
CUDA スケジューラの動作を知るにはどうすればよいですか? 私のアプリケーションでグリッドサイズ、ブロックサイズなどを変えてテストする以外に、ブロックがどのように分散されるかを正確に説明するベンダー提供のドキュメントはありますか?
python - pycuda コードの問題: セグメンテーション エラー (コア ダンプ)
コードは次のようになります。
しかし、以下のようにターミナルでエラーが発生します。
わからない 何が問題なの?誰か助けて?
python - CUDA と Python の ODEInt および Parallel Reduction を組み合わせる
私は生物物理学の大学院生で、PyCUDA と Scipy を使用してタンパク質凝集モデルをプログラムしようとしていODEInt
ます。過去 2 週間以内に、コードを実行できるようになりましたが、非常に遅いです。私のコードが何をするのか説明できるかどうか見てみましょう。
各要素が長さのポリマーの濃度である濃度のnp
配列があります。各カーネルが特定の長さのポリマーの変化率を計算する場所を使用して、ポリマー濃度の変化率を計算する関数があります。この計算中に、長さの配列をスレッドで合計する必要があるため、コードが大幅に遅くなります。N
i+1
CUDA
(N-i-1)
少し読んでグーグルで調べてみると、並列処理を呼び出して配列の合計などのシリアル計算をはるかに高速化する方法として、並列削減に出くわしました。もちろん、私はマーク・ハリスのパワーポイントのスライドを参照しています. これらは素晴らしい読み物であり、これは私のコードを劇的に高速化する潜在的な方法のように見えますが、いくつか質問があります:
ポリマー種の数 N が ~ 8700 ~ 9000 である必要がある場合、CUDA を使用してこれらの N 配列を同時に削減することは考えられますか? 簡単な計算を行うと (同時スレッドの最大数を計算する方法に関する SO の優れた説明のおかげで可能になりました)、GTX Titan で一度に 15 * 64 * 32 = 30720 のスレッドを実行できることがわかりました。一度に最大 8960 個のカーネルでカーネルを呼び出すと、使用できるスレッドは 21760 個しか残っていないはずですよね? それを適切に削減するには、少なくとも (配列の長さ/2) スレッドが必要なように思われるので、私は絶望的です。
残りのスレッドを分割して、一度にいくつかの大きな配列をシリアルに削減することで、残りのスレッドを使用できるのではないかと考えていました。
わかりません...私はただの物理学の大学院生です。間違った方向への長い旅に出る前に、専門家に聞いてみようと思いました. カーネルに何かを減らすように簡単かつ効率的に伝えることは可能ですか?
ありがとう、カルステン
これが私がやろうとしていることの表現です。
これまで説明してきた配列の合計は、基本的に各スレッドの同じ配列のより小さいバージョンであることに気付くでしょう。これは、これがホスト上で行うべきことなのかどうか疑問に思います。
matrix - Cuda/PyCuda - 大規模な行列トラバーサルとブロック/グリッド サイズ
私は、ブロックとグリッドが cuda でどのように機能するかをしっかりと把握していないという事実を強調する何かに取り組んでいます。トラバースして各要素に値を入力したい 1000x10 のマトリックスがあります。カーネルは次のようになります。
ここで、M=1000 および N = 10 です。行列のすべての要素をカバーできるように、これを分割する方法がわかりません。1000*10 = 10,000 要素をカバーする必要があり、スレッド数に制限があるため、(10,1000,1) のブロック サイズは使用できません。pycuda を使用して、ブロック = (10,100,1)、グリッド = (1,10) などを試しましたが、行列要素を完全にカバーすることはできません。これを行う正しい方法は何ですか?