के साथ अजगर की तुलना में मैंने सी/किलरान के साथ अजगर की गति की तुलना करने के लिए निम्नलिखित कार्यक्रम लिखे हैं। प्रोग्राम द्वारा उपयोग किए जाने वाले समय को पाने के लिए मैंने "टाइम" कमांड का उपयोग किया। सभी प्रोग्राम x x + y y + z * z के वर्ग रूट की गणना करते हैं जहां x, y, z फ़्लोट होते हैं। मैंने रूट स्क्वायर का उपयोग किया क्योंकि यह वैज्ञानिक कंप्यूटिंग में सबसे अधिक समय लेने वाले हिस्सों में से एक है, जिसमें मैं शामिल हूं। साधारण परीक्षण मैं मैंने पाया कि अजगर वैज्ञानिक कंप्यूटिंग के लिए अनुशंसित नहीं है किया था के अनुसारसी/फोर्ट्रान
fortran 0m29.9s //
c 0m20.7s //
python 30m10.8s
:
मैं निम्नलिखित समय मिला है। लेकिन शायद मेरा कोड बहुत अक्षम है।
क्या आपको लगता है कि मैं इस सरल परीक्षण मामले के लिए अपना कोड अधिक कुशल बना सकता हूं?
फोरट्रान:
program root_square
implicit none
integer i,j
real x,y,z,r
x=1.0
y=2.0
z=3.0
do j=1,3000
do i=1,1000000
r=sqrt(x*x+y*y+z*z)
enddo
enddo
end program root_square
सी:
#include "stdio.h"
#include "math.h"
int main (void)
{
float x=1.0,y=2.0,z=3.0,r;
int i,j;
for(j=0; j<3000; j++){
for(i=0; i<1000000; i++) {
r=sqrt(x*x+y*y+z*z);
}
}
return 0;
}
पायथन:
#!/usr/bin/env python
from math import sqrt
x = 1.0
y = 2.0
z = 3.0
for j in range(1,3001):
for i in range(1,1000001):
r = sqrt(x*x+y*y+z*z)
सबसे पहले, सी उदाहरण में 'z', 'y' और' z' अनियमित हैं। – Hauleth
आपका पायथन कोड संख्याओं की दो सूचियां बनाता है, एक 3000 नंबर के साथ और 100,000 नंबरों वाला एक। जब आप सी या फोरट्रान में नहीं करते हैं तो आप पायथन में ऐसा क्यों करते हैं? इसके अलावा, पायथन में आप सी और फोरट्रान में डबल परिशुद्धता फ़्लोटिंग पॉइंट का उपयोग करते हैं, आप केवल एक परिशुद्धता का उपयोग करते हैं। क्यूं कर? –
असल में, एक सार्थक तुलना के लिए, आप यह भी करना चाहेंगे: (i) ऑप्टिमाइज़ेशन सक्षम (जैसे) जीसीसी के लिए '-O3 -march = native' की तरह smth, 'इंटेल के लिए'fast'), और यह भी (ii) संशोधित करें लूप ताकि गणना को लूप के बाहर स्थानांतरित नहीं किया जा सके (उदाहरण के लिए 'आर = आर + एसकर्ट ((i + j) * x * x + y * y + z * z) ', और' प्रिंट * जैसे smth, अंत में आर') - क्योंकि संकलक अनुकूलन आपके लिए ऐसा करेंगे। जैसा कि किसी ने कहा था, अगर आपको डबल परिशुद्धता (जो अजगर के मामले में है) की आवश्यकता है, तो आपको क्रमशः फोरट्रान और सी में 'असली * 8' और' डबल' का उपयोग करना चाहिए। – laxxy