2013-02-06 30 views
12

मैं मिनजीडब्ल्यू और एमएसवीसी के बीच चयन करने के लिए एक प्रयोग कर रहा हूं। मैंने ऐसा करने के लिए Adobe C++ Performance Benchmark का उपयोग करने का निर्णय लिया। जबकि कुछ परिचालनों पर एमएसवीसी का उत्पादन असाधारण रूप से तेज़ था, यह कुछ अन्य परिचालनों पर धीमा था। जब मैं उन्हें करने का समय दूंगा तो मैं बेंचमार्क सूट के अन्य हिस्सों को जोड़ दूंगा।मिनजीडब्ल्यू 4.7.2 बनाम विजुअल सी ++ 11.0 (2012) बेंचमार्क

मैंने कुछ सीमाओं को हटा दिया है जिनके पास चरित्र सीमा के कारण समान परिणाम हैं, आप मुझे लगता है कि पैटर्न के अनुसार उन्हें व्याख्या कर सकते हैं।

सिस्टम जानकारी

  • एएमडी एथलॉन (टीएम) 64 X2 डुअल कोर प्रोसेसर 5200+ 2.70GHz
  • 6GB डीडीआर 2 रैम 800MHz
  • विंडोज 8

किसी भी विचार क्यों परिणाम धीमा है? साथ ही, क्या इस परीक्षण का परिणाम कंप्यूटर गेम प्रदर्शन (सीपीयू भौतिकी इंजन शायद) की व्याख्या करने के लिए हो सकता है क्योंकि विशेष रूप से फ़्लोटिंग पॉइंट बेंचमार्क धीमे होते हैं?

-

MinGW

g++ -march=native -O3 -ffast-math -fomit-frame-pointer -momit-leaf-frame-pointer -flto -fwhole-program -ftree-loop-distribution 

simple_types_loop_invariant.exe 

test       description absolute operations ratio with 
number          time  per second test0 

0     "uint8_t variable add" 1.91 sec 836.38 M  1.00 
1   "uint8_t variable add hoisted" 0.08 sec 19277.11 M  0.04 
2  "uint8_t multiple variable adds" 1.93 sec 829.45 M  1.01 
3    "uint8_t variable subtract" 1.92 sec 832.47 M  1.00 
4 "uint8_t multiple variable subtracts" 2.57 sec 623.30 M  1.34 
5    "uint8_t variable multiply" 1.93 sec 831.17 M  1.01 
6 "uint8_t multiple variable multiplies" 2.56 sec 625.00 M  1.34 
7 "uint8_t multiple variable multiplies2" 1.92 sec 834.64 M  1.00 
8    "uint8_t variable divide" 10.83 sec 147.70 M  5.66 
9  "uint8_t multiple variable divides" 42.14 sec 37.97 M  22.03 
10 "uint8_t multiple variable divides2" 1.93 sec 829.45 M  1.01 
11  "uint8_t multiple variable mixed" 1.93 sec 828.16 M  1.01 
12     "uint8_t variable and" 1.92 sec 834.20 M  1.00 
13   "uint8_t multiple variable and" 1.93 sec 828.59 M  1.01 
14     "uint8_t variable or" 1.93 sec 830.31 M  1.01 
15   "uint8_t multiple variable or" 1.91 sec 836.38 M  1.00 
16     "uint8_t variable xor" 1.90 sec 840.78 M  0.99 
17   "uint8_t multiple variable xor" 1.92 sec 832.47 M  1.00 

Total absolute time for uint8_t loop invariant: 83.17 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "int16_t variable add" 1.92 sec 835.51 M  1.00 
1   "int16_t variable add hoisted" 1.91 sec 835.95 M  1.00 
2  "int16_t multiple variable adds" 1.92 sec 833.33 M  1.00 
3    "int16_t variable subtract" 1.99 sec 804.83 M  1.04 
4 "int16_t multiple variable subtracts" 2.57 sec 622.81 M  1.34 
5    "int16_t variable multiply" 1.92 sec 832.47 M  1.00 
6 "int16_t multiple variable multiplies" 1.91 sec 838.57 M  1.00 
7 "int16_t multiple variable multiplies2" 1.92 sec 831.60 M  1.00 
8    "int16_t variable divide" 27.53 sec 58.11 M  14.38 
9  "int16_t multiple variable divides" 107.65 sec 14.86 M  56.21 
10 "int16_t multiple variable divides2" 1.95 sec 819.67 M  1.02 
11  "int16_t multiple variable mixed" 1.93 sec 828.16 M  1.01 
12     "int16_t variable and" 1.93 sec 828.16 M  1.01 
13   "int16_t multiple variable and" 1.92 sec 831.60 M  1.00 
14     "int16_t variable or" 1.93 sec 829.88 M  1.01 
15   "int16_t multiple variable or" 1.92 sec 832.90 M  1.00 
16     "int16_t variable xor" 1.93 sec 830.74 M  1.01 
17   "int16_t multiple variable xor" 2.41 sec 665.00 M  1.26 

