     /* When this kernel finishes, the best point does not
      * exist or it is stored in point_buffer[0]
      */
+    POP_CHK_CALL_IFSYNC;
     POP_CUDA_MEMCPY_TO_HOST_ASYNC( cctag_pointer_buffer,
                                    point_buffer,
                                    sizeof(popart::NearbyPoint),
                                    _stream );
+    POP_CHK_CALL_IFSYNC;
 
     cudaStreamSynchronize( _stream );
     if( not cctag_pointer_buffer->readable ) {

                   grid_divide( gridNSample, 32 ),
                   1 );

        popart::identification::idNearbyPointDispatcher
            <<<grid,block,0,_stream>>>
            ( _meta,
              tagIndex,
              first_iteration,
              _d_plane,
              ellipse,
              mT,
              mInvT,
              center,
              vCutSize,
              neighSize,
              point_buffer,
              cut_buffer,
              signal_buffer );

#if 0
// #ifdef CPU_GPU_COST_FUNCTION_COMPARE

}

__global__
void getSignalsAllNearbyPoints(
    const int                          tagIndex,
    bool                               first_iteration,
    cv::cuda::PtrStepSzb               src,
    const popart::geometry::ellipse    ellipse,
    const popart::geometry::matrix3x3  mT,
    // const popart::geometry::matrix3x3  mInvT,
    float2                             center,
    const int                          vCutsSize,
    const float                        neighbourSize,
    NearbyPoint*                       point_buffer,
    const identification::CutStruct*   cut_buffer,
    identification::CutSignals*        sig_buffer )
{
    const size_t gridNSample = tagParam.gridNSample;
    const float  gridWidth   = neighbourSize;
