How can I optimize vector normalization in a Molecular Modeling program?
willkn at montana.com
willkn at montana.com
Mon Nov 8 15:24:07 EST 1999
Hi, I've been working on a molecular modeling program and have been
trying to improve its performance recently. I did some profiling and
found that the most time by far (41.4%) was spent in a function which
normalizes a 3-dimensional vector (profiling statistics are given at
the bottom).
I am wondering if anyone has suggestions for optimizing that operation.
Thanks,
William Knight
willkn at montana.com
The definition of the function is given below:
typedef double VTYPE;
typedef VTYPE Vector[3];
////////////////////////////////////////////////////////////////////////
////////
// MakeUnitVector
//
// Reduces a normal vector specified as a set of three coordinates,
// to a unit normal vector of length one.
//
bool MakeUnitVector(Vector v)
{
VTYPE length;
// Calculate the length of the vector
length = (VTYPE)sqrt((v[0]*v[0]) + (v[1]*v[1]) + (v[2]*v[2]));
// if length is zero, bail
if(length == 0)
return false;
// Divide each element by the length to get a unit vector.
v[0] /= length;
v[1] /= length;
v[2] /= length;
return true;
}// MakeUnitVector
//***************** Profiling Details ************//
Func Func+Child Hit
Time % Time % Count Function
---------------------------------------------------------
15493.876 41.4 15493.876 41.4 9971880 MakeUnitVector(double *
const) (vector.obj)
5951.749 15.9 6789.747 18.1 627030
CForceField::CalcVanderwaalsInteraction(void) (cforcefield.obj)
2185.047 5.8 18425.737 49.2 84010
CForceField::CalcPotentialsAndForces(class CFFPairList *,class
CEEPairList *,class CEOPairList *) (cforcefield.obj)
1976.562 5.3 13039.435 34.8 3752280
CForceField::CalcEEInteraction(class CElectron *,class CElectron *)
(cforcefield.obj)
1778.265 4.7 1778.265 4.7 4656515 VectorMagnitude(double *
const) (vector.obj)
1668.910 4.5 1668.910 4.5 8884682 MultiplyVector(double *
const,double) (vector.obj)
1270.428 3.4 1270.428 3.4 13438760 SubtractVector(double *
const,double * const) (vector.obj)
1195.278 3.2 1195.278 3.2 21288242 AddVector(double *
const,double * const) (vector.obj)
1145.663 3.1 1238.959 3.3 64 CStatus::Print(char *)
(cstatus.obj)
Sent via Deja.com http://www.deja.com/
Before you buy.
More information about the Molmodel
mailing list