LINUX.ORG.RU
ФорумTalks

Эффективный компилятор под Android

 , , ,


1

3

Кажется, я понял почему современным девайсам под ведром нужно всё больше памяти и ядер.
Разбирая в дизассемблере код закрытых дров наткнулся на такие чудесные экземпляры, как:

MOV R2, #0xFF0
MOV R8, R0
MOV R9, R1
ORR R2, R2, #0xF

Вместо 1 и 4 команд надо было MOV R2, #0xFFF

MOV R6, #0
MOV R1, #0
STR R6,[SP,#0x1070]

Первая команда совем не нужна

И так весь код. У другого нативного ПО также. Около трети команд можно вообще выкинуть. Отсальная часть крайне неоптимальна.

Что это было ? Заговор производителей с разрабами ? Может, я туплю и так надо ?


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

Не знаю, что такое куча в бытовом смысле

heap. выделение памяти.

Два ореха - это множество

А это из другого сообщения

А вообще-то, разница в 4! раза

Речь о среднем. А то в частных случаях бывает, что Си медленнее, чем Java.

Да даже разница в 2 раза - это просто песец какие тормоза.

Тяжёлый случай. Мы-то этим переболели ещё в начале 1990-х гг.

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

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

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

Внезапно! Человека тоже обучать приходится, прежде, чем он сможет что-то сделать или принять правильное решение. Причём, зачастую, гораздо дольше.

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

Она ещё на Pentium появилась

О, это открытие. А как ты думаешь, зачем я упоминал этот процессор нескольникми минутами раньше ?

Кстати, было это не 25 лет назад, а 15

20. 1993. 25 лет назад был 486, который тоже не так прост.

Как я понимаю, по сегодняшним растактовкам (суперскалярная архитектура ни разу от них не избавляет) у тебя данных нет

Их ни у кого нет, и быть не может.

, одна вера?

А проверить как, ЛОЛ ?

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

Человек даже в процессе обучения способен выдавать оригинальные результаты, которые оказываются вернее чем у учителя, а иногда и никак не связанные (внешне) с тем, чему его обучали. Это один из принципов генетических алгоритмов — рандомизация, которая может дать лучший результат, чем предсказуемое последовательное усовершенствование.

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

А проверить как, ЛОЛ ?

Я нынешние дебильные мнемоники с трудом даже читаю, куда уж там писать. Не на tasm'е же под DOS тестировать :)

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

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

А может и не выдать результата никогда. Человек ненадёжен, труднообучаем, непредсказуем, а так же ленив, медлителен и прожорлив до ресурсов. Поэтому машина эффективнее. Так то.

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

Человек ненадежен, труднообучаем, непредсказуем, ленив, медлителен, прожорлив, однако результат работы людей в случаях творческой работы превосходит машинный в 100% случаев. Поэтому выбрасывать людей на свалку еще рано :)

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

Тут не в мнемониках дело, тут дело в том, что время исполнения команды без истории и последствий не имеет смысла, и брекпойнты вставлять просто так тупо, как 20 лет назад, тоже бессмыссленно, конвеер сбивается, и на выходе бред. И анализ слишком сложен.

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

heap. выделение памяти.

Для особо одарённых, не умеющих читать собеседника повторяю:

«что такое куча в бытовом смысле ?»

А то в частных случаях бывает, что Си медленнее, чем Java.

Да Си вообще — наследие Ктулху. Это во-первых. А во-вторых, не в два раза. Ну и, конечно, квалификация программеров важна, да.

Мы-то этим переболели ещё в начале 1990-х гг.

Молодец, про таких как вы анекдоты складывают: "... если же вы ничего не поняли, вам прямая дорога в программисты". Ну вам-то не жалко чужих денег и чужого времени, это очевидно, но это совсем не доказывает, что вы - хороший программист, это лишь говорит о том, что на вашем рынке ПО слабая конкуренция.

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

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

В любом случае твоё заявление, что человек _всегда_ эффективнее машины, было в корне не верным.

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