Total absolute time for int16_t loop invariant: 167.16 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "uint16_t variable add" 1.93 sec 830.74 M  1.00 
1   "uint16_t variable add hoisted" 0.16 sec 9937.89 M  0.08 
2  "uint16_t multiple variable adds" 1.93 sec 828.59 M  1.00 
3    "uint16_t variable subtract" 1.92 sec 835.07 M  0.99 
4 "uint16_t multiple variable subtracts" 2.56 sec 625.73 M  1.33 
5    "uint16_t variable multiply" 1.92 sec 835.07 M  0.99 
6 "uint16_t multiple variable multiplies" 2.55 sec 627.94 M  1.32 
7 "uint16_t multiple variable multiplies2" 1.92 sec 832.47 M  1.00 
8    "uint16_t variable divide" 16.08 sec 99.49 M  8.35 
9  "uint16_t multiple variable divides" 64.86 sec 24.67 M  33.68 
10 "uint16_t multiple variable divides2" 1.92 sec 833.77 M  1.00 
11  "uint16_t multiple variable mixed" 1.92 sec 832.03 M  1.00 
12     "uint16_t variable and" 1.92 sec 832.03 M  1.00 
13   "uint16_t multiple variable and" 1.92 sec 832.03 M  1.00 
14     "uint16_t variable or" 1.93 sec 829.02 M  1.00 
15   "uint16_t multiple variable or" 1.92 sec 834.20 M  1.00 
16     "uint16_t variable xor" 1.92 sec 835.07 M  0.99 
17   "uint16_t multiple variable xor" 1.92 sec 834.20 M  1.00 

Total absolute time for uint16_t loop invariant: 111.19 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "int32_t variable add" 0.38 sec 4232.80 M  1.00 
1   "int32_t variable add hoisted" 0.33 sec 4878.05 M  0.87 
2  "int32_t multiple variable adds" 0.82 sec 1963.19 M  2.16 
3    "int32_t variable subtract" 0.64 sec 2500.00 M  1.69 
4 "int32_t multiple variable subtracts" 0.80 sec 2005.01 M  2.11 
5    "int32_t variable multiply" 2.10 sec 762.27 M  5.55 
6 "int32_t multiple variable multiplies" 8.33 sec 192.01 M  22.04 
7 "int32_t multiple variable multiplies2" 0.39 sec 4092.07 M  1.03 
8    "int32_t variable divide" 26.94 sec 59.39 M  71.27 
9  "int32_t multiple variable divides" 106.48 sec 15.03 M  281.68 
10 "int32_t multiple variable divides2" 0.39 sec 4060.91 M  1.04 
11  "int32_t multiple variable mixed" 0.50 sec 3187.25 M  1.33 
12     "int32_t variable and" 0.38 sec 4232.80 M  1.00 
13   "int32_t multiple variable and" 0.40 sec 4030.23 M  1.05 
14     "int32_t variable or" 0.42 sec 3764.71 M  1.12 
15   "int32_t multiple variable or" 0.42 sec 3855.42 M  1.10 
16     "int32_t variable xor" 0.41 sec 3950.62 M  1.07 
17   "int32_t multiple variable xor" 0.38 sec 4244.03 M  1.00 

