You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
6.4 KiB
128 lines
6.4 KiB
////////////////////////////////////////////////////////////////////////////
|
|
// File: ProgramCU.h
|
|
// Author: Changchang Wu
|
|
// Description : interface for the ProgramCU classes.
|
|
// It is basically a wrapper around all the CUDA kernels
|
|
//
|
|
// Copyright (c) 2011 Changchang Wu (ccwu@cs.washington.edu)
|
|
// and the University of Washington at Seattle
|
|
//
|
|
// This library is free software; you can redistribute it and/or
|
|
// modify it under the terms of the GNU General Public
|
|
// License as published by the Free Software Foundation; either
|
|
// Version 3 of the License, or (at your option) any later version.
|
|
//
|
|
// This library is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
// General Public License for more details.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _PROGRAM_CU_H
|
|
#define _PROGRAM_CU_H
|
|
|
|
class CuTexImage;
|
|
|
|
namespace pba {
|
|
namespace ProgramCU {
|
|
|
|
int SetCudaDevice(int device);
|
|
size_t GetCudaMemoryCap();
|
|
int CheckErrorCUDA(const char* location);
|
|
void FinishWorkCUDA();
|
|
void ClearPreviousError();
|
|
void ResetCurrentDevice();
|
|
void GetBlockConfiguration(unsigned int nblock, unsigned int& bw,
|
|
unsigned int& bh);
|
|
|
|
//////////////////////////////////////////////////////////
|
|
void ComputeSQRT(CuTexImage& tex);
|
|
void ComputeRSQRT(CuTexImage& tex);
|
|
void ComputeVXY(CuTexImage& texX, CuTexImage& texY, CuTexImage& result,
|
|
unsigned int part = 0, unsigned int skip = 0);
|
|
void ComputeSAXPY(float a, CuTexImage& texX, CuTexImage& texY,
|
|
CuTexImage& result);
|
|
void ComputeSAX(float a, CuTexImage& texX, CuTexImage& result);
|
|
void ComputeSXYPZ(float a, CuTexImage& texX, CuTexImage& texY, CuTexImage& texZ,
|
|
CuTexImage& result);
|
|
float ComputeVectorMax(CuTexImage& vector, CuTexImage& buf);
|
|
float ComputeVectorSum(CuTexImage& vector, CuTexImage& buf, int skip);
|
|
double ComputeVectorNorm(CuTexImage& vector, CuTexImage& buf);
|
|
double ComputeVectorNormW(CuTexImage& vector, CuTexImage& weight,
|
|
CuTexImage& buf);
|
|
double ComputeVectorDot(CuTexImage& vector1, CuTexImage& vector2,
|
|
CuTexImage& buf);
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void UncompressCamera(int ncam, CuTexImage& camera0, CuTexImage& result);
|
|
void CompressCamera(int ncam, CuTexImage& camera0, CuTexImage& result);
|
|
void UpdateCameraPoint(int ncam, CuTexImage& camera, CuTexImage& point,
|
|
CuTexImage& delta, CuTexImage& new_camera,
|
|
CuTexImage& new_point, int mode = 0);
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
void ComputeJacobian(CuTexImage& camera, CuTexImage& point, CuTexImage& jc,
|
|
CuTexImage& jp, CuTexImage& proj_map, CuTexImage& sj,
|
|
CuTexImage& meas, CuTexImage& cmlist, bool intrinsic_fixed,
|
|
int radial_distortion, bool shuffle);
|
|
void ComputeProjection(CuTexImage& camera, CuTexImage& point, CuTexImage& meas,
|
|
CuTexImage& proj_map, CuTexImage& proj, int radial);
|
|
void ComputeProjectionX(CuTexImage& camera, CuTexImage& point, CuTexImage& meas,
|
|
CuTexImage& proj_map, CuTexImage& proj, int radial);
|
|
|
|
bool ShuffleCameraJacobian(CuTexImage& jc, CuTexImage& map, CuTexImage& result);
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
void ComputeDiagonal(CuTexImage& jc, CuTexImage& cmap, CuTexImage& jp,
|
|
CuTexImage& pmap, CuTexImage& cmlist, CuTexImage& jtjd,
|
|
CuTexImage& jtjdi, bool jc_transpose, int radial,
|
|
bool add_existing_diagc);
|
|
void MultiplyBlockConditioner(int ncam, int npoint, CuTexImage& blocks,
|
|
CuTexImage& vector, CuTexImage& result,
|
|
int radial, int mode = 0);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
void ComputeProjectionQ(CuTexImage& camera, CuTexImage& qmap, CuTexImage& qw,
|
|
CuTexImage& proj, int offset);
|
|
void ComputeJQX(CuTexImage& x, CuTexImage& qmap, CuTexImage& wq, CuTexImage& sj,
|
|
CuTexImage& jx, int offset);
|
|
void ComputeJQtEC(CuTexImage& pe, CuTexImage& qlist, CuTexImage& wq,
|
|
CuTexImage& sj, CuTexImage& result);
|
|
void ComputeDiagonalQ(CuTexImage& qlistw, CuTexImage& sj, CuTexImage& diag);
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void ComputeJX(int point_offset, CuTexImage& x, CuTexImage& jc, CuTexImage& jp,
|
|
CuTexImage& jmap, CuTexImage& result, int mode = 0);
|
|
void ComputeJtE(CuTexImage& pe, CuTexImage& jc, CuTexImage& cmap,
|
|
CuTexImage& cmlist, CuTexImage& jp, CuTexImage& pmap,
|
|
CuTexImage& jte, bool jc_transpose, int mode = 0);
|
|
void ComputeDiagonalBlock(float lambda, bool dampd, CuTexImage& jc,
|
|
CuTexImage& cmap, CuTexImage& jp, CuTexImage& pmap,
|
|
CuTexImage& cmlist, CuTexImage& diag,
|
|
CuTexImage& blocks, int radial_distortion,
|
|
bool jc_transpose, bool add_existing_diagc,
|
|
int mode = 0);
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
void ComputeJX_(CuTexImage& x, CuTexImage& jx, CuTexImage& camera,
|
|
CuTexImage& point, CuTexImage& meas, CuTexImage& pjmap,
|
|
bool intrinsic_fixed, int radial_distortion, int mode = 0);
|
|
void ComputeJtE_(CuTexImage& e, CuTexImage& jte, CuTexImage& camera,
|
|
CuTexImage& point, CuTexImage& meas, CuTexImage& cmap,
|
|
CuTexImage& cmlist, CuTexImage& pmap, CuTexImage& jmap,
|
|
CuTexImage& jp, bool intrinsic_fixed, int radial_distortion,
|
|
int mode = 0);
|
|
void ComputeDiagonalBlock_(float lambda, bool dampd, CuTexImage& camera,
|
|
CuTexImage& point, CuTexImage& meas,
|
|
CuTexImage& cmap, CuTexImage& cmlist,
|
|
CuTexImage& pmap, CuTexImage& jmap, CuTexImage& jp,
|
|
CuTexImage& sj, CuTexImage& diag, CuTexImage& blocks,
|
|
bool intrinsic_fixed, int radial_distortion,
|
|
bool add_existing_diagc, int mode = 0);
|
|
|
|
} // namespace ProgramCU
|
|
} // namespace pba
|
|
|
|
#endif
|