Какие проекты (кроме очевидных вещей ОС) используют язык ассемблера? - PullRequest
10 голосов
/ 19 июня 2009

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

Я имею в виду аппаратное обеспечение в стиле ПК и больше, а не встроенные компоненты с крошечными крошечными процессорами.

Ответы [ 16 ]

9 голосов
/ 19 июня 2009

Более или менее очевидно, что программирование ассемблера необходимо для внутренних компонентов компилятора и связанных с ним технологий, таких как динамическая перекомпиляция симуляторов ЦП.

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

Редактировать: В эти дни игры делают большую часть своих вычислений в графическом процессоре. Получить максимум от этих вычислительных ресурсов не всегда возможно, используя только OpenGL или DirectX, и производители этих процессоров предоставляют множество инструментов, позволяющих выжать больше из своего оборудования. Хотя Cuda или OpenCL являются хорошо известными терминами, они все еще находятся на относительно высоком уровне абстракции по сравнению с оборудованием GPU, выполняя роль, очень похожую на роль C в типичных (Von Neuman) процессорах. Посмотрите на developer pages для этих продуктов, и вы найдете десятки способов оптимального использования ресурсов вычислений на GPU на каждом уровне абстракции.

9 голосов
/ 19 июня 2009

Boost , будучи современным C ++, использует встроенную сборку для низкоуровневых критичных к производительности битов, таких как атомные общие счетчики .

Изменить: как правильно замечает @TokenMacGuy, «производительность» здесь не то слово. Boost использует язык ассемблера для вещей, которые не могут быть выполнены в стандартном C ++, таких как атомарность (и встроенные функции компилятора по некоторым причинам недоступны).

3 голосов
/ 19 июня 2009

Я считаю, что проект параллельных вычислений Folding @ Home использует оптимизированный код сборки для максимальной скорости. *

* Примечание: это не означает, что сборка всегда быстрее, чем C / C ++.

2 голосов
/ 21 июня 2009

Так же, как анекдот: Магнат американских горок был полностью (или почти) написан в сборке x86 Крисом Сойером ( ссылка на Википедию ).

2 голосов
/ 21 июня 2009

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

1 голос
/ 20 июня 2009

Служебные функции, которые язык более высокого уровня не ожидал поддерживать. Старый пример, когда я пытался получить некоторые тонкости, которые C и Unix предоставили, работая с Fortran на RSX-11M. Я хотел передать строки форматирования и использовать более простой стиль Си. Функция printf () должна была выполнять некоторые операции приведения типа. У Fortran такой концепции не было, поэтому icast () и rcast () были написаны на ассемблере. Другими реализованными функциями были move () и clone (). Это было сделано не столько для эффективности, сколько для расширения концепций за пределами мышления Фортрана.

1 голос
/ 19 июня 2009

В C на фундаментальном уровне довольно легко увидеть, как набор инструкций становится ассемблером (если вы понимаете основную архитектуру). Но иногда ассемблер не может быть побежден. Обратите внимание, что написать дрянной, неэффективный ассемблерный код можно так же легко, как написать дрянной C-код. А ассемблер гораздо проще в обслуживании. И он никуда не переносится.

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

1 голос
/ 19 июня 2009

Если вы потратите много времени на просмотр результатов сборки вашего источника C / C ++, вы очень быстро заметите, что большинство хороших оптимизирующих компиляторов делают сборку лучше, чем даже хорошие программисты на ассемблере. Решения о том, когда встроить функцию, как обрабатывать циклы, пост-пре-инкремент (что многие компиляторы сами решают, как обрабатывать для вас сейчас) и т. Д. управлять адресами и определениями, чем вы, при нормальных обстоятельствах, по крайней мере.

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

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

1 голос
/ 19 июня 2009

В последний раз, когда я сталкивался с ассемблером, я взламывал исходный код Quake I. Все математические библиотеки (особенно что-либо для точечных продуктов) были написаны на MASM Джоном Кармаком. Этот материал был интенсивным с плавающей запятой, и в то время C не был так хорош, как искусно созданный вручную ASM для операций с плавающей запятой. Кроме того, поскольку компьютеры были гораздо более ограничены по процессору, а Quake использовал процессор для рендеринга, каждая отдельная операция имела значение, поэтому ASM работал лучше всего.

1 голос
/ 19 июня 2009

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

...