[Moscow.pm] Сравнение языков
Илья Винокуров
ilvin на mail.ru
Вт Фев 10 02:48:55 PST 2015
Здравствуйте!
По поводу производительности Perl...
Привожу свой тестовый пример на Perl вместе с контрольным вариантом на C++.
CPU0: AMD Opteron 23xx (Gen 3 Class Opteron) stepping 01
perl -e 'use Benchmark qw/ timethese /; use List::Util qw/ sum /; use integer; my @arr = 0 .. 10_000_000 - 1; timethese(10, { FUNC => sub { sum @arr } });'
Benchmark: timing 10 iterations of FUNC...
FUNC: 2 wallclock secs ( 1.75 usr + 0.01 sys = 1.76 CPU) @ 5.68/s (n=10)
Т.е. 1/5.68 = 176ms
На том же процессоре такой код:
#include <time.h>
#include <sys/types.h>
#include <iostream>
#define ARR_DIM 10000000
#define COUNT 100
using namespace std;
int main(void) {
__uint32_t * arr = new __uint32_t[ARR_DIM];
__uint64_t sum;
int i;
for( i = ARR_DIM-1; i >= 0; i--) {
arr[i] = i;
}
clock_t start = clock();
for (int count = COUNT; count > 0; count--) {
sum = 0;
for( i = ARR_DIM - 1; i >= 0; i--) {
sum+=arr[i];
}
}
clock_t end = clock();
cout << "Time:(" << ((double)end-start)/(COUNT*CLOCKS_PER_SEC)*1000 << ")ms . Sum: " << sum << endl;
delete arr;
return 0;
}
g++ -O3 -march=native test.c -o test.exe && ./test.exe
Time:(13.4)ms . Sum: 49999995000000
Т.е. на данной конкретной задаче Perl в 13 раз медленнее C++.
С почтением,
Илья Винокуров.
Вторник, 10 февраля 2015, 13:08 +03:00 от Илья Винокуров <ilvin на mail.ru>:
>Марку процессора укажите пожалуйста... :)
>
>С почтением,
> Илья Винокуров.
>
>
>Вторник, 10 февраля 2015, 5:22 +03:00 от Mons Anderson <v.perepelitsa на corp.mail.ru>:
>>int main ( int argc, char **argv) {
>> long int S = atoi(argv[ 1 ]);
>> long int i,z;
>> clock_t start = clock();
>> long int sum = 0 ;
>> for (z = 0 ; z < 1000 ; z++ ){
>> sum = 0 ;
>> for (i= 0 ;i < S - S % 16 ; i+= 16 ) {
>> sum += i + i+ 1 + i+ 2 + i+ 3 + i+ 4 + i+ 5 + i+ 6 + i+ 7
>> + i+ 8 + i+ 9 + i+ 10 + i+ 11 + i+ 12 + i+ 13 + i+ 14 + i+ 15
>> ;
>> }
>> for (i; i < S; i++ ) {
>> sum += i;
>> }
>> }
>> clock_t end = clock();
>> printf( " %lu ( %0.8f ) \n " ,sum,(( double )end-start)/ 1e6 /z);
>>}
>>
>>
>>1.5 ms
>>
>>gcc --std=c99 -O3 -march=native
>>
>>
>>--
>>Mons Anderson
>>< mons на cpan.org >
>>
>>
>>>On 9 февр. 2015 г., at 16:11, Михаил Монашёв < postmaster на softsearch.ru > wrote:
>>>Здравствуйте, Mons.
>>>
>>>>Народ, я не осилил дочитать это всё до конца.
>>>>А давайте-ка соберёмся и померяемся.
>>>>Не в плане теории, а в плане конкретных чисел
>>>>сравним разные языки, подходы и т.п.
>>>
>>>А собираться обязательно? Можно ведь и удалённо. Я на Go пишу всего
>>>месяц и мне было бы сложно придти и что-то нормально на нём написать
>>>за малое время. Но сравнить языки было бы интересно.
>>>
>>>Предложу простую задачку, которая покажет, насколько хорошо язык
>>>работает с памятью: сложить все значения массива, состоящего из
>>>10000000 целых чисел. Код там простой: создаём массив, заполняем его,
>>>замеряем время, потом в цикле складываем элементы массива, снова
>>>замеряем время и выдаём результат. Вот мой вариант на Go:
>>>https://play.golang.org/p/iHGG3nV10L
>>>
>>>Тонкости: в песочнице код съедает много процессора и время там всегда
>>>одно и то же, поэтому его надо сохранить в файл, например main.go и
>>>потом запустить вот так: go run main.go
>>>Скомпилировать в исполняемый файл можно вот так: go build main.go
>>>А вот так выйдет более быстрая версия: go build -gcflags="-B" main.go
>>>Скачать Go можно вот тут: http://golang.org/
>>>
>>>--
>>>С уважением,
>>>Михаил mailto:postmaster на softsearch.ru
>>>
>>>--
>>>Moscow.pm mailing list
>>>moscow-pm на pm.org | http://moscow.pm.org
>>
>>--
>>Moscow.pm mailing list
>>moscow-pm на pm.org | http://moscow.pm.org
>
>--
>Moscow.pm mailing list
>moscow-pm на pm.org | http://moscow.pm.org
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20150210/b9d936a0/attachment-0001.html>
Подробная информация о списке рассылки Moscow-pm