2011-09-23 16 views
5

एनवीसीसी डिवाइस कोड को कितनी अच्छी तरह अनुकूलित करता है? क्या यह निरंतर फोल्डिंग और सामान्य उप-अभिव्यक्ति उन्मूलन जैसे किसी भी प्रकार के अनुकूलन करता है?कोड अनुकूलन पर एनवीसीसी कितना अच्छा है?

float a = 1/sqrtf(2 * M_PI); 
float b = c/sqrtf(2 * M_PI); 
इस के लिए

:

जैसे, यह निम्न कम हो जाएगा

float a = 1/sqrtf(c * M_PI); 
float b = c/sqrtf(M_PI); 

रहे हैं:

float sqrt_2pi = sqrtf(2 * M_PI); // Compile time constant 
float a = 1/sqrt_2pi; 
float b = c/sqrt_2pi; 

क्या अधिक चतुर अनुकूलन, गणित कार्यों का अर्थ विज्ञान जानने को शामिल के बारे में यह:

float sqrt_pi = sqrtf(M_PI); // Compile time constant 
float a = 1/(sqrt_pi * sqrtf(c)); 
float b = c/sqrt_pi; 

उत्तर

8

कंपाइलर आपके आगे है। अपने उदाहरण में:

float a = 1/sqrtf(2 * M_PI); 
float b = c/sqrtf(2 * M_PI); 

nvopencc (Open64) इस फेंकना होगा:

mov.f32   %f2, 0f40206c99;  // 2.50663 
    div.full.f32 %f3, %f1, %f2; 
    mov.f32   %f4, 0f3ecc422a;  // 0.398942 

जो

float b = c/2.50663f; 
float a = 0.398942f; 

दूसरे मामले इस का संकलन किया जाता है के बराबर है:

float a = 1/sqrtf(c * 3.14159f); // 0f40490fdb 
float b = c/1.77245f; // 0f3fe2dfc5 

मैं संकलक द्वारा उत्पन्न a के लिए अभिव्यक्ति का अनुमान लगा रहा हूं, आपके "ऑप्टमाइज्ड" संस्करण से अधिक सटीक होना चाहिए, लेकिन उसी गति के बारे में।

+0

तो, यह * लगातार * तह करता है? और क्या compiler nvOpen64 है? क्या यह एनवीडिया या ओएसएस संस्करण है? दूसरे मामले के बारे में क्या? –

+0

nvOpen64 एनवीआईडीआईए कंपाइलर है, [ओपन 64] (http://www.open64.net/) पर आधारित है (नोट एनवीसीसी एक कंपाइलर नहीं है), – talonmies

+0

मेरी अज्ञानता को क्षमा करें, लेकिन अगर यह कंपाइलर नहीं है तो वास्तव में एनवीसीसी क्या है? –

संबंधित मुद्दे