0

cuda デバイスで双方向リンク リストを作成する必要があります。
私はホストコードを持っています:

class Foo
{
public:
    int my_index;
    static int count;
    static int index;
    static Foo* first;
    static Foo* last;
    Foo* next;
    Foo* prev;

    Foo(); //adds object to list
    ~Foo(); //deletes object from list
}

Foo* Foo::first = 0;
Foo* Foo::last = 0;
int Foo::count = 0;
int Foo::index = 0;

私はそれを繰り返したいとき:

for (Foo* pr = Foo::first; pr; pr = pr->next)
{
    //do something
}

私の最初の問題は、継承元のクラスが他
にもいくつか あり、それらのサイズが異なるため、どうすればよいですか :Foo

  • Fooタイプの作成されたすべてのクラスとすべての派生クラスをデバイスに コピーします。
  • Fooまたはさらに良いことに、リンクされたリスト全体をデバイス から完全に保存します

Fooホストからデータにアクセスする必要はありません。デバイス上 でのみ
必要です。

2 番目の問題:
複数の CUDA デバイス (3 つの CUDA 対応グラフィック カード) を持ってい
ますが、両方のデバイスでデバイスの二重リンク リストにアクセスするにはどうすればよいですか?

  • ピアツーピアコピー?
  • 他の何か?
4

2 に答える 2

-3

私はCUDAについて何も知らないので、もっと良い答えがあるでしょう。

問題が のインスタンスのサイズを決定することである場合Foo、クラスに仮想sizeメソッドを与えてみませんか?

// In Foo:
virtual size_t size() const;

// In class T, a derivation of Foo:
size_t size() const override { return sizeof(T); }
于 2013-06-28T19:11:16.493 に答える