2

この本当に奇妙なエラーが発生しました。スラストリデュースを使用して、マトリックス内のすべての要素の合計を計算しました。ほとんどのデータでうまくいきましたが、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のアンダーフローでしたか?ありがとう!

4

1 に答える 1