ленив, медлителен
в случаях творческой работы

В этом вся суть: программисты пишут _всегда_ в условиях дедлайнов, а время - деньги, если вы, конечно, понимаете, о чём я.

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

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

Профессор, а кому, кроме человека, несёт пользу работа машины ?

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

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

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

нафиг никому, кроме этого самого человека, не нужна и никакой практической пользы не несёт

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

В любом случае твоё заявление, что человек _всегда_ эффективнее машины, было в корне не верным.

Каюсь, я не дал определение эффективности. Говорили мне на дипломном проектировании, что для слова «оптимальный» надо указывать, по какому параметру, иначе получишь по шапке :3

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

Ну, полмира считает, что каким-то невидимым личностям, а что?

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

А это ваше искусство обычно несёт пользу только тому, кто его выгодно продал.

Опаа! Отсюда поподробнее. Кино не смотрите? Музыку не слушаете? Литературу не читаете? В игры не играете?

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

А это ваше искусство обычно несёт пользу только тому, кто его выгодно продал.

Есть исключения, но в целом. Да. Согласен.

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

Говорили мне на дипломном проектировании, что для слова «оптимальный» надо указывать, по какому параметру, иначе получишь по шапке

У нас одного студня на защите затравили за то, что критерий оптимальности не написал, еле тройку поставили.

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

Кино не смотрите? Музыку не слушаете? Литературу не читаете? В игры не играете?

Тут надо думать о том, ПОЧЕМУ я это делаю. Дело в том, что цивилизация запретила уличных музыкантов, бродящих артистов и других носителей культуры, не связанных с масс-медиа. Поставила их вне закона и вне распределения благ. Цивилизация искусственным путём создала мне дефицит культуры и восполняет его баландой в виде массмедиа. Человека можно не кормить и он будет жрать д-мо, да. Так устроена жизнь.

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

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

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

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

Мне помнится поставили 2 очка по ВМ за то, что оба вопроса билета я ответил правильно, но не по лекциям, а до задачи дело не дошло потому, что вот так с вопросами. Наше образование - бензопилой бы выпилил. Не по лекциям - только потому, что читали быстро и нифига не слышно, записать невозможно было.

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

И всё-таки? Что-то мне подсказывает, что вы вместо этого таки не спите и не смотрите на звёзды.

Возможно только лучше

Это как с возвращением в лоно природы: советуют многие, а вот сами на своей шкуре испытать - боятся.

next_time ★★★★★
()

Вместо 1 и 4 команд надо было MOV R2, #0xFFF

Так только в armv6 можно, вроде бы. А так — по 8 бит за раз.

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

Тут не в мнемониках дело, тут дело в том, что время исполнения команды без истории и последствий не имеет смысла

Не поленился разобраться поверхностно в современном ассемблере. Холостой код вида:
[code=asm]
main:
movq $0x3FFFFFFFF, %rax
loop:
dec %rax
jnz loop
[/code]
у меня выполняется за 4.1 секунд.

Вариант с декрементом, повторённым 16 раз:
[code=asm]
main:
movq $0x3FFFFFFFF, %rax
loop:
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
xor %rbx, %rbx
dec %rbx
dec %rax
jnz loop
[/code]
36.9…37.0 сек.

Вариант с загрузкой константы:
[code=asm]
main:
movq $0x3FFFFFFFF, %rax
loop:
movq $-1, %rbx
movq $-1, %rbx
movq $-1, %rbx
movq $-1, %rbx
movq $-1, %rbx
movq $-1, %rbx
movq $-1, %rbx
movq $-1, %rbx
movq $-1, %rbx
movq $-1, %rbx
movq $-1, %rbx
movq $-1, %rbx
movq $-1, %rbx
movq $-1, %rbx
movq $-1, %rbx
movq $-1, %rbx
dec %rax
jnz loop
[/code]
23.1 сек.

Разница — в 1.7 раза в пользу загрузки константы.

Команда загрузки константы — три байта на команду + 4 байта на константу, всего 7 байт.

