この本当に奇妙なエラーが発生しました。スラストリデュースを使用して、マトリックス内のすべての要素の合計を計算しました。ほとんどのデータでうまくいきましたが、1 つのセットでうまくいきませんでした。
コード:
lbfgsfloatval_t sum(const DeviceVector& A){
thrust::device_ptr<lbfgsfloatval_t> ptr(A.getPtr());
thrust::device_vector<double> A_p(ptr, ptr + A.rows()*A.cols());
lbfgsfloatval_t sums = 0.0;
// reduce on host
for(int i = 0; i < A.rows()*A.cols();i++)
sums += A_p[i];
// reduce on device
lbfgsfloatval_t res = thrust::reduce(A_p.begin(), A_p.end());
cout << "cpu: " << sums << endl;
cout << "gpu: " << res << endl;
return res;
}
2 番目のグループが間違っていることに注意してください。
出力:
cpu: -568.691
gpu: -568.691
cpu: 3.4972e-14
gpu: 1.40998e-14
cpu: 0.234375
gpu: 0.234375
また、thrust::device_vector をビルドせずに、生のポインターを使用してみました。同じ出力。cublas dot productも試してみました。同じ出力。
上記のCPUの結果が正しいことを確認するためにmatlabを使用しました。
どうしたの?GPUのアンダーフローでしたか?ありがとう!