情報は力ではない

UE4 とか Blender とか。

cudaMemcpyでハマったことの覚え書き

題名通り、cudaMemcpyの際にハマったことの覚え書き。

構造体のメンバに構造体

まず次のコードを見てください(プログラムの一部のみです)。

 

今日ハマったコードはこれではないですが、同様の問題を含んでいます。

problem_create()はsizeof(problem)バイトをホストメモリに確保した後、メンバを初期化しproblem *を返します。

 

17行目でcudaMemcpy()を用いてpをdev_pにコピーしています。
これだとランタイムエラーが生じた。

なぜならdev_p->dist.costはp->dist.costをコピーしているからだ。
すなわちdev_p->dist.costはホストのアドレスを指していることになる。

今思うと何故これでいけると思っていたのか。恥ずかしい。
改めて勉強し直さないといけないなと感じた。