- 110 名前:デフォルトの名無しさん mailto:sage [2011/10/19(水) 13:25:43.68 ]
- >>108
>cudaMalloc((void**)&hoge_d,sizeof(hoge_t)); 意味のおさらい。 & hoge_dをcudaMalloc()に渡すことで、ローカル変数hoge_dにデバイス上のアドレスが格納される。 >cudaMalloc((void**)&hoge_d->Pt,sizeof(int)*100); & hoge_d->Ptは、意味としては & (* hoge_d).Pt に等しい。 つまり、hoge_dがデバイス上のアドレスを保持しているにも拘らず ホスト上で* hoge_d するからsegmentation faultを引き起こす。 データ効率を考えると固定長配列にできないか検討するなどして見直すべきだが、 どうしてもこのままの構造でやりたいなら sizeof(int) * 100 確保したデバイス上の アドレスをcudaMemcpy()でhoge_d->ptにコピーする必要がある。 って、この下りは>109が書いていることと同じだね。
|

|