用g ++編譯這個函數可行,但速度很慢。爲什麼我在這些功能之間看到如此巨大的性能差異?
void rota(double psir,double thetar,double phir,double xi,double yi,double zi,double *xf,double *yf,double *zf) {
*xf = xi*cos(phir)*cos(psir)+yi*(-sin(phir)*cos(thetar)*cos(psir)+sin(thetar)*sin(psir))+zi*(sin(phir)*sin(thetar)*cos(psir)+cos(thetar)*sin(psir));
*yf = xi*sin(phir)+yi*cos(phir)*cos(thetar)-zi*cos(phir)*sin(thetar);
*zf = -xi*cos(phir)*sin(psir)+yi*(sin(thetar)*cos(psir)+cos(thetar)*sin(phir)*sin(psir))+zi*(cos(thetar)*cos(psir)-sin(thetar)*sin(phir)*sin(psir));
return;
}
如果我計算,一旦中間值,然後調用這些,我的模擬運行多更快。
void rota(double psir,double thetar,double phir,double xi,double yi,double zi,double *xf,double *yf,double *zf) {
double cosf = cos(phir);
double sinf = sin(phir);
double cosp = cos(psir);
double sinp = sin(psir);
double cost = cos(thetar);
double sint = sin(thetar);
*xf = xi*cosf*cosp+yi*(-sinf*cost*cosp+sint*sinp)+zi*(sinf*sint*cosp+cost*sinp);
*yf = xi*sinf+yi*cosf*cost-zi*cosf*sint;
*zf = -xi*cosf*sinp+yi*(sint*cosp+cost*sinf*sinp)+zi*(cost*cosp-sint*sinf*sinp);
return;
}
爲什麼g ++沒有爲我做這個優化?有沒有辦法讓我更有效地做到這一點?
謝謝!
您是否設置了最大優化級別? – 2013-04-08 17:55:41
嘗試使用#include而不是#include 並使用std命名空間調用函數,例如std :: cos等。 –
2013-04-08 18:02:34
@GearoidMurphy - 我無法想象爲什麼這很重要,但我開明。你見過這樣的區別嗎? – 2013-04-08 18:04:25