У меня есть уже универсальная сборка быстрая я аж засомневался что что до этого все тормозило все вот эти подменюшки, свистопляски и прочие ингридиенты я думаю подойдет к эльбрусу раз в kvm набрасывал основную оболочку
За 20+ лет (история EPIC началась в 1989) за дофигальярд убитых енотов две весьма известные ИТ компании (при участии и сообщества — gcc же умеет ia64) не осилили.
При этом VLIW вполне себе рулит и педалит в видеокартах, аппаратных видеодекодерах и прочем специализированном железе
Какой ужас. Надеюсь, это не относилось к утверждению «гнутые расширения позволяют не переходить на C++».
я тебе вообще довольно базовую конструкцию описал.
и если ты вспомнишь что в Си нет эксепшинов — то наверно я должен напомнить тебе и про setjmp()/longjmp() (а для них же и volatle переменные запросто могут потребоваться, которые ты должен НЕ забыть САМ описать как volatile — во избежание undefined behaviour, о которых тут упоминали при разговоре про -O3)
так что ад который могбы потребовпться — превышает на порядок твои негодования от прыжков между функциями на стеке :-) ..
и вообще — давай я у тебя лямбду и функтор отбиру из C++ , обозвав их как «ненужны, можно написать программу и без них»..
всяких полезных штук вообще полно в GNU-C — и уже теперь нет уверенности, что авторы (и сочувствующие) LCC не назвали очередную из них словом «ненужно».
> пруфы на что? на то как сборка 11 версии постгреса падает при попытке собраться с jit ?
Что конкретно падает, с какой формулировкой?
разве не очевидно с какой? :-)
$ ./configure --with-llvm
checking build system type... e2k-unknown-linux-gnu
checking host system type... e2k-unknown-linux-gnu
checking which template to use... linux
checking whether NLS is wanted... no
checking for default port number... 5432
checking for block size... 8kB
checking for segment size... 1GB
checking for WAL block size... 8kB
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for gawk... gawk
checking for llvm-config... no
checking for llvm-config-7... no
checking for llvm-config-6.0... no
checking for llvm-config-5.0... no
checking for llvm-config-4.0... no
checking for llvm-config-3.9... no
configure: error: llvm-config not found, but required when compiling --with-llvm, specify with LLVM_CONFIG=
> или будем соревноваться по количеству if-в-секунду Эльбруса с rasspberry-pi ?
Можно, думаю малина продует :)
да, действительно, малинка продула :-) ..
снимаю шляпу!
написал сортировку пузырьком — и Малинка продула.. сортировку позырьком — ну потому что незнал что можно проверить (ну с учётом того что мои-то «полезные» программы скомпилировать я не могу на Эльбрусе — поэтому пришлось выдумывать «не полезные»)
// to compile:
// gcc -Wall -Wextra -O3 -funsafe-math-optimizations -o bubble-lab bubble-lab.c
// or
// gcc -Wall -Wextra -O3 -funsafe-math-optimizations -DCANNOT_RANDOM -o bubble-lab bubble-lab.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#ifndef CANNOT_RANDOM
#include <sys/random.h>
#endif
#define VECTOR_SIZE 16
#define RANDOM_FLOAT_QUALITY 10
typedef float float_vector[VECTOR_SIZE];
#ifndef CANNOT_RANDOM
static
float
getrandom_float ()
{
float frnd = 0;
for (int i = 0; i < RANDOM_FLOAT_QUALITY; ++i)
{
unsigned short rnd[4];
for (;;)
{
int rnd_len = getrandom (rnd, sizeof (rnd), 0);
if (rnd_len != sizeof (rnd))
{
if (rnd_len == -1)
{
fprintf(stderr, "failure getrandom()\n");
abort();
}
fprintf(stderr, "retrying getrandom()\n");
continue;
}
break;
}
frnd += (float) rnd[0] / rnd[1];
frnd -= (float) rnd[2] / rnd[3];
}
return frnd;
}
static int
make_cmd (const char *out_path, const char *count_str)
{
int count = atoi (count_str);
FILE *fout = fopen (out_path, "w");
if (!fout)
{
fprintf (stderr, "%s: failure opening file\n", out_path);
return 1;
}
for (int i = 0; i < count; ++i)
{
for (int j = 0; j < VECTOR_SIZE; ++j)
{
float item = getrandom_float ();
if (j) fputc (' ', fout);
fprintf (fout, "%f", item);
}
fputc ('\n', fout);
}
fclose (fout);
return 0;
}
#endif
static inline float
calculate_vec_len (float_vector vector)
{
float len = 0;
for (int j = 0; j < VECTOR_SIZE; ++j)
{
len += vector[j] * vector[j];
}
return len;
}
static int
sort_cmd (const char *in_path, const char *out_path, const char *count_str,
int noop)
{
int rv = 0;
int count = atoi (count_str);
float_vector *vectors = calloc (count, sizeof (float_vector));
FILE *fin = fopen (in_path, "r");
FILE *fout = fopen (out_path, "w");
if (!vectors)
{
fprintf (stderr, "%s: failure calloc()\n", in_path);
rv = 1;
goto out;
}
if (!fin)
{
fprintf (stderr, "%s: failure opening file\n", in_path);
rv = 1;
goto out;
}
if (!fout)
{
fprintf (stderr, "%s: failure opening file\n", out_path);
rv = 1;
goto out;
}
float_vector vector;
int real_count = 0;
for (int i = 0; i < count; ++i)
{
memset (vector, 0, sizeof (vector));
for (int j = 0; j < VECTOR_SIZE; ++j)
{
int scan_res = fscanf (fin, "%f", vector + j);
if (scan_res == EOF) goto read_loop_out;
}
++real_count;
memcpy (vectors[i], vector, sizeof (vector));
}
read_loop_out:
if (!noop)
{
for (int i = 0; i < real_count - 1; ++i)
{
for (int k = i + 1; k < real_count; ++k)
{
float vec_i_len = calculate_vec_len (vectors[i]);
float vec_k_len = calculate_vec_len (vectors[k]);
if (vec_i_len > vec_k_len)
{
memcpy (vector, vectors[k], sizeof (vectors[k]));
memcpy (vectors[k], vectors[i], sizeof (vectors[i]));
memcpy (vectors[i], vector, sizeof (vector));
}
}
}
}
for (int i = 0; i < real_count; ++i)
{
//float vec_len = calculate_vec_len (vectors[i]);
//fprintf (fout, "%f: ", vec_len);
for (int j = 0; j < VECTOR_SIZE; ++j)
{
if (j) fputc (' ', fout);
fprintf (fout, "%f", vectors[i][j]);
}
fputc ('\n', fout);
}
out:
if (fout) fclose (fout);
if (fin) fclose (fin);
free (vectors);
return rv;
}
int
main (int argc, char *argv[])
{
#ifndef CANNOT_RANDOM
if (argc == 4 && !strcmp ("make", argv[1]))
{
return make_cmd (argv[2], argv[3]);
}
#endif
if (argc == 5 && !strcmp ("sort", argv[1]))
{
return sort_cmd (argv[2], argv[3], argv[4], 0);
}
if (argc == 5 && !strcmp ("sort-noop", argv[1]))
{
return sort_cmd (argv[2], argv[3], argv[4], 1);
}
fprintf (stderr, "invalid args\n");
return 1;
}
// vi:ts=4:sw=4:et
запуск на моём дешёвеньком безвентиляторном ноутбуке:
$ gcc -Wall -Wextra -O3 -funsafe-math-optimizations -o bubble-lab bubble-lab.c
$ time ./bubble-lab sort xxx.txt zzz.txt 100000
real 1m28.023s
user 1m27.837s
sys 0m0.040s
$ time ./bubble-lab sort xxx.txt zzz.txt 100000
real 1m27.909s
user 1m27.733s
sys 0m0.028s
запуск на Эльбрусе:
$ gcc -Wall -Wextra -O3 -funsafe-math-optimizations -o bubble-lab bubble-lab.c
lcc: "bubble-lab.c", строка 11: фатальная ошибка: не
могу открыть исходник файл "sys/random.h"
#include <sys/random.h>
^
1 катастрофическая ошибка обнаружено при компиляции "bubble-lab.c".
Compilation terminated.
$ gcc -Wall -Wextra -O3 -funsafe-math-optimizations -DCANNOT_RANDOM -o bubble-lab bubble-lab.c
$ time ./bubble-lab sort xxx.txt zzz.txt 100000
real 10m37.852s
user 10m37.760s
sys 0m0.070s
$ time ./bubble-lab sort xxx.txt zzz.txt 100000
real 10m37.852s
user 10m37.740s
sys 0m0.080s
запуск на raspberry-pi (aarch64):
$ gcc -Wall -Wextra -O3 -funsafe-math-optimizations -o bubble-lab bubble-lab.c
$ time ./bubble-lab sort xxx.txt zzz.txt 100000
real 16m6.437s
user 16m2.548s
sys 0m0.200s
как видим raspberry-pi (aarch64) действительно сортировала дольше. 16 минут — против 10-and-half минут.
ну чтож — снимаю шляпу — чуть менее чем в полтора раза обогнали малину :-) ...
# P.S.: время для работы с файлами (то есть «sort-noop») составляет незначительную часть (на этих трёх платформах соответственно: 1.17 секунд , 5 секунд , 10 секунд).
как видим raspberry-pi (aarch64) действительно сортировала дольше. 16 минут — против 10-and-half минут.
ну чтож — снимаю шляпу — чуть менее чем в полтора раза обогнали малину :-) ...
ну 32-битная raspberry-pi победить Эльбрус смогла :-)
$ time ./bubble-lab sort xxx.txt zzz.txt 100000
real 10m33.923s
user 10m29.229s
sys 0m4.167s
правда не совсем чистый эксмеримент, так как Малина была ещё и под некоторой побочной (паралельной) нагрузкой.. но это не так важно.. я в целом 32-битные платы не считаю серъёзными — так что не будем особо тут засчитывать это :-D
Импортозамещение делается не потому что одно православнее другого а по тому где есть реальная необходимость. Необходимости заменять один опенсорц на другой такой же опенсорц я не вижу. Если заказчик попросит - другой разговор.
не потому что одно православнее другого а по тому где есть реальная необходимость
ну а на практике выглядет так как будто-бы всё делается именно во имя православия. :-)
процессор сделали а софт на нём запускать нельзя (кроме как тот который скомпилирован через проприетарный иностранный компилятор lcc, а затем слинкованный хрен пойми с проприетарным-чем).
как это может работать в качестве импортозамещения?
знаечшь что такое «замещение»? это когда есть АНАЛОГ!
а аналога выходит что нет. так как x86 (x86-64) способен работать с опенсурсным софтом, а Эльбрусы оказалось что не могут выполнить такое требование (по крайней мере в native-режиме.. возможно могут в режиме бинарной эмуляции Intel).
это обычное базовое требование к компьютерам (возможность запускать на нём опенсурс). и то что кто-то-там-где-то-там игнорирует это требование, закупая у вас Эльбрус-компьютеры (якобы во имя импортозамещения) — просто находится в коррупционном сговоре с кем-то (а иначе — какова вероятность что им именно отечественное оборудование якобы понадобилось, если даже софт у них наполовину иностранный? вероятность нуль, если не учитывать понятие «взятка»).
или для тебя фраза «коррупционный сговор» это и есть синоним фразе «реальная необходимость» (в контексте импортозамещениея)?
ну а на практике выглядет так как будто-бы всё делается именно во имя православия. :-)
Эээ, на какой практике, по подробней можно? )
процессор сделали а софт на нём запускать нельзя (кроме как тот который скомпилирован через проприетарный иностранный компилятор lcc, а затем слинкованный хрен пойми с проприетарным-чем).
а аналога выходит что нет. так как x86 (x86-64) способен работать с опенсурсным софтом, а Эльбрусы оказалось что не могут выполнить такое требование (по крайней мере в native-режиме.. возможно могут в режиме бинарной эмуляции Intel).
Почему я спокойно комменты на ЛОРе пишу с огнелиса, работающего под Эльбрусом? Я конечно понимаю что для школьника очень важна идеологическая чистота коноплятора, но обычно людям нужно чтобы софт просто работал. Кстати, линкер - ld :)
это обычное базовое требование к компьютерам (возможность запускать на нём опенсурс). и то что кто-то-там-где-то-там игнорирует это требование, закупая у вас Эльбрус-компьютеры (якобы во имя импортозамещения) — просто находится в коррупционном сговоре с кем-то (а иначе — какова вероятность что им именно отечественное оборудование якобы понадобилось, если даже софт у них наполовину иностранный? вероятность нуль, если не учитывать понятие «взятка»).
Вообще мысль не распарсил. У ребят есть конкретные проблемы, которые решаются переходом на независимого поставщика. Борцунство со страшной коррупцией - это, конечно, здорово, но как это сюда прикрутить вообще непонятно.
Я конечно понимаю что для школьника очень важна идеологическая чистота коноплятора,
только если ты говоришь про импортозамещение..
а если ты просто скажешь «мы тут деньги зарабатываем, а не импортозамещением-всяким занимаемся» — то тогда вопросов про чистоту убираю :-) — каждый зарабатывает как может..
Если требуется независимый поставщик, то понятно какие. Не хочется случайно попасть под экспортные ограничения одной там страны.
Но вообще в некоторых случаях есть задача пройти в сегмент гос. сектора, где свои требования по допустимой начинке информационных систем. Полагаю, сейчас это основная причина.
а если ты просто скажешь «мы тут деньги зарабатываем, а не импортозамещением-всяким занимаемся» — то тогда вопросов про чистоту убираю :-) — каждый зарабатывает как может..
Прикинь, всегда так было. Эльбрусы разрабатывались за долго до объявленного тренда на импортозамещение, но смогли идеально в него вписаться по объективным причинам.
в том числе GCC — это тоже софт
gcc иногда (крайне редко) действительно бывает нужен, но тут уже нужно как-то выкручиваться. По крайней мере отсутствие gcc не мешает иметь полноценный работающий дистрибутив.
Видимо, ты путаешь с Double commander-ом. far2l пишется на c++, есть консольный режим.
Не путаю, но ошибаться могу. То, что FAR, сам по себе, консольный, это я в курсе, но он же вроде пол-десктопа за собой тянет? И про c++ - его что, весь переписывают что ли? Изначальный же на Паскале.
И с чего ты это взял?
Ну потому, что я посматриваю на fpc/lasarus понемногу. И сам на борландовском, в DOS-овские времена, пописывал бывало.
Потому, что этот господин в лучшем случае дуалбутчик. Вечно они всякую дрянь из венды втащить на онтопик пытаются. А уж как обосновывают это - так просто поржать и забыть.
Так FAR будет портирован на «Эльбрус» или сие признано нецелесообразным?
*убирая руку со лба* Понятия не имею. Я не отвечаю за портирование пакетов, происходит это по другому принципу. Но если Вам очень интересно, Вы можете устроиться в отдел дистрибутива и убедить начальника в острой необходимости наличия данного пакета в системе.