Декремент — 2 раза по три байта, всего 6 байт.

Вот и практический ответ на вопрос. Правда, одна фигня непонятна. Все команды идут с префиксом 0x48. Хотя и режим x86_64, и опцию -m64 явно задавал, так что 64-х битные операции должны идти без префикса. Откуда префикс?

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

Мля, гадский ЛОР-парсер. Когда тут редактирование нормальное сделают?

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

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

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

Лол, что? Вылезайте из своего лексуса и пройдитесь разок по подземному переходу. ...Что? Качество контента? А это оно, родимое, эталонное качество контента труЪ бродячих музыкантов.

Ах, да: музыкальные инструменты - плоды цивиллизации.

восполняет его баландой в виде массмедиа.

Я, к примеру, практически независим от массмедиа — если не считать таковыми свободный интернет. Это не мешает мне слушать отличную музыку.

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

теоретик?

Да. Потому что практик сразу спросит о решаемых задачах и не будет маяться хернёй, сравнивая быстродействие Си и Java :) Вы бы ещё с PHP сравнили.

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

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

Так почему же не нашли? Смотреть на звёзды всяко проще. И выгоднее. Может потому, что искусство - доставляет больше удовольствия?

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

Вылезайте из своего лексуса и пройдитесь разок по подземному переходу

ЛОЛ. У меня вообще автомобиля нет.

...Что? Качество контента? А это оно, родимое\

Это не музыанты. Это попрошайки и мошенники.

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

Да. Потому что практик сразу спросит о решаемых задачах и не будет маяться хернёй, сравнивая быстродействие Си и Java :)

задача вполне ясна из верхнего поста, как по мне.

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

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

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

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

Это не музыанты. Это попрошайки и мошенники.

О как, после полного ностальгии поста по средневековым уличным музыкантам. Вдруг выясняется, что вам не нравятся современная версия, т.к. попрошайки и мошенники. А вам не приходило в голову прокрутить сценарии того, за счёт чего могли жить уличные музыканты? Нет? А вот у меня даже фантазии не хватает придумать иных источников доходов для уличных музыкантов всех времён, в реальном мире, кроме как попрошайничество и мошенничество.

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

задача вполне ясна из верхнего поста, как по мне.

А в каком месте там Java? o_O Топикстарт о компиляции драйверов в нативный код. Насколько я в курсе, на Java пока драйверов не пишут. И в нативный код она только через JIT.

сравнение вполне корректно и правдиво - достаточно посмотреть на тот же айфон и приложения под него

А в каком месте Си на iPhone? o_O Я думал там Objective C. И тормоза больше не из-за кода прикладного софта, а из-за инфраструктуры системы.

Если что, GUI [бэкенд] на Андроиде тоже не на Java.

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

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

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

А вам не приходило в голову прокрутить сценарии того, за счёт чего могли жить уличные музыканты?

Не за счёт зарплаты от криминала. Ага.

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

Ну ка, ну ка, расскажите про их чудесные источники дохода, думаю, всем будет интересно.

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

Но мне с детства прививали, что искусство - это хорошо, и те, кто потребляет его, лучше тех, кто не потребляет.

Мне с детства таким маразмом голову никто не забивал. Тем не менее, почему-то интерес к книгам и фильмам я проявил самостоятельно.

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

Спорно. Мне не известен ни один продукт исключительно машинного труда, без которого человек не смог бы существовать. И пища и жильё и одежда вполне создаются самостоятельно. Другое дело, что без машинного труда жить _не_приятно_ хоть и возможно. Как и без искусства.

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

А в каком месте там Java? o_O Топикстарт о компиляции драйверов в нативный код. Насколько я в курсе, на Java пока драйверов не пишут. И в нативный код она только через JIT.

правильно. я ему как раз и возразил, что врядли тормозит весь андроид из-за такого гнилого сишного компилятора, т.к. в системе есть тормоз раз в 10 мощнее :)

А в каком месте Си на iPhone? o_O Я думал там Objective C.

