[Moscow.pm] Сравнение языков

Andrey Kovbovich akovbovich на gmail.com
Вт Фев 10 00:29:09 PST 2015


Ξ ~ → /Applications/Julia-0.3.5.app/Contents/Resources/julia/bin/julia -e
'@time x=Int32[0:10000000-1];@time s=sum(x);print(s)'
elapsed time: 0.088132927 seconds (40157560 bytes allocated, 21.96% gc time)
elapsed time: 0.05047629 seconds (910000 bytes allocated)
49999995000000%

Ξ /Applications/j64-701 → ./bin/jconsole
   7!:2 'x=:i.10000000'
134219264
   6!:2 's=:+/x'
0.016223
   s
49999995000000

итого:
Julia 50ms/38MB
J 16ms/128MB

10 февраля 2015 г., 9:49 пользователь Анатолий Гришаев <0body0 на rambler.ru>
написал:

>
> Linux i386
> > gcc -O3 -march=native  3.c -o 3.out && ./3.out
> Time:(0.00000000)ms . Sum: 49999995000000
>
> иногда но редко получается
> > gcc -O3 -march=native  3.c -o 3.out && ./3.out
> Time:(10.00000000)ms . Sum: 49999985000000
>
> Кстати лучше считать с нуля тогда процесор может использовать prefetch
>
> 10.02.2015 9:28, Михаил Монашёв пишет:
>
>> Здравствуйте, Mons.
>>
>>
>> Вот код, который соответствует исходной задаче.
>>
>> #include <stdio.h>
>> #include <time.h>
>>
>> int main()
>> {
>>          unsigned __int32 *arr;
>>
>>          arr  = (unsigned __int32 *) malloc(10000000 * sizeof(unsigned
>> __int32));
>>
>>          int i;
>>          for( i=10000000-1; i>=0; i--) {
>>                          arr[i] = i;
>>          }
>>
>>          clock_t start = clock();
>>
>>          unsigned __int64 sum;
>>          sum = 0;
>>          for( i=10000000-1; i>=0; i--) {
>>                          sum+=arr[i];
>>          }
>>
>>          clock_t end = clock();
>>
>>          printf("Time:(%0.8f)ms . Sum: %llu", ((double)end-start)/CLOCKS_PER_SEC*1000,
>> sum);
>>          return 0;
>> }
>>
>> C:\Temp>gcc -O3 -march=native  3.c -o 3.exe
>> 3.c: In function 'main':
>> 3.c:8:30: warning: incompatible implicit declaration of built-in function
>> 'malloc' [enabled by default]
>>    arr  = (unsigned __int32 *) malloc(10000000 * sizeof(unsigned
>> __int32));
>>                                ^
>>
>> C:\Temp>3.exe
>> Time:(11.00000000)ms . Sum: 49999995000000
>>
>> Это время в 32-битной венде.
>>
>> Как победить этот варнинг при компиляции я не разбирался пока.
>>
>>
>>  int main (int argc,char **argv) {
>>> ═ ═ ═ ═ longint S = atoi(argv[1]);
>>> ═ ═ ═ ═ longint i,z;
>>> ═ ═ ═ ═ clock_t start = clock();
>>> ═ ═ ═ ═ longint 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
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20150210/be9401db/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm