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

Mons Anderson v.perepelitsa на corp.mail.ru
Вт Фев 10 04:26:59 PST 2015


$ cat sum.c
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main (int argc,char **argv) {
	long int S = atoi(argv[1]);
	int * a  = (int *)malloc(S * sizeof(int));
	long int i,z;
	for (i=0;i < S; i++) { a[i] = i; }
	clock_t start = clock();
	long int sum = 0;
	for(z = 0; z < 100; z++ ){
		sum = 0;
		for (i=0;i < S - S % 16; i+=16) {
			sum += a[i]   + a[i+1] + a[i+2]  + a[i+3]  + a[i+4]  + a[i+5]  + a[i+6]  + a[i+7]
			    +  a[i+8] + a[i+9] + a[i+10] + a[i+11] + a[i+12] + a[i+13] + a[i+14] + a[i+15]
			;
		}
		for (i; i < S; i++ ) {
			sum += a[i];
		}
	}
	clock_t end = clock();
	printf("%lu: %lu (%0.8f)\n",S,sum,((double)end-start)/CLOCKS_PER_SEC/z);
}
$ gcc --std=c99 -O3 -march=native -o sum sum.c && ./sum 10000000
10000000: 49999995000000 (0.00660000)

-- 
Mons Anderson
<mons на cpan.org>



> On 10 февр. 2015 г., at 9:28, Михаил Монашёв <postmaster на softsearch.ru> wrote:
> 
> Здравствуйте, 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
> 
> 
> 
> 
> -- 
> С уважением,
> Михаил                          mailto:postmaster на softsearch.ru <mailto:postmaster на softsearch.ru>
> 
> -- 
> Moscow.pm mailing list
> moscow-pm на pm.org <mailto:moscow-pm на pm.org> | http://moscow.pm.org <http://moscow.pm.org/>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20150210/051b05a5/attachment-0001.html>


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