我得到了这个非常奇怪的错误。我使用推力减少对矩阵中的所有元素求和。它对大多数数据运行良好,但在一组数据上出错了。
代码:
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;
}
注意第二组出错了。
输出:
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。相同的输出。
我用matlab确认上面的cpu结果是正确的。
发生了什么?它是GPU上的下溢吗?谢谢!