LINUX.ORG.RU
ФорумTalks

Раздобыл кросскомпилятор под эльбрус

 , ,


1

4

Захотелось что нибудь несложное покомпилировать.

Например хэловорд на си: https://pastebin.com/KFNHABjm (генератор цветового uid из строк)

Компилировал с такими опциями:
g++ -S -O2 -march=x86-64 -std=c++11 test.cpp

l++ -S -O3 -mcpu=elbrus-v3 -std=c++11 test.cpp

$ g++ --version
# g++ (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609

$ l++ --version
# lcc:1.20.17:Mar-3-2016:e2k-generic-linux.cross:i386-linux
# gcc (GCC) 4.4.0 compatible
Согласно докам, -O3 на lcc это не агрессивные оптимизации примерно соответствующие О2, elbrus-v3 это архитектура от Эльбрус-4C и выше, 64бит задействовано по умолчанию.

Для интела получился слишком большой выхлоп 900kb 32k строк (выкладывать безсмысленно)

Для второго 250kb 9k строк (почему такая разница? инклюды не входят?)
собственно выхлоп: https://pastebin.com/WC2CuZ5k есть довольно любопытные участки и операции

Одна условная запись и непонятная магия с регистрами/предикатами и все в одной инструкции, после которой вставлена пустая инструкция (пропуск такта?)
	{
	  ct	%ctpr3 ? ~%pred0
	  std,2	%dg13, %dr12, %dr11 ? %pred0
	  pass	%pred0, @p0
	  pass	%pred1, @p1
	  landp	@p0, ~@p1, @p4
	  pass	@p4, %pred2
	  landp	@p0, @p1, @p5
	  pass	@p5, %pred1
	}
	{
	}


пут-тег, слияние, istofd (int-single to float-double ?), sxt/scls (???)
$_ZNSs12_S_constructIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEPcT_S6_RKSaIcESt20forward_iterator_tag:
	{
	  setwd	wsz = 0x13, nfx = 0x1
	  setbn	rsz = 0x3, rbs = 0xf, rcur = 0x0
	  disp	%ctpr1, $.L4337; ipd 2
	  getsp,0	_f32s,_lts1 0xfffff960, %dr5
	  addd,1	0x0, [ _f64,_lts2 $_GLOBAL_OFFSET_TABLE_@ABS ], %dr3
	  puttagd,2	%dr0, 0x0, %dr17
	  adds,3,sm	0x0, 0x0, %r21
	  addd,4,sm	0x0, 0x0, %dr20
	  puttagd,5	%dr1, 0x0, %dr16
	}
...
	{
	  merges,0	%g16, %g21, %g16, %pred0
	}
...
	{
	  setwd	wsz = 0x20, nfx = 0x1
	  setbn	rsz = 0x3, rbs = 0x15, rcur = 0x0
	  disp	%ctpr1, $.L2085; ipd 2
	  addd,0	0x0, _f64,_lts1 0x20ff2000000000, %dg16
	  sxt,1	0x6, %r5, %dg17
	  scls,2	0x9, 0x9, %r1
	}
...
	{
	  call	%ctpr3, wbs = 0x1c ? %pred0
	  istofd,0,sm	%r1, %dr1
	}
	


