Я написал небольшой тест, чтобы сравнить производительность разных интерпретаторов /компиляторов для Python, Ruby, JavaScript и C ++.
Как и ожидалось, оказывается, что (оптимизированный) C ++ побеждает языки сценария, но фактор что это так, невероятно высокое. < /p>
Результаты: < /p>
sven@jet:~/tmp/js$ time node bla.js # * JavaScript with node *
0
real 0m1.222s
user 0m1.190s
sys 0m0.015s
sven@jet:~/tmp/js$ time ruby foo.rb # * Ruby *
0
real 0m52.428s
user 0m52.395s
sys 0m0.028s
sven@jet:~/tmp/js$ time python blub.py # * Python with CPython *
0
real 1m16.480s
user 1m16.371s
sys 0m0.080s
sven@jet:~/tmp/js$ time pypy blub.py # * Python with PyPy *
0
real 0m4.707s
user 0m4.579s
sys 0m0.028s
sven@jet:~/tmp/js$ time ./cpp_non_optimized 1000 1000000 # * C++ with -O0 (gcc) *
0
real 0m1.702s
user 0m1.699s
sys 0m0.002s
sven@jet:~/tmp/js$ time ./cpp_optimized 1000 1000000 # * C++ with -O3 (gcc) *
0
real 0m0.003s # (!!!)
Мне интересно, может ли кто -нибудь дать объяснение, почему оптимизированный код C ++ на три порядка быстрее, чем все остальное. < /p>
Clatchmark C ++ использует параметры командной строки, чтобы предотвратить предварительное вычисление результата во время компиляции. < /p>
ниже, я разместил исходные коды Различные языковые тесты, которые должны быть семантически эквивалентными.
Также я предоставил код сборки для оптимизированного вывода компилятора C ++ (с помощью GCC).
При просмотре оптимизированной сборки кажется, что компилятор объединил Две петли в эталоне до одного, но, тем не менее, все еще есть цикл! >
var s = 0;
var outer = 1000;
var inner = 1000000;
for (var i = 0; i < outer; ++i) {
for (var j = 0; j < inner; ++j) {
++s;
}
s -= inner;
}
console.log(s);
< /code>
python: < /strong> < /p>
s = 0
outer = 1000
inner = 1000000
for _ in xrange(outer):
for _ in xrange(inner):
s += 1
s -= inner
print s
< /code>
ruby: < /strong> < /p>
s = 0
outer = 1000
inner = 1000000
outer_end = outer - 1
inner_end = inner - 1
for i in 0..outer_end
for j in 0..inner_end
s = s + 1
end
s = s - inner
end
puts s
< /code>
c ++: < /strong> < /p>
#include
#include
#include
int main(int argc, char* argv[]) {
uint32_t s = 0;
uint32_t outer = atoi(argv[1]);
uint32_t inner = atoi(argv[2]);
for (uint32_t i = 0; i < outer; ++i) {
for (uint32_t j = 0; j < inner; ++j)
++s;
s -= inner;
}
std::cout
Подробнее здесь: https://stackoverflow.com/questions/248 ... dibly-fast
Почему эта программа C ++ так невероятно быстрая? ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1739729712
Anonymous
Я написал небольшой тест, чтобы сравнить производительность разных интерпретаторов /компиляторов для Python, Ruby, JavaScript и C ++.
Как и ожидалось, оказывается, что (оптимизированный) C ++ побеждает языки сценария, но фактор что это так, невероятно высокое. < /p>
Результаты: < /p>
sven@jet:~/tmp/js$ time node bla.js # * JavaScript with node *
0
real 0m1.222s
user 0m1.190s
sys 0m0.015s
sven@jet:~/tmp/js$ time ruby foo.rb # * Ruby *
0
real 0m52.428s
user 0m52.395s
sys 0m0.028s
sven@jet:~/tmp/js$ time python blub.py # * Python with CPython *
0
real 1m16.480s
user 1m16.371s
sys 0m0.080s
sven@jet:~/tmp/js$ time pypy blub.py # * Python with PyPy *
0
real 0m4.707s
user 0m4.579s
sys 0m0.028s
sven@jet:~/tmp/js$ time ./cpp_non_optimized 1000 1000000 # * C++ with -O0 (gcc) *
0
real 0m1.702s
user 0m1.699s
sys 0m0.002s
sven@jet:~/tmp/js$ time ./cpp_optimized 1000 1000000 # * C++ with -O3 (gcc) *
0
real 0m0.003s # (!!!)
Мне интересно, может ли кто -нибудь дать объяснение, почему оптимизированный код C ++ на три порядка быстрее, чем все остальное. < /p>
Clatchmark C ++ использует параметры командной строки, чтобы предотвратить предварительное вычисление результата во время компиляции. < /p>
ниже, я разместил исходные коды Различные языковые тесты, которые должны быть семантически эквивалентными.
Также я предоставил код сборки для оптимизированного вывода компилятора C ++ (с помощью GCC).
При просмотре оптимизированной сборки кажется, что компилятор объединил Две петли в эталоне до одного, но, тем не менее, все еще есть цикл! >
var s = 0;
var outer = 1000;
var inner = 1000000;
for (var i = 0; i < outer; ++i) {
for (var j = 0; j < inner; ++j) {
++s;
}
s -= inner;
}
console.log(s);
< /code>
[b] python: < /strong> < /p>
s = 0
outer = 1000
inner = 1000000
for _ in xrange(outer):
for _ in xrange(inner):
s += 1
s -= inner
print s
< /code>
ruby: < /strong> < /p>
s = 0
outer = 1000
inner = 1000000
outer_end = outer - 1
inner_end = inner - 1
for i in 0..outer_end
for j in 0..inner_end
s = s + 1
end
s = s - inner
end
puts s
< /code>
c ++: < /strong> < /p>
#include
#include
#include
int main(int argc, char* argv[]) {
uint32_t s = 0;
uint32_t outer = atoi(argv[1]);
uint32_t inner = atoi(argv[2]);
for (uint32_t i = 0; i < outer; ++i) {
for (uint32_t j = 0; j < inner; ++j)
++s;
s -= inner;
}
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/24829246/why-is-this-c-program-so-incredibly-fast[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия