LINUX.ORG.RU
ФорумTalks

Ассемблерный поток сознания.

 , ,


0

0

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

Какими могут быть профиты, кроме скорости?

Дискасс?

Deleted

Последнее исправление: rht (всего исправлений: 1)

Ответ на: комментарий от Harald

Собсно на AVR вроде как GCC до сих пор сливает ручному ассемблеру.

по каким ТТХ?

вообще libc для авра - говнище. таак что возможно не в гцц проблема.

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

А что его оспаривать, если это чушь ) Только в том случае, если конкретная реализация си оптимизирована под некую конкретную платформу по самое не могу, только в этом случае сишный код по скорости сравняется со «сферическим ассемблерным кодом» )

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

безжалостно сражается с GCC -O3 и в конце-концов создаёт священный свиток ассемблерного кода, который работает на 0.01% быстрее

А что, кроме гнусей, и нет ничего больше?

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

У гнусей пока получается лучше всего выдавать оптимизированные ассемблерные выхлопы. Правда, на пятки уже наступает Clang.

Ну а ICC и cl.exe в расчёт обычно не берутся.

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

Если вы собрались спорить с очевидными вещами, то для начала вашего непростого пути вам надо подредактировать википедию https://ru.wikipedia.org/wiki/Язык_ассемблера

Это как с минералкой. Всем сказали, что она поддельная и народ перестал покупать, а мне вот всегда попадается нормальная. :D

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

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

Ну, любовь, дело такое, все мы на неё падки, и даже я - старый, лысый и бесперспективный.

И пишет. Вот, дескать, «девахам нынче нужно всё и сразу». Мол, не устроил мой дорогой и единственный. А ведь и вправду, кто кому нынче нужен, без «золотого запасу»? Басни о рае в шалаше остались в далёком прошлом. Нынче за всё плати, за каждый чих. А вот было что давать в залог, глядишь и сложилось бы. Только кому оно такое нужно?

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

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

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

И пишет. Вот, дескать, «девахам нынче нужно всё и сразу»

Тут диакон РПЦ Кураев интересно высказался, https://www.youtube.com/watch?v=WMtrREHkfak (только его выпад про советские ПТУ надо пропустить, он бывает в некоторых вопросах лажает) Это запись 2009 года.

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

Спасибо, просмотрел с удовольствием.

Лажают все, но Кураев, может, и не ПТУ имел в виду.

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

Он хочет напеть, что в любом проекте сложнее «hello world» компилятор тебя уделяет и по скорости написания, как и по скорости исполнения.

beastie ★★★★★
()

профиты, кроме скорости?

хороший си компилятор делает код быстрее кода на ассемблере.

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

Ты — не понимаешь сути.

Твой ассемблерный листинг — техники оптимизаций, которые знаешь и которыми можешь оперировать лично ТЫ.

Оптимизированный ассемблерный листинг современного компилятора — техники оптимизаций, которые были выработаны и протестированы огромным количеством специалистов, разрабатывающих не только компилятор, но и архитектуру, сами процессоры.

Чуешь разницу?

Просто мифологизация возможностей компилятора среди программистов

Сегодня это далеко не мифологизация. Assembler полезно знать даже прикладнику, чтобы посмотреть как хитро будет сооптимизирована его функция.

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

Вы эту субъективную отсебятину в разговор не вносите. «А если программер на ассемблере этого не знает, а если он устал, а если его кто-то отвлек...» Даже средний кодер, хорошо знающий платформу, напишет софт, работающий быстрее, чем компилятор с другого . Тем более, что вы сами начали с условия «сферический программер в вакууме» ) Сферический ассемблерщик в вакууме заткнет за пояс любой язык по определению, это теоретический максимум )

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

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

Так принесите результаты тестов, которые показывали бы как Assembler'ные листинги прикладных программ, написанные рученьками, затыкали по скорости gcc -S -O3. На прикладном коде, а не байтоперекладываниях. Ведь ТС хочет прошивку телефона переписать. Есть такие тесты?

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

А что Fasm? Сильно сомневаюсь, что его простенькие оптимизации основанные на многопроходности хоть как-то могут конкурировать со сложными трюками в современных компиляторах.

Да и где сейчас Fasm используется? Хоть один популярный и используемый всеми проект пользуется наработками Fasm'а сегодня?

Вот у Yasm'а более ясные перспективы: его используют такие проекты, как ffmpeg, blink (chromium), gecko и некоторый другой софт.

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

Тс хочет писать прошивку телефона. Телефон - это не 86 платформа. Поэтому все ваши представления об эффективности работы компилятора идут лесом до выяснения качества компилятора для той, телефонной платформы.

И то вопрос стоит лишь в том, будет ли код более-менее сравним с ассемблерным или же гораздо хуже ассемблерного )

vaddd ★☆
()

ая читал что самый быстрый код генерирует Intel Fortran Compiler

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

Это проект энтузиастов. Из «ready-for-business» есть что-нибудь?

EXL ★★★★★
()

Как тут уже говорили, Андроид это не Жаба.

Даже не понимаю как такое могло в голову прийти. Это примерно как сказать что виндовс - это C#.

А сферических программеров на Ассемблере фактически не существует.

Я например мог бы в каких-то избранных алгоритмах поспорить с компиляторами для i486.

Для современных процессоров, мало кто вообще досконально знает весь набор команд ассемблера (а может и вообще никто).

Компиляторы - это труд сотен/тысяч специалистов.

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

Телефон - это не 86 платформа. Поэтому все ваши представления об эффективности работы компилятора идут лесом до выяснения качества компилятора для той, телефонной платформы.

Именно вертя в руках телефон на Linux и ARM я восемь лет назад задавался точно такими же вопросами на одном из местных форумов. Не поленился, нашёл эту беседу:

http://esxi.z-lab.me:666/~exl_lab/screens/arm_assembler.png

Уже тогда преимущества gcc -O3 в сравнении с Assembler'ными листингами написанными вручную на более-менее сложных проектах были заметны невооружённым глазом. Да, на древнем GCC версии 3.4.3 (2004 год!). Да, на телефонной платформе, на архитектуре ARM11 (ARM1136JF-S).

Сейчас, спустя много-много лет, ситуация с компиляторами гораздо улучшилась. Появились более изощрённые трюки различных оптимизаций, возросло качество работы с FPU/VFP, появились всякие NEON, поддержка которых также доступна в современных компиляторах.

Но вы продолжайте-продолжайте верить в святые мощи свидетелей Assembler'а и в то, что если весь софт переписать листингом оного, то всё внезапно будет работать гораздо быстрее, а браузеры перестанут тормозить и жрать RAM. Это мило и забавно.

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

будет ли код более-менее сравним с ассемблерным или же гораздо хуже ассемблерного )

А вы, собственно, вообще в курсе, что тот же gcc (сс1, сс1plus) порождает не скомпилированный объектный код, а оптимизированный ассемблерный листинг, который потом скармливается утилите-ассемблеру as (gas)?

Сравнение может идти только между двумя ассемблерными листингами:

1. Листинг кода на Assembler'е, который написал лично ты, используя только те техники оптимизации, которые ты знаешь.
2. Листинг кода на Assembler'е, который выдал тебе оптимизирующий компилятор, выполнив трансляцию C => Assembler.

Значит ты уверен в том, что твои «техники оптимизации» превзойдут труды сотен специалистов различных специальностей, начиная от инженеров, которые разрабатывают архитектуры CPU и заканчивая докторами CS/Algorithms?

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

Уже тогда преимущества gcc -O3 в сравнении с Assembler'ными листингами написанными вручную на более-менее сложных проектах

были заметны невооружённым глазом.

Вы не замечаете, что говорите вообще о другом? ) Что на языках писать проще и вероятность ошибок меньше - это и так очевидно. Точно так же как и очевидно то, что качественный ассемблерный код есть предел быстродействия.

Это мило и забавно.

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

Но вы продолжайте-продолжайте верить в святые мощи свидетелей Assembler'а и в то, что если весь софт переписать листингом оного, то всё внезапно будет работать гораздо быстрее

О, а как у вас родилась мысль о переписывании софта листингом оного? ) Зачем? ) Тут о таком и речи не было, только о написании с нуля )

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

Значит ты уверен в том, что твои «техники оптимизации» превзойдут труды сотен специалистов различных специальностей, начиная от инженеров, которые разрабатывают архитектуры CPU и заканчивая докторами CS/Algorithms?

Вы по прежнему пытаетесь уйти от своего «сферического программера в вакууме»? )

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

О, а как у вас родилась мысль о переписывании софта листингом оного? ) Зачем? ) Тут о таком и речи не было, только о написании с нуля )

Цитирую ТС прямым текстом (и ещё следует брать во внимание его комментарий про Java, что является явной отсылкой к прикладному софту):

«А что будет, если переписать прошивку смартфона на ассемблере?»

Вы ещё и чертовски невнимательны, мой друг. Что же, продолжайте верить в святые мощи Assembler'а. Не буду разрушать вашу веру в них.

и пытаетесь сводить дело каким-то конкретным реализациям каких-то конкретных программеров.

Именно так. Здесь важна практика. Теория аморфна и размыта.

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

Цитирую ТС прямым текстом (и ещё следует брать во внимание его комментарий про Java, что является явной отсылкой к прикладному софту):«А что будет, если переписать прошивку смартфона на ассемблере?»

Ну и при чем тут листинг? ) ТС имел в виду не взять листинг, а взять алгоритм и писать софт заново, с учетом каждой мелочи. Не верите, давайте спросим у ТС. Аууу, ТС!

Что же, продолжайте верить в святые мощи Assembler'а

Святая мощь ассемблера - это как скорость света в физике. В данной Вселенной она непреодолима и непобедима. А сферический программист в вакууме - как демон Максвелла, пропускающий только идеальный код и отбраковывающий неоптимальный

Здесь важна практика. Теория аморфна и размыта.

У вас ненаучный кустарный подход.

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

что в любом проекте сложнее «hello world» компилятор тебя уделяет и по скорости написания, как и по скорости исполнения.

Кстати, на Hello World'е тоже может уделать, заменив вызов более медленной функции printf() на какой-нибудь быстрый puts():

$ cat hello.c 
#include <stdio.h>

int main(void) {
    printf("Hello, World!\n");
    return 0;
}
$ gcc -O3 -S hello.c
$ cat hello.s
        .file   "hello.c"
        .section        .rodata.str1.1,"aMS",@progbits,1
.LC0:
        .string "Hello, World!"
        .section        .text.startup,"ax",@progbits
        .p2align 4,,15
        .globl  main
        .type   main, @function
main:
.LFB11:
        .cfi_startproc
        leaq    .LC0(%rip), %rdi
        subq    $8, %rsp
        .cfi_def_cfa_offset 16
        call    puts@PLT        /* <================ */
        xorl    %eax, %eax
        addq    $8, %rsp
        .cfi_def_cfa_offset 8
        ret
        .cfi_endproc
.LFE11:
        .size   main, .-main
        .ident  "GCC: (GNU) 7.2.1 20171224"
        .section        .note.GNU-stack,"",@progbits

:D

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

Ну и при чем тут листинг?
ТС имел в виду не взять листинг, а взять алгоритм и писать софт заново, с учетом каждой мелочи. Не верите, давайте спросим у ТС. Аууу, ТС!

И что же получится в результате написания заново софта на Assembler'е с учётом каждой мелочи? Уж не листинги ли кода на Assembler'е?

А сферический программист в вакууме - как демон Максвелла, пропускающий только идеальный код и отбраковывающий неоптимальный

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

Святая мощь ассемблера - это как скорость света в физике. В данной Вселенной она непреодолима и непобедима.

А почему тогда не святая мощь чистого машинного кода? Кристальных нолей и единиц? Ведь вот взять тот же FASM. Оптимизирующий ведь он, зараза! Кто знает, оптимально ли он там всё это делает? А вот в машкодах всё будет сразу чётко и ясно. Однозначно и твёрдо. Что ты написал — то и получил. Следовательно ТСу нужно переписывать прошивку и софт в машкодах. Так будет ещё быстрее работать! Такой вывод можно сделать, прислушавшись к некоторым теориям, выдвинутым в этом топике.

То, чем вы здесь занимаетесь называется демагогией и шлангованием.

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

Извини - но тут ты уже загоняешься...

заменив вызов более медленной функции printf() на какой-нибудь быстрый puts()

нет в ассемблере printf()

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

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

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

Я просто думаю что тебе нужно угомонится.

В ассемблере есть push :) То что на чистом асме сейчас программят только сферические ассемблеристы - это факт.

А то что понятие «сферический», применяется только к несуществующему реально - ну это же просто типа шутка ведь...

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

Пусть лучше угомонятся те, кто считает Assembler этакой «святой коровой», которая волшебным образом увеличивает производительность любого программного обеспечения путём переписывания «на себя».

Ребячество какое-то, ну ей-богу. И ведь далеко не первый тред такой на ЛОРе.

А еще боремся за почетное звание IT-форума высокой культуры и быта (:

P.S. Assembler хорош там, где он к месту. А к месту он в ffmpeg, где всякие SIMD-optimized декодеры.

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

Определение по ссылке отлично подходит и в контекст этого треда :)

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

Пусть лучше угомонятся те, кто считает Assembler этакой «святой коровой»

Я не понимаю о чём с ними спорить.

Я написал десятки Энтерпрайз проектов разных планов, и мне не нужно спорить с теми, кто в 13 лет не написал своего интерпретатора на МК-61. Которые не писали на ZX-Spectrum своей многозадачной операционной системы в 15 лет. Свою игру в шашки с ГУИ как курсовую в институте и тонны всякого, что я лично сделал, а они нет.

Они тебе нужны? Те кто много говорят, а ничего не делают?

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

Fasm? Сильно сомневаюсь

Чтобы сомневаться, нужны основания. Я не могу так «с лёту» утверждать, что фасм коряв, потому что мне так хочется.

у Yasm'а более ясные перспективы

Выше ты утверждал, что ассемблер не нужен. =)

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

То есть ты хочешь напеть, что асм по скорости равняется с джавой?

Смотря как писать. На конкретном устройстве может и будет всё быстрее работать, но далее придётся поддерживать только конкретно ту модель, под которую прошивку писал, так как новые поддерживать слишком затратно по времени. В итоге в перспективе решения на жабе даже быстрее работать будут.

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

Потому что андроид на джаве же. Нет?

Нет. В основе андроида лежит форк Linux, который на C, базовая система (в том числе libc BIONIC), а дальше идёт рантайм для прикладного софта. Раньше там была виртуальная машина, а теперь компилятор из байт-кода в родной код, который собирает приложение при каждой его установке. Жабы там никогда не было.

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

Захочет совместимости и переносимости, тогда выдумает свои велосипеды.

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

На AVR GCC сливает ручному ассемблеру только тогда, когда проект простой. Когда же проект оказывается сколько-нибудь сложным, то программа на C много раз уже исполнится пока на ассемлбере её пишешь и отлаживаешь.

Quasar ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.