Ну и какой то тяжелый цикл с долгими одиночными инструкциями (fdtoidtr - 6 тактов, fmuld - 4 такта, итд. Если я правильно понял как это читать)
$.L1779:
	{
	  loop_mode
	  nop 3
	  faddd,1,sm	%dr1, %db[2], %db[0]
	}
	{
	  loop_mode
	  nop 3
	  fmuld,1,sm	%dr7, %db[0], %db[0]
	}
	{
	  loop_mode
	  nop 5
	  fdtoidtr,1,sm	%db[0], %db[1]
	}
	{
	  loop_mode
	  sxt,2,sm	0x6, %b[1], %db[1]
	}
	{
	  loop_mode
	  nop 3
	  idtofd,1,sm	%db[1], %db[1]
	}
	{
	  loop_mode
	  nop 3
	  fsubd,1,sm	%db[0], %db[1], %db[0]
	}
	{
	  loop_mode
	  nop 3
	  fmuld,1,sm	%db[0], %db[1], %db[0]
	}
	{
	  loop_mode
	  nop 5
	  fdtoidtr,1,sm	%db[0], %db[1]
	}
	{
	  loop_mode
	  sxt,2,sm	0x6, %b[1], %db[1]
	}
	{
	  loop_mode
	  nop 3
	  idtofd,1,sm	%db[1], %db[1]
	}
	{
	  loop_mode
	  nop 3
	  fsubd,1,sm	%db[0], %db[1], %db[0]
	}
	{
	  loop_mode
	  nop 2
	  fmuld,1,sm	%db[0], %dr5, %db[0]
	  ldb,2,sm	%dr6, %dr2, %b[3]
	  addd,5,sm	%dr2, 0x1, %dr2
	}
	{
	  loop_mode
	  getfs,2,sm	%b[3], %r4, %b[2]
	}
	{
	  loop_mode
	  nop 2
	  istofd,0,sm	%b[2], %db[0]
	  faddd,1,sm	%db[1], %db[0], %dr1 ? %pcnt0
	}
	{
	  loop_mode
	  alc	alcf=1, alct=1
	  abn	abnf=1, abnt=1
	  ct	%ctpr1 ? %NOT_LOOP_END
	}
Компилятор взял осюда вполне легально (привет тарищу-майору).
Устанавливаентся вытряхиванием архива в /opt/mcst/ и симлинканьем lcc и l++ куда нибудь в /usr/local/bin

★★

Кросскомпилятор это хорошо, осталось раздобыть эмулятор этого процессора

Deleted ()

Неправильно ты, дядя Фёдор, под Эльбрус компилируешь :) Ты -O3 используешь, а надо -O3 -ffast -fwhole хотя бы :)

Кстати, компилятор древнющий, дистрибутив уже давно 23-ей веткой собирается, в этом году срезается 24-я.

А откуда взял, если не секрет?

alexanius ()
Ответ на: комментарий от alexanius

А откуда взял, если не секрет?

С какой целью интересуешься?

ashot ★★★ ()
Ответ на: комментарий от ashot

А откуда взял, если не секрет?

С какой целью интересуешься?

Любопытно же. Судя по древней версии предположу что какой-нибудь древний дистр ЭльбрусОС под x86

alexanius ()
Ответ на: комментарий от Deleted

Думаю эмулятора только процессора мало.

Нужно сразу эмулятор всего компа целиком. Вроде логично?

Serg_HIS ()

Раздобудь симулятор, на том же ftp был.

gadfly ★★ ()
Ответ на: комментарий от alexanius

надо -O3 -ffast -fwhole хотя бы

Сделал, файл заметно увеличился (до 61k строк) но пропали циклы и команды стали последовательные по 1 инструкции в ШК на первом устройстве https://pastebin.com/5UZt8gme

Может в старом это еще не допилено было?
Старый/не старый другого нет, зато там уже mcpu 8СВ есть, в шапку добавил ссылку откуда взял.

gadfly

Раздобудь симулятор, на том же ftp был.

А где он там? Я не нашел.

uin ★★ ()
Ответ на: комментарий от nvidia

А чё не -O0?

Так -O0 же во время разработки что бы быстро компилять и проверять, а в конце уже с хорошими оптимизациями.

uin ★★ ()

Компилятор взял осюда вполне легально

Если даже беспрепятственно взял то, что «плохо лежит», это не значит, что легально. ;)

greenman ★★★★★ ()
Последнее исправление: greenman (всего исправлений: 2)
Ответ на: комментарий от uin

Сделал, файл заметно увеличился (до 61k строк) но пропали циклы и команды стали последовательные по 1 инструкции в ШК на первом устройстве https://pastebin.com/5UZt8gme