Total absolute time for int32_t loop invariant: 150.49 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "uint32_t variable add" 0.39 sec 4081.63 M  1.00 
1   "uint32_t variable add hoisted" 0.32 sec 4938.27 M  0.83 
2  "uint32_t multiple variable adds" 0.39 sec 4081.63 M  1.00 
3    "uint32_t variable subtract" 0.64 sec 2503.91 M  1.63 
4 "uint32_t multiple variable subtracts" 0.80 sec 2000.00 M  2.04 
5    "uint32_t variable multiply" 2.10 sec 761.54 M  5.36 
6 "uint32_t multiple variable multiplies" 2.11 sec 759.37 M  5.38 
7 "uint32_t multiple variable multiplies2" 0.39 sec 4092.07 M  1.00 
8    "uint32_t variable divide" 25.77 sec 62.08 M  65.75 
9  "uint32_t multiple variable divides" 105.98 sec 15.10 M  270.36 
10 "uint32_t multiple variable divides2" 0.39 sec 4081.63 M  1.00 
11  "uint32_t multiple variable mixed" 0.39 sec 4102.56 M  0.99 
12     "uint32_t variable and" 0.38 sec 4177.55 M  0.98 
13   "uint32_t multiple variable and" 0.39 sec 4092.07 M  1.00 
14     "uint32_t variable or" 0.40 sec 4020.10 M  1.02 
15   "uint32_t multiple variable or" 0.40 sec 4010.03 M  1.02 
16     "uint32_t variable xor" 0.39 sec 4071.25 M  1.00 
17   "uint32_t multiple variable xor" 0.38 sec 4188.48 M  0.97 

Total absolute time for uint32_t loop invariant: 142.03 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "int64_t variable add" 0.80 sec 1997.50 M  1.00 
1   "int64_t variable add hoisted" 0.66 sec 2442.75 M  0.82 
2  "int64_t multiple variable adds" 1.66 sec 962.70 M  2.07 
3    "int64_t variable subtract" 1.30 sec 1233.62 M  1.62 
4 "int64_t multiple variable subtracts" 1.61 sec 991.33 M  2.01 
5    "int64_t variable multiply" 5.83 sec 274.40 M  7.28 
6 "int64_t multiple variable multiplies" 24.06 sec 66.50 M  30.04 
7 "int64_t multiple variable multiplies2" 0.85 sec 1880.14 M  1.06 
8    "int64_t variable divide" 43.13 sec 37.10 M  53.84 
9  "int64_t multiple variable divides" 166.87 sec 9.59 M  208.32 
10 "int64_t multiple variable divides2" 0.79 sec 2025.32 M  0.99 
11  "int64_t multiple variable mixed" 0.99 sec 1617.80 M  1.23 
12     "int64_t variable and" 0.79 sec 2033.04 M  0.98 
13   "int64_t multiple variable and" 0.77 sec 2075.23 M  0.96 
14     "int64_t variable or" 0.79 sec 2030.46 M  0.98 
15   "int64_t multiple variable or" 0.78 sec 2059.20 M  0.97 
16     "int64_t variable xor" 0.78 sec 2051.28 M  0.97 
17   "int64_t multiple variable xor" 0.79 sec 2035.62 M  0.98 

Total absolute time for int64_t loop invariant: 253.23 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "uint64_t variable add" 0.78 sec 2064.52 M  1.00 
1   "uint64_t variable add hoisted" 0.66 sec 2435.31 M  0.85 
2  "uint64_t multiple variable adds" 0.79 sec 2025.32 M  1.02 
3    "uint64_t variable subtract" 1.29 sec 1241.27 M  1.66 
4 "uint64_t multiple variable subtracts" 1.60 sec 1001.88 M  2.06 
5    "uint64_t variable multiply" 5.98 sec 267.56 M  7.72 
6 "uint64_t multiple variable multiplies" 5.81 sec 275.48 M  7.49 
7 "uint64_t multiple variable multiplies2" 0.79 sec 2027.88 M  1.02 
8    "uint64_t variable divide" 38.20 sec 41.89 M  49.28 
9  "uint64_t multiple variable divides" 151.00 sec 10.60 M  194.83 
10 "uint64_t multiple variable divides2" 0.79 sec 2020.20 M  1.02 
11  "uint64_t multiple variable mixed" 0.78 sec 2064.52 M  1.00 
12     "uint64_t variable and" 0.78 sec 2056.56 M  1.00 
13   "uint64_t multiple variable and" 0.79 sec 2030.46 M  1.02 
14     "uint64_t variable or" 0.77 sec 2080.62 M  0.99 
15   "uint64_t multiple variable or" 0.79 sec 2020.20 M  1.02 
16     "uint64_t variable xor" 0.78 sec 2040.82 M  1.01 
17   "uint64_t multiple variable xor" 0.77 sec 2069.86 M  1.00 

Total absolute time for uint64_t loop invariant: 213.13 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "float variable add" 0.41 sec 3874.09 M  1.00 
1   "float variable add hoisted" 0.33 sec 4923.08 M  0.79 
2  "float multiple variable adds" 0.41 sec 3892.94 M  1.00 
3    "float variable subtract" 0.39 sec 4081.63 M  0.95 
4 "float multiple variable subtracts" 1.37 sec 1170.45 M  3.31 
5    "float variable multiply" 0.33 sec 4892.97 M  0.79 
6 "float multiple variable multiplies" 0.32 sec 5079.37 M  0.76 
7 "float multiple variable multiplies2" 0.41 sec 3940.89 M  0.98 
8    "float variable divide" 0.33 sec 4907.98 M  0.79 
9  "float multiple variable divides" 0.33 sec 4833.84 M  0.80 
10 "float multiple variable divides2" 0.40 sec 3970.22 M  0.98 
11  "float multiple variable mixed" 0.40 sec 4050.63 M  0.96 

Total absolute time for float loop invariant: 5.41 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "double variable add" 0.80 sec 1990.05 M  1.00 
1   "double variable add hoisted" 0.65 sec 2457.76 M  0.81 
2  "double multiple variable adds" 0.79 sec 2017.65 M  0.99 
3    "double variable subtract" 0.82 sec 1960.78 M  1.01 
4 "double multiple variable subtracts" 2.72 sec 587.37 M  3.39 
5    "double variable multiply" 0.76 sec 2110.82 M  0.94 
6 "double multiple variable multiplies" 0.78 sec 2048.66 M  0.97 
7 "double multiple variable multiplies2" 0.80 sec 1995.01 M  1.00 
8    "double variable divide" 0.67 sec 2388.06 M  0.83 
9  "double multiple variable divides" 0.66 sec 2420.57 M  0.82 
10 "double multiple variable divides2" 0.80 sec 2007.53 M  0.99 
11  "double multiple variable mixed" 0.81 sec 1968.02 M  1.01 

Total absolute time for double loop invariant: 11.07 sec

-

विजुअल C++ 11,0

cl /O2 /Ob2 /Oi /Oy /GL /MD /GS- /Gy /Qpar /arch:SSE2 /fp:fast /GR- simple_types_loop_invariant.cpp 

simple_types_loop_invariant.exe 

test       description absolute operations ratio with 
number          time  per second test0 

0     "uint8_t variable add" 0.17 sec 9638.55 M  1.00 
1   "uint8_t variable add hoisted" 0.11 sec 15094.34 M  0.64 
2  "uint8_t multiple variable adds" 0.89 sec 1801.80 M  5.35 
3    "uint8_t variable subtract" 0.17 sec 9638.55 M  1.00 
4 "uint8_t multiple variable subtracts" 3.51 sec 456.23 M  21.13 
5    "uint8_t variable multiply" 2.23 sec 719.10 M  13.40 
6 "uint8_t multiple variable multiplies" 4.48 sec 356.98 M  27.00 
7 "uint8_t multiple variable multiplies2" 1.29 sec 1239.35 M  7.78 
8    "uint8_t variable divide" 27.23 sec 58.76 M  164.03 
9  "uint8_t multiple variable divides" 108.58 sec 14.74 M  654.11 
10 "uint8_t multiple variable divides2" 1.28 sec 1252.94 M  7.69 
11  "uint8_t multiple variable mixed" 1.27 sec 1264.82 M  7.62 
12     "uint8_t variable and" 1.28 sec 1247.08 M  7.73 
13   "uint8_t multiple variable and" 3.52 sec 454.16 M  21.22 
14     "uint8_t variable or" 1.28 sec 1254.90 M  7.68 
15   "uint8_t multiple variable or" 3.54 sec 452.36 M  21.31 
16     "uint8_t variable xor" 1.27 sec 1256.87 M  7.67 
17   "uint8_t multiple variable xor" 3.49 sec 457.93 M  21.05 

