Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кто быстрее, Почему говорят что АСМ быстрее С???? 
:(
    Опции темы
HellanD
Дата 17.7.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: нет
Всего: 2



Обясните мне!!
Дело в чем сначала и в АСМ и в С создается обектный файл который потом превращается в набор нулей и едениц (машинные коды), а разве они разные по скорости работы???
Почему же говорят что програмы на АСМ производительнее???
Не правильно ли думать что программы на АСМ быстрее компилятся и только и того??!
Спасибо за ответ
  


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
nikitao
Дата 17.7.2006, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 1
Всего: 26



HellanD,  нет асма быстее по определению, т к язык низкого уровня, а С высокого. smile  


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
HellanD
Дата 17.7.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: нет
Всего: 2



Цитата

 нет асма быстее по определению, т к язык низкого уровня, а С высокого.  


Дело в чем сначала и в АСМ и в С создается обектный файл который потом превращается в набор нулей и едениц (машинные коды), а разве они разные по скорости работы???
Какая разница между машинными кодами сделанными с помощью С и АСМ???? И там 0 1 и здесь!!! 


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
Void
Дата 17.7.2006, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Афигеть. Господа, а вам не приходит в голову, что любую задачу можно и на ассемблере и на Си закодировать несчетным множеством различных способов? И что выяснение самого оптимального из них — практически невыполнимая задача и мы можем довольствоваться только приближением к оптимуму?
Ассемблер дает больше возможностей для оптимизации, но, с другой стороны, сложность современных процессоров такова, что ручная оптимизация сколько нибудь значительных кусков кода займет очень много времени. ЯВУ позволяют программисту сосредоточиться на более эффективной алгоритмической оптимизации, а рутинный и изобилующий подводными камнями процесс кодогенерации под конкретный процессор компилятор берет на себя.
Цитата(nikitao @  17.7.2006,  23:05 Найти цитируемый пост)
С высокого.

Спорно smile 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
sergejzr
Дата 17.7.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



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


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Void
Дата 17.7.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



sergej.z, функция div в stdlib.h. Уверен, большинство компиляторов соптимизирует ее именно до той самой инструкции. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
dumb
Дата 18.7.2006, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



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

ps. вроде как незнание не освобождает от ответственности? - провокация холивара. smile 
PM MAIL   Вверх
Void
Дата 18.7.2006, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(dumb @  18.7.2006,  02:40 Найти цитируемый пост)
если ты захочешь поколдовать и с целой частью и с остатком, то компилер вряд ли догадается не делать второе деление.

Недооцениваешь возможности современных компиляторов smile
Код
#include <cstdio>
#include <cstdlib>

int main() {
    int a = rand(), b = rand();
    int quot = a / b, rem = a % b;
    printf("%d %d\n", quot, rem);
}

Intel C++ 9.0 выдал вот такой код:
Код
;;;    int a = rand(), b = rand();
        call      _rand                                         ;5.10
        mov       esi, eax                                      ;5.10
        call      _rand                                         ;5.22
        mov       ecx, eax                                      ;5.22
;;;    int quot = a / b, rem = a % b;
        mov       eax, esi                                      ;6.17
        cdq                                                     ;6.17
        idiv      ecx                                           ;6.17
        push      edx                                           ;6.30
        push      eax                                           ;6.30
        push      OFFSET FLAT: ??_C@_06A@?$CFd?5?$CFd?6?$AA@    ;6.30
;;;    printf("%d %d\n", quot, rem);
        call      _printf

MSVC 8.0 тоже не подкачал. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
sergejzr
Дата 18.7.2006, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



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


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Void
Дата 18.7.2006, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Я не склонен преуменьшать роль ассемблера. Многие оптимизации, особенно связанные с использованием SIMD-инструкции современным компиляторам не по плечу. Даже могучий «интеллект» ICC способен провести их только в некоторых простых случаях. Но “premature optimization…” и далее по тексту smile 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
dumb
Дата 18.7.2006, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



Цитата(Void @  18.7.2006,  00:49 Найти цитируемый пост)
Недооцениваешь возможности современных компиляторов


с горкой пепла на голове пошел сносить TC2.0... smile

а есть тут такие, кто пользуется в "серьезных разработках" современными компиляторами? smile

ps. насколько я понял, наши точки зрения на вопрос "asm vs HLL" абсолютно совпадают, посему ой. 
PM MAIL   Вверх
SergeCpp
Дата 18.7.2006, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



Randall Hyde

The Great Debate

"Will Compilers Ever Produce Code as Good as an Expert Assembly Language Programmer?"

In English...

7,240,406 посещений с 1 января 2000 
PM MAIL WWW ICQ   Вверх
Sardar
Дата 18.7.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 1
Всего: 317



Не умирающая тема  smile 

На асме можно написать код к скорости которого обычному компилеру не приблизиться. НО! у человека просто физически не хватить "мозга" удержать всё это в голове, появиться фактор лени, когда вместо того что бы положить блок константных строк в память и строить сылки на участки программист просто копирует части строк собирая новую строку. Строки наиболее вредная, рутинная работа, потому упомянул smile

Цитата(sergej.z @  17.7.2006,  20:34 Найти цитируемый пост)
Например в си можно получить или остаток от деления, или результат. В асме можно получить одним действием и то и другое. 

Опять же физически у человека не уложиться в голове какие оптимизации можно провести. Когда выполняеться часть вычислений, а затем спустя пару десятков инструкций "на другую тему", былое значение "случайно" оказываеться в регистре и пользуеться. Другими словами вычисление нескольких формул может перемешаться, если компилер уверен какие там будут значения. Человеку не реально (нет я нисколько не сомневаюсь в ваших способностях smile ) отслеживать в уме более 3-5 "вычислений" одновременно. Компилер, если это не ad-hoc на коленке как раньше, а по теории, может всё и главное компилер совершенствуеться, прога с кажды разом становиться быстрей (перекомпилируеться) smile

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

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

P.S. писал на асме под 8051(2) микроконтроллеры, также под соверменный ez80 (тоже контроллер и веб сервер), ну енто нафих  smile   


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
bsa
Дата 22.7.2006, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Писал и пишу на ASM Z80. Если честно - надоело. Но альтернативы ассемблеру нет.
Написание большого проекта на ASM не представляет большой проблемы. Есть три минуса: время на написание, время на отладку и непереносимость. Есть плюс - скорость работы готового продукта.
Много времени уходит на начало создания проекта - на написание всех базовых функций... На последнем этапе программа, в основном, состоит из вызовов процедур, условных переходов вперед и циклов - переходов назад.
Я лично на 100% уверен, что идеально оптимизированные программы на C (или другом языке высокого уровня) (если конечно не писать на си, как на ассемблере) и ASM будут работать с разной скоростью (в пользу последнего). Ну не существует идеальных компиляторов с языков высокого уровня! С другой стороны, а оно того стоит? Разве стоит полгода работы то, что можно сделать за неделю/месяц, но работать будет на 20% (а то и меньше) медленнее? Имхо, нет. 

Это сообщение отредактировал(а) bsa - 22.7.2006, 22:50
PM   Вверх
Mayk
Дата 23.7.2006, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Кстати. Ставлю десятку, что код на си получается в частности медленнее, чем на асме, потому что сишный код транслируется в асм.

Если бы процессоры могли исполнять инструкции си, но не ассемблера, то было бы наоборот(сишный код исполнялся бы быстрее).

 


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0777 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.