Лол, пол часа сидел и думал что за фигня получается. Если смотреть внутренние дампы и дизассемблер, то всё норм, если -S - то лажа. Это особенность работы сочетания -S -fwhole (последний -местный аналог -flto), в таком виде он сбросил неоптимизированный ассемблер и забил на нормальную компиляцию :) Можешь подробно смотреть что происходит по опции -v.

Посмотрел - в данном случае эти опции ничего нового не дают, поэтому можно и простой -O3 изучать. В более новой версии, кстати, удаётся ещё и fmull_add построить :)

Ещё небольшое пояснение - циклы никуда не делись. Надпись loop_mode, которую ты видишь означает что отработала «накрутка» - softpipe с аппаратным ускорением. В частности, alc - инструкция инкремента аппаратного счётчика цикла, а abn - инструкция прокрутки вращающихся регистров.

alexanius ()
Ответ на: комментарий от tailgunner

разгильдяйство
ну или просто решили не заморачиваться

Bad_ptr ★★★★ ()

Всех смотревших через семь дней.

d_a ★★★★★ ()
Последнее исправление: d_a (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Нет, это просто чрут е2k шный.

greenman

Если даже беспрепятственно взял то, что «плохо лежит», это не значит, что легально.

Ну почему, вот тут же детально описано как получить, как установить со ссылками и прочим, так что что это вполне официально а не «взял что плохо лежит».

alexanius

В более новой версии, кстати, удаётся ещё и fmull_add построить

А что бинари на оффсайте не выложите? А то там есть раздел «Программное обеспечение» но самого программного обеспечения там нет, там текст Рабиновича о том какое оно и что умеет.

d_a

Всех скачавших через семь дней.

Желаю чтобы все.

uin ★★ ()
Ответ на: комментарий от uin

Ну почему, вот тут же детально описано как получить, как установить со ссылками и прочим

С этого бы и начинал.

А то даже люди, близкие к эльбрусам, вопрошают.

greenman ★★★★★ ()
Последнее исправление: greenman (всего исправлений: 1)
Ответ на: комментарий от uin

А что бинари на оффсайте не выложите? А то там есть раздел «Программное обеспечение» но самого программного обеспечения там нет, там текст Рабиновича о том какое оно и что умеет.

То что ты скачал - в некотором смысле самоуправство одного отдела. Когда я со своим начальством говорил на эту тему - было сказано что пока не докажу полезность выкладывания бинарей - говорить об этом смысла нет.

alexanius ()
Ответ на: комментарий от alexanius

докажу полезность выкладывания бинарей

Скажи им, что юзерам проще собранный юзать, чем компилять час, да зависимости два часа устанавливать.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Скажи им, что юзерам проще собранный юзать, чем компилять час, да зависимости два часа устанавливать.

Ээээ чта? У всех юзеров все бинари есть, а сам дистрибутв - бинарный. Я не очень понял про что ты.

alexanius ()
Ответ на: комментарий от alexanius

Ты прямо скажи — исходники компилятора есть?

greenman ★★★★★ ()
Ответ на: комментарий от greenman

Ты прямо скажи — исходники компилятора есть?

У пользователей? Нет, конечно. Зачем им?

alexanius ()
Ответ на: комментарий от alexanius

То что ты скачал - в некотором смысле самоуправство одного отдела.

А было вроде в той длинной лекции с иннопролиса, самый последний ваш докладчик (который ядро линукса пилит под e2k) говорил там что то про либроботикс, этеркад, обещал на что то ссылки предоставить (хотя там вроде речь была про удаленный доступ).

Что это может полезного дать, ну например потенциальный клиент сможет непосредственно ознакомится и ему будет проще принять решение о переносе своего проекта на эльбрус, просто скачав систему кроссборки с симулятором и попробовав собрать и запустить свое поделие. Но я понимаю что сейчас это все просто никому не интересно.

greenman
Так а тебе зачем исходники компилятора то?

uin ★★ ()
Последнее исправление: uin (всего исправлений: 1)
Ответ на: комментарий от uin

Так а тебе зачем исходники компилятора то?

Думаю, ради вселенского бобра. Информация, которую нет оснований скрывать, должна быть доступна. А если такие основания есть, то проще их озвучить, чем каждый раз в еврейском-анекдотическом стиле: «А вам зачем?»

ashot ★★★ ()
Ответ на: комментарий от uin

эти мультиответы

Не делай так больше, пожалуйста.

d_a ★★★★★ ()
Ответ на: комментарий от ashot

lcc это проприетарный компилятор на манер Intel C++ Compiler и Microsoft Visual C++ Сompiler. Первое и самое очевидное основание в том что в нем есть сторонний проприетарный код (фронтенд поддерживающий стандарты С/С++), второе - они не хотят делиться с кем либо своими наработками по части всяких автораспараллеливаний/автовекторизаций, точно так же как и интел.

uin ★★ ()
Ответ на: комментарий от greenman

Ему не нужны исходники. Он просто любит порицать всё, что не имеет открытых исходников.

i-rinat ★★★★★ ()
Ответ на: комментарий от uin

Подчистили, похоже, давно там не был. Внутренний продукт же.

gadfly ★★ ()
Ответ на: комментарий от alexanius

Их нет и не будет. В обозримом будущем уж точно.

Ваще-то, если пользователи независимые от МЦСТ это прямое нарушение GPL будет. Вы же кажется gcc за основу брали, в общем исходно это было GPL. Винду для пользователей тоже будете распространять (вроде есть же какая-то трансляция x86-го кода) или MS EULA это вам не GPL и побоитесь нарушить?

praseodim ★★★★ ()
Ответ на: комментарий от praseodim

Вы же кажется gcc за основу брали

Так ведь то был какой-то проприетарный фронтенд компилятора. Он поддерживает интерфейс GCC.

i-rinat ★★★★★ ()
Ответ на: комментарий от praseodim

Ваще-то, если пользователи независимые от МЦСТ это прямое нарушение GPL будет. Вы же кажется gcc за основу брали, в общем исходно это было GPL. Винду для пользователей тоже будете распространять (вроде есть же какая-то трансляция x86-го кода) или MS EULA это вам не GPL и побоитесь нарушить?

Не будет нарушения gpl по причине отсутствия в исходниках gpl компонент. В каждом треде про это приходится говорить. Вообще не понимаю почему все считают что в мире существует только gcc и llvm.

alexanius ()
Ответ на: комментарий от alexanius

Тады извиняюсь. Обязанности выкладывать что-то не возникает, да. Но тут другое получается, а в каком качестве Эльбрус и системы на нем вообще видятся руководству? Если что-то нишевое для военных и прочих мест, где нужна независимость и гарантия неналичия «закладок», то это одно, а если все-таки, сервера идут в массы, то тут все странно становится, я даже имею ввиду не конкретно компилятор (к слову Intel свой компилятор отнюдь не опенсорсит), а общую обстановку, когда что-то то ли может быть выложено, то ли не может, и даже в этом треде непонятно что по ссылке.

praseodim ★★★★ ()
Последнее исправление: praseodim (всего исправлений: 1)
Ответ на: комментарий от uin

Что это может полезного дать, ну например потенциальный клиент сможет непосредственно ознакомится и ему будет проще принять решение о переносе своего проекта на эльбрус, просто скачав систему кроссборки с симулятором и попробовав собрать и запустить свое поделие. Но я понимаю что сейчас это все просто никому не интересно.

Потенциальным клиентам всё и так предоставляется вплоть до личных консультаций с разработчикам соответствующих отделов. Тут просто смотря кого потенциальным клиентом считают.

alexanius ()
Ответ на: комментарий от praseodim

Но тут другое получается, а в каком качестве Эльбрус и системы на нем вообще видятся руководству? Если что-то нишевое для военных и прочих мест, где нужна независимость и гарантия неналичия «закладок», то это одно, а если все-таки, сервера идут в массы, то тут все странно становится, я даже имею ввиду не конкретно компилятор (к слову Intel свой компилятор отнюдь не опенсорсит), а общую обстановку, когда что-то то ли может быть выложено, то ли не может, и даже в этом треде непонятно что по ссылке.

На данный момент Эльбрус смотрит в сторону государственного и корпоративного сектора, в которых существуют особые требования к безопасности и импортозамещению. Есть определенное историческое наследие, связанное с секретностью, но я очень надеюсь что от него удастся избавиться.

alexanius ()
Ответ на: комментарий от alexanius

Ну хорошо, но ведь публикации и всякие работы зачем то же на сайт выкладывают регулярно, ты по конференециям всяким катаешься рассказываешь про эльбрусо-специфичные оптимизации и какой в этом всем смысл если тем кто это все читает и слушает его ни потрогать ни понюхать? То есть должно же быть какое-то логическое завершение «заинтересовались и хотите поддерживать нашу платформу? Перейдите по этой ссылке и получите симулятор и систему кроссборки» и типа того.

uin ★★ ()
Ответ на: комментарий от uin

Лично я выступаю в первую очередь для публикаций (невоспроизводимость результатов - вообще большая проблема в науке). Маркетологи - для клиентов, но наша целевая аудитория обычно заранее знает чего хочет и приезжает уже предметно щупать возможности, им всё что нужно предоставляется. Т.е. для них описанной тобой проблемы нет.

alexanius ()
Ответ на: комментарий от alexanius

невоспроизводимость результатов - вообще большая проблема в науке

Ты только добавляешь невоспроизводимых (в науке) результатов.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Ты только добавляешь невоспроизводимых (в науке) результатов.

Ну, звиняй. Могу дать слово джентльмена что результаты такие как описываю :)