Total absolute time for uint8_t loop invariant: 165.57 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "int16_t variable add" 0.33 sec 4923.08 M  1.00 
1   "int16_t variable add hoisted" 0.21 sec 7804.88 M  0.63 
2  "int16_t multiple variable adds" 0.76 sec 2094.24 M  2.35 
3    "int16_t variable subtract" 0.32 sec 5063.29 M  0.97 
4 "int16_t multiple variable subtracts" 2.02 sec 790.12 M  6.23 
5    "int16_t variable multiply" 1.61 sec 995.64 M  4.94 
6 "int16_t multiple variable multiplies" 4.45 sec 359.31 M  13.70 
7 "int16_t multiple variable multiplies2" 1.13 sec 1418.44 M  3.47 
8    "int16_t variable divide" 27.24 sec 58.74 M  83.81 
9  "int16_t multiple variable divides" 109.33 sec 14.64 M  336.39 
10 "int16_t multiple variable divides2" 0.97 sec 1654.60 M  2.98 
11  "int16_t multiple variable mixed" 0.61 sec 2631.58 M  1.87 
12     "int16_t variable and" 1.12 sec 1433.69 M  3.43 
13   "int16_t multiple variable and" 1.77 sec 904.47 M  5.44 
14     "int16_t variable or" 1.20 sec 1330.01 M  3.70 
15   "int16_t multiple variable or" 1.77 sec 906.00 M  5.43 
16     "int16_t variable xor" 1.12 sec 1432.41 M  3.44 
17   "int16_t multiple variable xor" 1.77 sec 905.49 M  5.44 

Total absolute time for int16_t loop invariant: 157.70 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "uint16_t variable add" 0.33 sec 4833.84 M  1.00 
1   "uint16_t variable add hoisted" 0.21 sec 7729.47 M  0.63 
2  "uint16_t multiple variable adds" 0.78 sec 2059.20 M  2.35 
3    "uint16_t variable subtract" 0.32 sec 5031.45 M  0.96 
4 "uint16_t multiple variable subtracts" 2.03 sec 786.63 M  6.15 
5    "uint16_t variable multiply" 1.61 sec 993.79 M  4.86 
6 "uint16_t multiple variable multiplies" 4.45 sec 359.71 M  13.44 
7 "uint16_t multiple variable multiplies2" 1.12 sec 1428.57 M  3.38 
8    "uint16_t variable divide" 27.15 sec 58.94 M  82.01 
9  "uint16_t multiple variable divides" 109.41 sec 14.62 M  330.53 
10 "uint16_t multiple variable divides2" 2.42 sec 661.70 M  7.31 
11  "uint16_t multiple variable mixed" 2.43 sec 658.71 M  7.34 
12     "uint16_t variable and" 2.53 sec 632.91 M  7.64 
13   "uint16_t multiple variable and" 3.21 sec 498.75 M  9.69 
14     "uint16_t variable or" 2.52 sec 633.91 M  7.63 
15   "uint16_t multiple variable or" 3.19 sec 501.25 M  9.64 
16     "uint16_t variable xor" 2.52 sec 634.92 M  7.61 
17   "uint16_t multiple variable xor" 3.21 sec 498.29 M  9.70 

Total absolute time for uint16_t loop invariant: 169.43 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "int32_t variable add" 0.64 sec 2519.69 M  1.00 
1   "int32_t variable add hoisted" 0.41 sec 3902.44 M  0.65 
2  "int32_t multiple variable adds" 0.97 sec 1654.60 M  1.52 
3    "int32_t variable subtract" 0.63 sec 2539.68 M  0.99 
4 "int32_t multiple variable subtracts" 0.97 sec 1651.19 M  1.53 
5    "int32_t variable multiply" 2.01 sec 797.61 M  3.16 
6 "int32_t multiple variable multiplies" 4.17 sec 383.60 M  6.57 
7 "int32_t multiple variable multiplies2" 1.27 sec 1262.83 M  2.00 
8    "int32_t variable divide" 26.87 sec 59.55 M  42.31 
9  "int32_t multiple variable divides" 108.12 sec 14.80 M  170.27 
10 "int32_t multiple variable divides2" 0.96 sec 1673.64 M  1.51 
11  "int32_t multiple variable mixed" 0.52 sec 3082.85 M  0.82 
12     "int32_t variable and" 0.66 sec 2431.61 M  1.04 
13   "int32_t multiple variable and" 0.98 sec 1626.02 M  1.55 
14     "int32_t variable or" 0.65 sec 2472.95 M  1.02 
15   "int32_t multiple variable or" 0.96 sec 1673.64 M  1.51 
16     "int32_t variable xor" 0.65 sec 2480.62 M  1.02 
17   "int32_t multiple variable xor" 0.95 sec 1682.44 M  1.50 