который просто надстройка над си, и код в основном на C/C++ пишется. objc только для вызовов cocoa и всякого подобного, а таких вызовов мало. и внутри оно, опять же, на C/C++.

И тормоза больше не из-за кода прикладного софта, а из-за инфраструктуры системы.

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

GUI [бэкенд] на Андроиде тоже не на Java.

дык он как раз и не тормозит. что не мешает всему андроиду в целом тормозить просто аццки.

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

Мне с детства таким маразмом голову никто не забивал.

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

Мне не известен ни один продукт исключительно машинного труда, без которого человек не смог бы существовать.

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

И пища и жильё и одежда вполне создаются самостоятельно.

Лично я бы в первую зиму окочурился. Ибо не могу ни нору вырыть, ни иглу построить. Даже достойный шерстяной покров отрастить не могу =( А ещё стоит вспомнить про лекарства, которые невозможно без машинного труда производить. Вобщем очень большая часть человечества вымрет без машинного труда. А много ли вымрет без искусства? Поэтому я склонен полагать, что жить без машинного труда гораздо более неприятно, чем без искусства.

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

начиная с различных уроков в школе, типа литературы, рисования и пения

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

везде задействован труд человека в той или иной степени.

Я имел в виду другое: индейцы амазонии, например, вполне прекрасно обходятся без машинного труда. Хотя, рыбу ловить эффективнее посредством рыболовецких судов.

Лично я бы в первую зиму окочурился. Ибо не могу ни нору вырыть, ни иглу построить.

Да щаз: припрёт, живо всё соорудите. И помощь лороаналитиков даже не потребуется.

А ещё стоит вспомнить про лекарства, которые невозможно без машинного труда производить.

Во-первых, возможно, и даже легко. Во-вторых, если было бы и так, то, что?

Вобщем очень большая часть человечества вымрет без машинного труда.

НетЪ

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

Таки искусство несёт в себе ещё и воспитательную ценность. Так что, без искусства, жертвы будут однозначно.

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

Должен ли адепт ЛММ писать спагетти-код?

«Лучше бы ты этого не делал».

Кстати, давно хотел спросить. Для чего (вернее, от чего) в очках линзы такого цвета, как у тебя на аве, применяются? Или просто так?

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

Для чего (вернее, от чего) в очках линзы такого цвета, как у тебя на аве, применяются? Или просто так?

Фотохромное стекло. На ярком свете темнеют. Чтобы не мучиться от невозможности надеть солнцезащитные очки поверх обычных в солнечный день :) В темноте — прозрачные.

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

Так это же антиреклама, разве нет? Всё, что заставляют - ненавидят.

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

индейцы амазонии, например, вполне прекрасно обходятся

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

Во-вторых, если было бы и так, то, что?

Как что, массовая гибель лекарствозависимых.

Таки искусство несёт в себе ещё и воспитательную ценность. Так что, без искусства, жертвы будут однозначно.

Ох как сомнительна мне эта воспитательная ценность. Если забыть про басни и плакаты «Не влезай - убьёт!», всё серьёзное искусство в большинстве своём бессмысленно и беспощадно.

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

Многие пытались, не вышло.

Мой опыт программирования под AVR с 4 килобайтами памяти говорит о том, что компиляторы неоптимальны.

cvs-255 ★★★★★
()
Ответ на: комментарий от Mitre

А быстро они из одного состояния в другое переходят?

Зависит от конкретного вида стекла. Были у меня обалденные очки, кстати, просто в подземном переходе купленные, так темнели до чёрного состояния на ярком солнце секунд за 20-30. Правда, в темноте совершенно прозрачными не становились, были чуть затемнены. Но не мешало. Зато на солнце — по-настоящему сильно свет гасили.

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

KRoN73 ★★★★★
()
Ответ на: комментарий от cvs-255

Мой опыт программирования под AVR с 4 килобайтами памяти говорит о том, что компиляторы неоптимальны.

При компиляции под размер — неоптимальны, да. А вот под скорость — ещё в конце 1990-х стали конкурентоспособны.

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