alexanius ()
Ответ на: комментарий от uin

получите симулятор

В принципе, кросс-компилятора и binutils (на том сайте они тоже есть) достаточно для того, чтобы восстановить систему кодирования команд, написать декодер команд, и сделать user-space симулятор. Всё зависит только от того, сколько сил и времени ты готов на это потратить.

i-rinat ★★★★★ ()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от alexanius

Есть определенное историческое наследие, связанное с секретностью, но я очень надеюсь что от него удастся избавиться.

Много у нас в стране выводилось из режима секретности? Есть вообще прецеденты такие?

i-rinat ★★★★★ ()
Ответ на: комментарий от alexanius

Кстати, компилятор древнющий, дистрибутив уже давно 23-ей веткой собирается, в этом году срезается 24-я.

Какой стандарт C++ планируется поддерживать в 24-й ветке? Интерес шкурный, так как приходится работать с Эльбрусами

widgetii ()
Ответ на: комментарий от widgetii

Какой стандарт C++ планируется поддерживать в 24-й ветке? Интерес шкурный, так как приходится работать с Эльбрусами

Вплоть до элементов 20-ого. Можно здесь отслеживать.

alexanius ()
Ответ на: комментарий от alexanius

Вопрос, думаю, не для этого форума, но Ваших контактов не нашел.

Можно ли поучаствовать в бета-тесте последних версий компилятора? Есть куча кода, для которого хотелось бы иметь гарантию его сборки lcc

widgetii ()
Ответ на: комментарий от alexanius

Вот видишь, а говоришь клиентам все что надо даете.
Клиенту всегда чего то нехватает и ему приходится где-то на анонимном форуме спрашивать.
Проще ему вывалить куда то все что есть (хотя бы под девелоперский акаунт) он сам все что надо найдет.
Хотя вы и сами к этому придете если у вас клиентская база разрастется.

uin ★★ ()

dtoidtr - 6 тактов, fmuld - 4 такта, итд. Если я правильно понял как это читать

А как ты понял, сколько там тактов?

madcore ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)