私はすべての研究と読解の後、私はまだこれを行う方法について100%明確ではないので、私は尋ねなければならない私はgpuカード上で実行するために、次のようなものを取得しようとしていると私はCuda Cを生成するCudafy.Netを使用しています。私はこれを可能な限り速く走らせたいと思っています。ネストされたfor-loopsを持つ関数をCudafy.Netに変換する方法
私が機能を持っている場合(簡体字)のような次のように私は起動()関数でこれを呼び出しています
Transform()
{
for (lgDY = 0; lgDY < lgeHeight; lgDY++)
{
for (lgDX = 0; lgDX < lgeWidth; lgDX++)
{
// do a lot of stuff with lgDY and lgDX like stuff a matrix
}
}
}
:
gpu.Launch(blocksize, threadsize, "Transform", args...)
私はGThreadとして渡さ精通していますblocksize.x、blockdim.x、およびthreadsize.x、さらにブロックのyとzを指定します。文のため離れて行くと、私は
if (y < lgeHeight)
if (x < lgeWidth)
...
のような種類のテストに置き換えるしかし、その後どのように「インクリメントlgDYとlgDXに各反復を結ぶには考えている場合、私は苦労の理解を持っています。
私はそれが大変明白であるか、正確に何をしようとしているのか記述していない場合はお詫び申し上げます。入れ子になったループを正しい方法で混乱させるだけです。
あなたの返信ありがとうございますMilhous。カードには、1024ブロック、最大スレッドサイズ(1024、1024、1)、最大グリッド寸法(2147483647、65535,1)、lgeHeight = 2150、lgeWidth = 4300(9245000)があります。グリッド寸法がパラメータ私はそれに比べて、私は十分なスレッドを持っているように見える? – user3143237
あなたのカードによって異なると思います。どのカードを使用していますか?私は多くのスレッドを持つカードを知らない。 – Milhous
私はGeForce GTX 1050 Tiを使用しています – user3143237