[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