Total absolute time for int32_t loop invariant: 152.36 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "uint32_t variable add" 0.65 sec 2446.48 M  1.00 
1   "uint32_t variable add hoisted" 0.41 sec 3911.98 M  0.63 
2  "uint32_t multiple variable adds" 0.96 sec 1671.89 M  1.46 
3    "uint32_t variable subtract" 0.66 sec 2435.31 M  1.00 
4 "uint32_t multiple variable subtracts" 0.97 sec 1647.79 M  1.48 
5    "uint32_t variable multiply" 1.92 sec 834.64 M  2.93 
6 "uint32_t multiple variable multiplies" 4.45 sec 359.71 M  6.80 
7 "uint32_t multiple variable multiplies2" 1.30 sec 1230.77 M  1.99 
8    "uint32_t variable divide" 26.33 sec 60.77 M  40.26 
9  "uint32_t multiple variable divides" 99.86 sec 16.02 M  152.69 
10 "uint32_t multiple variable divides2" 0.95 sec 1691.33 M  1.45 
11  "uint32_t multiple variable mixed" 0.54 sec 2962.96 M  0.83 
12     "uint32_t variable and" 0.65 sec 2476.78 M  0.99 
13   "uint32_t multiple variable and" 0.96 sec 1661.47 M  1.47 
14     "uint32_t variable or" 0.65 sec 2469.14 M  0.99 
15   "uint32_t multiple variable or" 0.95 sec 1678.91 M  1.46 
16     "uint32_t variable xor" 0.65 sec 2461.54 M  0.99 
17   "uint32_t multiple variable xor" 0.97 sec 1654.60 M  1.48 

Total absolute time for uint32_t loop invariant: 143.81 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "int64_t variable add" 1.30 sec 1233.62 M  1.00 
1   "int64_t variable add hoisted" 0.81 sec 1987.58 M  0.62 
2  "int64_t multiple variable adds" 1.96 sec 817.58 M  1.51 
3    "int64_t variable subtract" 1.30 sec 1226.99 M  1.01 
4 "int64_t multiple variable subtracts" 1.94 sec 825.17 M  1.49 
5    "int64_t variable multiply" 7.17 sec 223.06 M  5.53 
6 "int64_t multiple variable multiplies" 24.97 sec 64.08 M  19.25 
7 "int64_t multiple variable multiplies2" 1.97 sec 810.54 M  1.52 
8    "int64_t variable divide" 62.56 sec 25.58 M  48.24 
9  "int64_t multiple variable divides" 246.80 sec 6.48 M  190.29 
10 "int64_t multiple variable divides2" 1.94 sec 824.74 M  1.50 
11  "int64_t multiple variable mixed" 0.80 sec 2002.50 M  0.62 
12     "int64_t variable and" 1.28 sec 1249.02 M  0.99 
13   "int64_t multiple variable and" 1.94 sec 823.89 M  1.50 
14     "int64_t variable or" 1.29 sec 1236.48 M  1.00 
15   "int64_t multiple variable or" 1.94 sec 826.45 M  1.49 
16     "int64_t variable xor" 1.29 sec 1237.43 M  1.00 
17   "int64_t multiple variable xor" 1.95 sec 822.62 M  1.50 

Total absolute time for int64_t loop invariant: 363.21 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "uint64_t variable add" 1.29 sec 1237.43 M  1.00 
1   "uint64_t variable add hoisted" 0.82 sec 1941.75 M  0.64 
2  "uint64_t multiple variable adds" 1.95 sec 820.93 M  1.51 
3    "uint64_t variable subtract" 1.30 sec 1226.05 M  1.01 
4 "uint64_t multiple variable subtracts" 2.06 sec 777.45 M  1.59 
5    "uint64_t variable multiply" 7.42 sec 215.78 M  5.73 
6 "uint64_t multiple variable multiplies" 26.28 sec 60.88 M  20.33 
7 "uint64_t multiple variable multiplies2" 1.97 sec 810.54 M  1.53 
8    "uint64_t variable divide" 61.84 sec 25.87 M  47.83 
9  "uint64_t multiple variable divides" 235.73 sec 6.79 M  182.31 
10 "uint64_t multiple variable divides2" 1.98 sec 806.45 M  1.53 
11  "uint64_t multiple variable mixed" 1.05 sec 1519.47 M  0.81 
12     "uint64_t variable and" 1.29 sec 1244.17 M  0.99 
13   "uint64_t multiple variable and" 1.95 sec 821.78 M  1.51 
14     "uint64_t variable or" 1.29 sec 1236.48 M  1.00 
15   "uint64_t multiple variable or" 1.94 sec 823.05 M  1.50 
16     "uint64_t variable xor" 1.29 sec 1242.24 M  1.00 
17   "uint64_t multiple variable xor" 1.95 sec 819.67 M  1.51 

Total absolute time for uint64_t loop invariant: 353.42 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "float variable add" 0.65 sec 2450.23 M  1.00 
1   "float variable add hoisted" 0.41 sec 3892.94 M  0.63 
2  "float multiple variable adds" 1.60 sec 998.75 M  2.45 
3    "float variable subtract" 0.65 sec 2472.95 M  0.99 
4 "float multiple variable subtracts" 1.61 sec 996.88 M  2.46 
5    "float variable multiply" 0.63 sec 2531.65 M  0.97 
6 "float multiple variable multiplies" 1.30 sec 1231.72 M  1.99 
7 "float multiple variable multiplies2" 0.64 sec 2503.91 M  0.98 
8    "float variable divide" 0.65 sec 2457.76 M  1.00 
9  "float multiple variable divides" 1.29 sec 1240.31 M  1.98 
10 "float multiple variable divides2" 0.65 sec 2476.78 M  0.99 
11  "float multiple variable mixed" 0.97 sec 1646.09 M  1.49 

Total absolute time for float loop invariant: 11.05 sec 

test       description absolute operations ratio with 
number          time  per second test0 

0     "double variable add" 1.33 sec 1203.91 M  1.00 
1   "double variable add hoisted" 0.84 sec 1911.59 M  0.63 
2  "double multiple variable adds" 3.20 sec 499.69 M  2.41 
3    "double variable subtract" 1.29 sec 1238.39 M  0.97 
4 "double multiple variable subtracts" 3.24 sec 493.83 M  2.44 
5    "double variable multiply" 1.29 sec 1237.43 M  0.97 
6 "double multiple variable multiplies" 2.59 sec 618.00 M  1.95 
7 "double multiple variable multiplies2" 1.28 sec 1247.08 M  0.97 
8    "double variable divide" 5.12 sec 312.44 M  3.85 
9  "double multiple variable divides" 31.99 sec 50.01 M  24.07 
10 "double multiple variable divides2" 1.29 sec 1240.31 M  0.97 
11  "double multiple variable mixed" 1.94 sec 824.74 M  1.46 

Total absolute time for double loop invariant: 55.41 sec 
+1

आप जेनरेट एएसएम पर एक नज़र डाल सकते हैं। – antonijn

+0

@ एंटोनिजन मैं ऐसा करूँगा जब मेरे पास समय हो तो अनुकूलन झंडे का उपयोग सही हो। – Etherealone

+0

अच्छा, उनकी समीक्षा करने और उनके प्रभाव का अध्ययन करने के लिए अपना समय लें। किसी के लिए यह करने की उम्मीद मत करो। फ्लोटिंग पॉइंट परफ मामले के साथ/fp से शुरू करें। डिफ़ॉल्ट है/fp: सटीक और यह धीमा है। –

उत्तर

7

