         std::cout << "\n----------- benchmarking CG -----------\n";
         // compute residual
         cusp::array1d<ValueType, cusp::host_memory> r(A.num_rows,0);
-        A.multiply(x,r);
+        cusp::multiply(A, x, r);
         cusp::blas::axpy(b, r, ValueType(-1.0));
 
         ValueType residual_norm = cusp::blas::nrm2(r);

    cusp::array1d<ValueType, cusp::host_memory> b;

    cusp::io::read_matrix_market_file(A, "A.mtx");
    { cusp::array2d<ValueType, cusp::host_memory> temp; cusp::read_matrix_market_file(temp, "x.mtx"); temp.values.swap(x); }
    { cusp::array2d<ValueType, cusp::host_memory> temp; cusp::read_matrix_market_file(temp, "b.mtx"); temp.values.swap(b); }
    
    std::cout << "loaded matrix with shape (" << A.num_rows << "," << A.num_cols << ") and " << A.num_entries << " entries" << "\n\n";


    cusp::array1d<ValueType,cusp::device_memory> y(A.num_rows, 0);
    
    // warm up
    cusp::multiply(A, x, y);

    // benchmark SpMV
    timer t;