मैं मैट्स (जो मैं दूसरा हूं) में जोड़ना चाहता हूं, कि आप केवल उस विशेष ऐप को कोड कर सकते हैं जिसे आप चाहते हैं और अलग-अलग अनुकूलन झंडे के साथ तैयार उत्पाद पर दोनों को आजमाएं (उदाहरण के लिए, आप इस्तेमाल कर सकते थे जीसीसी या अन्य झंडे से तेज़ झंडा जो आलसी डिवीजनों को इजाजत देता है) और देखें कि क्या कोई महत्वपूर्ण अंतर है या नहीं।

  • मेरा कार्यक्रम काफी तेजी से है:

    लेकिन वह ऐसा करने से पहले, आप बस इन सवालों का जवाब करने के लिए है?अधिकांश कार्यक्रम सीपीयू-बाध्य नहीं हैं या यदि वे हैं, तो आपको की आवश्यकता नहीं है पहले से हैं।

  • मेरा प्रोग्राम अपना अधिकांश समय बर्बाद कर देता है?
  • क्या अधिक कुशल एल्गोरिदम हैं?
  • मेमोरी खपत कैसा है?
  • आईओ कैसे है?

इन सवालों के जवाब देने के लिए, आपको केवल प्रोफाइलिंग और एल्गोरिदमिक आधार की आवश्यकता है (और यदि आवश्यक हो तो असेंबली का थोड़ा सा लेकिन आप इसके बिना बहुत कुछ कर सकते हैं)। सिवाय इसके कि दो कंपाइलर्स बहुत अलग परिणाम देते हैं (जो नहीं होना चाहिए), आपको वास्तव में परवाह नहीं है कि कौन सा कंपाइलर आपको अपने प्रोग्राम में 10 सेकंड (10 मिनट में से) बचाता है।

अधिकांश समय, प्रोग्रामर की वजह से प्रोग्राम धीमा नहीं होता है, लेकिन प्रोग्रामर की वजह से। मेरा मुद्दा बनाने के लिए, आप इसे देख सकते हैं: http://blog.golang.org/2011/06/profiling-go-programs.html नहीं, मैं आपको किसी भी अन्य प्रोग्रामिंग भाषा में बदलने का इरादा नहीं रखता हूं! लेकिन मैं उस व्यक्ति द्वारा वास्तव में प्रभावित हुआ हूं जिसने इसे पोस्ट किया है और मुझे लगता है कि आप करेंगे।

+0

हां, बिल्कुल, सही एल्गोरिदम चुनना 100 या उससे अधिक के कारक से कुछ बदल सकता है, जहां कंपिलर सबसे अच्छे मामलों में आधे/दोगुनी गति हो सकते हैं, और आम तौर पर बहुत कम अंतर [कोड के बड़े टुकड़ों पर]। –

+0

मैं इसे थोड़ा और अधिक जोर देना चाहता हूं, यह वास्तव में * अच्छा लेख है, लोगों को पढ़ना चाहिए। – Etherealone

6

विभिन्न compilers अलग (प्रकारों के लिए अलग-अलग कोड उत्पन्न के) संचालन। दोनों कंपाइलरों के साथ कोड संकलित किए बिना और असेंबलर कोड उत्पन्न करने की तुलना में, यह जवाब देना बहुत मुश्किल है कि क्यों दूसरे की तुलना में बेहतर/बदतर है।

शायद यह भी एक अच्छा विचार नहीं है कि यह काफी मामूली कार्य प्रतीत होता है (मैं वास्तव में डाउनलोड करने और कोड को देखने के लिए बहुत आलसी हूं - मैं बस बेंचमार्क नाम पढ़ रहा हूं और इसी तरह के मानकों के अनुभव के साथ इस निष्कर्ष को चित्रित करना), और इससे निष्कर्ष निकाला जाता है कि आपको कोड के बहुत बड़े टुकड़े पर सुधार का स्तर मिलता है। यदि आपके पास एक लूप है जिसे एक निर्देश या दो निर्देशों का उपयोग करके हल किया जा सकता है, और एक कंपाइलर "दो निर्देशों" का उपयोग करने का निर्णय लेता है (जो भी मनमाने ढंग से कारण कंपेलर इन चीजों का निर्णय लेते हैं), तो पूरा लूप 30-50% धीमा हो सकता है दो निर्देशों के साथ। लेकिन इसका मतलब यह नहीं है कि यदि आप लूप में कुछ और करते हैं, तो यह दोनों कंपाइलर्स में एक और चार निर्देश जोड़ता है, लूप अभी भी इतना तेज़ है, है ना?

निर्देश आदेश या संरेखण में भी मिनट अंतर कभी-कभी बहुत छोटी लूप के साथ बेंचमार्क पर एक बड़ा अंतर डाल सकता है।