LINUX.ORG.RU

Нужно ли учить ассемблер?


2

3

Пишу на С++. Нужно ли учить ассемблер? МатЧасть (устройство оперативной памяти, указатели, сколько какая переменная занимает памяти) и так далее примерно знаю (опыт кодинга на с++).

Также очень поверхностно знаю как работает процессор(читал разные статьи на хабре).

Будет ли мне профить от учения ассемблера (Под профитом понимаю лучшее понимание Си-шного кода при роботе с памятью указателями и разные принципы оптимизации)

UPD Мне все равно на мой заработок. Я хочу программировать как бог.

Перемещено mono из talks



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

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

Эм. Ну я как бы не виноват, что народ в терминологии путается. И это не отменяет перевод англоязычного термина. В русском издании книги Страуструпа тоже используется термин «Перегрузка операторов». Или дяде, придумавшему C++ уже нельзя доверять? :-)

Pinkbyte ★★★★★
()

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

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

Ну разумеется, никто же не будет писать на асме _целиком_.

Вот именно. А что стать гуру - надо писать целиком, и много чего писать.

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

Это хреновое «быстродействие». И бесполезное на современных процессорах, к тому же.

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

Вот именно. А что стать гуру - надо писать целиком, и много чего писать.

Как одно связанно с другим? Чем та же сишка отличается от макроассемблера? Или гуру - это когда сам ручками анрол фигачишь, массивчики заполняешь и прочее? Это гернорабочий, а не гуру.

Это хреновое «быстродействие». И бесполезное на современных процессорах, к тому же.

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

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

Пруфец: http://pastebin.com/5PavWe51 ->

BLOCK SIZE: 1KB
cachecp32:
98.138570GB/s
cachecp512:
259.813189GB/s

BLOCK SIZE: 2KB
cachecp32:
122.565220GB/s
cachecp512:
263.847441GB/s

BLOCK SIZE: 4KB
cachecp32:
143.032521GB/s
cachecp512:
261.475559GB/s

BLOCK SIZE: 8KB
cachecp32:
156.989498GB/s
cachecp512:
264.659145GB/s

Это хасвел 4.5ггц. Чтобы снять теоретический предел надо будет юзать уже не примитивный гцц патерн: mov ptr, r0; mov r0, ptr;mov ptr, r0; mov r0, ptr;->8, а что-то более вменяемое. Плюс на портянке чуть более сложнее, чем мемкопи - это более заметно.

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

P.S. И да, не надо тереть мои посты. Ещё раз повторю, пишите хоть за что баните.

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

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

потому что ты нерусский наверное.

В русском издании книги Страуструпа тоже используется термин «Перегрузка операторов». Или дяде, придумавшему C++ уже нельзя доверять? :-)

нельзя доверять тупому переводчику-ГСМ. Если я начну про балет переводить — тоже fail получится. В русском языке у слова «перегрузка» толкование однозначное — превышение нагрузки сверх меры. А в C++ оператор именно перезагружается, т.к. изменяет свой смысл.

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

Или гуру - это когда сам ручками анрол фигачишь, массивчики заполняешь и прочее?

Гуру - это когда код херачишь, не задумываясь.

Пруфец:

memcpy не пробовал?

А так - говнокод, оторванный от реальности: и src, и dst - не non-temporal, префетчер не отсекается. Если это вставить в реальную программу, которая двигает данные, тот от твоего ручного онанизма ущерб один будет.

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

В русском языке у слова «перегрузка» толкование однозначное — превышение нагрузки сверх меры.

«Overloading» у них то же самое значит.

А в C++ оператор именно перезагружается, т.к. изменяет свой смысл.

Оператор перегружается смыслом: рассчитываешь на один, а у него другой.

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

«Overloading» у них то же самое значит.

hz

Оператор перегружается смыслом: рассчитываешь на один, а у него другой.

так только в быдлокоде. В нормальном коде + значит — сложение. Пусть даже это HEX+HEX. Т.е. смысл остаётся тем же.

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

потому что ты нерусский наверное.

Дооо. Жги еще.

нельзя доверять тупому переводчику-ГСМ

Причём здесь переводчик? Я поспрашивал знакомых программистов - у всех фраза «перезагрузка операторов» вызвала лишь недоумение. А вот про перегрузку - слышали все, даже те, кто, ВНИМАНИЕ, настолько радикальны что читают тех. документацию только в оригинале.

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

В русском языке у слова «перегрузка» толкование однозначное — превышение нагрузки сверх меры.

http://slovar-vocab.com/english/websters-vocab/overloading-8359969.html

OVERLOADING — < language > (Or «Operator overloading»). Use of a single symbol to represent operators with different argument types, e.g. "-", …
FOLDOC Computer English Dictionary
OVERLOADING — ЯП перегрузка (операций) (возможность выбора компилятором различных реализаций одной и той же функции в зависимости от типов ее параметров
Большой Англо-Русский словарь

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

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

Я поспрашивал знакомых программистов

это так только в твоём узком кругу. Выше уже был пруф из гугла.

Это типичная история вообще для любой техники(не только CS), когда неграмотный перевод приживается. Да, overload любой ГСМ переведёт как «перегрузка», но английский язык известен своей многозначностью. На русский так переводить в данном случае ИМХО нельзя. Слово «перезагрузка» тут конечно тоже не совсем подходит, но более подходящих слов увы — нет в русском языке(или я их не знаю).

Ну и к тому же, «перезагрузка» это действие, т.е. сказуемое, а вот перегрузка — это прилагательное скорее. Никто не хочет «делать перегрузку», т.к. это обычно имеет отрицательный смысл. Т.е. было бы правильно говорить, что «оператор сложения перегружается» в том случае, если-бы там не только сложение было-бы, но и ещё что-то. Но в overload ничего подобного нет, там от сложения кроме плюса, ничего и не остаётся. Даже если operator+ что-то складывает это сложение нужно полностью переделывать.

Ну и да, каталоги сплошь и рядом переводят как «папки», это по твоему тоже правильно?

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

Большой Англо-Русский словарь

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

послушаем другого эксперта:

Демагогия: опыт классификации

Б. КАЦЕНЕЛЕНБАУМ, доктор физико-математических наук

3. Демагогия без связи с логикой

<...>

Ссылка на авторитет неспециалистов. Пример: 'Моя теорема очень понравилась народному артисту Н., а какой-то м.н.с. доказывает, что она неверна!'.

покажи-ка мне C++ код этих твоих экспертов...

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

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

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

а вот перегрузка — это прилагательное скорее

«Дверь, котора дверь? Эта? Прилагательна. Потому что она приложена к своему месту. Вон у чулана шеста неделя дверь стоит еще не навешена: так та покамест существительна.»

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

Демагогия: опыт классификации

О, так вот откуда ты её нахватался.

покажи-ка мне C++ код этих твоих экспертов...

Мы с нетерпением ждём твой код. Уже годы.

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

перегрузка — это прилагательное скорее

Ненене, это герундий, которого в русском нет :) Т.е. отглагольное существительное, обозначающее процесс или результат процесса, как впрочем и перезагрузка. А «сказуемое» - это роль слова в предложении («рема», «что говорится» о подлежащем («сема»)). Чаще всего в качестве сказуемого используется глагол. Существительные мб сказуемым в неполных предложениях с пропавшим глаголом «есть».

каталоги сплошь и рядом переводят как «папки»

Как папки переводят «фолдеры». Каталоги калькируют либо «каталогами», либо... директориями :)

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

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

По моему мнению, это как раз тот случай неправильного перевода.

И ссылки должны быть на авторитетов в данной области, а не на «народных артистов». К сожалению, я таких авторитетов не знаю. Что-бы разбирался в C++, да ещё и что-бы был русскоговорящим (тут важно, что-бы для авторитета русский язык был родным и первым).

Вот лично у тебя есть мнение, или только «знакомые программисты» и «филологи»? Если нет, то да, разговор закончен, слив засчитан. Если есть — обсудим.

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

О, так вот откуда ты её нахватался.

неужто ты не читал?! Неужели своим умом дошёл? А я — читер, не осилил...

Мы с нетерпением ждём твой код. Уже годы.

emulek == толстый тролль. У него по определению нет никакого кода. Т.ч. жди...

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

Ненене, это герундий, которого в русском нет

именно так.

Как папки переводят «фолдеры».

увы, ты не прав. Впрочем, это не играет роли, т.к. ITшники либо вообще ничего не читают, либо читают по английски. И правильно делают, ибо неграмотный переводчик может испоганить что угодно.

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

emulek == толстый тролль

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

У него по определению нет никакого кода. Т.ч. жди...

Жду. Может тогда получится поговорить предметно.

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

emulek == толстый тролль

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

разве зазнайка в это признается? (:

Жду. Может тогда получится поговорить предметно.

это оффтопик в данной теме. Напомню: ты влез в спор двух демагогов о том, как правильно переводить overload в контексте C++. Зачем тут мой код — мне непонятно. Надо будет, я обязательно выложу.

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

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

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

anonymous
()

нужно? нет.

можно? да.

Будет ли мне профить

да.

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

Я не могу понять что тут будет происходить на низком уровне

почитай тогда ABI соответствующей платформы.

ну, и знание асм для понимания ABI, наверное, полезно

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

Могу писать под линукс?

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

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

Могу писать под линукс?

Я имел в виду, могу ли я начать изучать асм с написание hello world под линукс?

knotri
() автор топика
Ответ на: комментарий от anonymous

Он просто банальная жертва синдрома Данинга-Крюгера.

синдрома Данинга-Крюгера

ЩИТО?

детка, ты хоть знаешь что такое «синдром»?

ЗЫЖ раз ты тут ссылаешься на авторитетов, то хотя-бы в их именах ошибок не делай. Даннинг!

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

Да срать мне на арфаграфею. Факт в том, что ты считаешь себя компетентным, постоянно высказываешь всякие ущербные мнения, но при этом совершенно не осознаешь, что ты полный, непрошибаемый ламер абсолютно во всех вопросах, которых ты тут посмел коснуться.

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

И идите вы все в грязную сраку с вашими чмошными перегрузками и перезагрузками. Всю жизнь было «переопределение».

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

Я имел в виду, могу ли я начать изучать асм с написание hello world под линукс?

да. Изучишь, как подключать share objects к своему коду. Это полезно знать сишнику. Потом подключишь glibc, и будешь писать годные хэлловорлды.

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

ок-ок. Споры на тему переводов и терминологии ИМХО все — тупой флейм. И бессмысленный. Всё равно оппоненты ничего друг другу не докажут, и будут говорить также... Т.ч. я и не настаиваю на «перезагрузки операторов», пусть будет «перегрузка», если для кого-то это важно...

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

Да срать мне на арфаграфею.

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

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

тогда-бы мои слова было-бы легко опровергнуть. Но никто этого не сделал. Выходит — ты врёшь... Или сам не в теме, и слышал от «Данинга», какой emulek тупой...

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

И идите вы все в грязную сраку с вашими чмошными перегрузками и перезагрузками. Всю жизнь было «переопределение».

Всю жизнь

лет-то тебе сколько, детка?

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

int80

оно использовалось ещё ДО девяностых годов, когда тебя в проекте не было.

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

Ну уж всяко побольше, чем тебе.

мне 39. Что ж, если ты прав, то мне тебя искренне жаль, таким ты и помрёшь...

Корректоров из издательства «Мир» лично знавал.

тоже C++ программистов 80lvl?

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

дело не в орфографии, а в авторитете тех, на кого ты ссылаешься, олух.

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

тогда-бы мои слова было-бы легко опровергнуть.

Как? Ты ж только пиздишь, и никогда не слушаешь. Тебя в говне утопили тут уже сотни раз, а тебе все по херу, как нес несусветную чушь, так и продолжаешь нести.

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

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

мне 39

Сопляк, то есть. Пешком под стол ходил, когда C++ в СССР появился.

тоже C++ программистов 80lvl?

Переводчиков и граммар-наци 80lvl.

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

memcpy не пробовал?

Сливает в говно.

А так - говнокод

Да, да, да. Очередные оправдания.

src, и dst - не non-temporal

nt - в l1d? куллстори.

префетчер не отсекается

Тут на него покласть.

Если это вставить в реальную программу

Что ты знаешь о реальных программах? Ты можешь 10раз повторить «биржа», «фпга» - «всё говно», только что это меняет?

которая двигает данные

Конечно в луже memcpy() от memmove() не отличаются - похвально, но всё же - это глупо.

тот от твоего ручного онанизма ущерб один будет.

Инфа сотка. Но почему-то сейчас это совершенно не так.

Понимаешь в чем дело - когда ты копируешь раму, то +-5-10%, при учете nt, покласть на то как ты её копируешь, только вот это не заслуга штеуда, а заслуга тормазной рамы, которая просто не проявляет фейлов.

Копирование рамы на тех же avx без анрола не сливает на 10-20% как раньше не потому, что «штеуд стал умнее», а лишь из-за того, что avx - это уже почти кешлайн.

Когда же ты копируешь в кеше(да и вообще что-то делаешь в кешах), то по определению без анролла штеуд не может. Это основа всего, начиная memset()'a ?заканчивая dgemm от mkl:

  6f8f7f:	4c 89 c3             	mov    %r8,%rbx
  6f8f82:	c5 dd 57 e4          	vxorpd %ymm4,%ymm4,%ymm4
  6f8f86:	c5 fd 10 5d 80       	vmovupd -0x80(%rbp),%ymm3
  6f8f8b:	c5 d5 57 ed          	vxorpd %ymm5,%ymm5,%ymm5
  6f8f8f:	c4 c1 7d 10 40 80    	vmovupd -0x80(%r8),%ymm0
  6f8f95:	c5 cd 57 f6          	vxorpd %ymm6,%ymm6,%ymm6
  6f8f99:	c4 c1 7d 10 48 a0    	vmovupd -0x60(%r8),%ymm1
  6f8f9f:	c5 c5 57 ff          	vxorpd %ymm7,%ymm7,%ymm7
  6f8fa3:	c4 c1 7d 10 50 c0    	vmovupd -0x40(%r8),%ymm2
  6f8fa9:	0f 18 59 80          	prefetcht2 -0x80(%rcx)
  6f8fad:	c4 41 3d 57 c0       	vxorpd %ymm8,%ymm8,%ymm8
  6f8fb2:	41 0f 18 0e          	prefetcht0 (%r14)
  6f8fb6:	c4 41 35 57 c9       	vxorpd %ymm9,%ymm9,%ymm9
  6f8fbb:	41 0f 18 4e 58       	prefetcht0 0x58(%r14)
  6f8fc0:	c4 41 2d 57 d2       	vxorpd %ymm10,%ymm10,%ymm10
  6f8fc5:	43 0f 18 0c 1e       	prefetcht0 (%r14,%r11,1)
  6f8fca:	c4 41 25 57 db       	vxorpd %ymm11,%ymm11,%ymm11
  6f8fcf:	43 0f 18 4c 1e 58    	prefetcht0 0x58(%r14,%r11,1)
  6f8fd5:	c4 41 1d 57 e4       	vxorpd %ymm12,%ymm12,%ymm12
  6f8fda:	41 0f 18 0f          	prefetcht0 (%r15)
  6f8fde:	c4 41 15 57 ed       	vxorpd %ymm13,%ymm13,%ymm13
  6f8fe3:	41 0f 18 4f 58       	prefetcht0 0x58(%r15)
  6f8fe8:	c4 41 0d 57 f6       	vxorpd %ymm14,%ymm14,%ymm14
  6f8fed:	43 0f 18 0c 1f       	prefetcht0 (%r15,%r11,1)
  6f8ff2:	c4 41 05 57 ff       	vxorpd %ymm15,%ymm15,%ymm15
  6f8ff7:	43 0f 18 4c 1f 58    	prefetcht0 0x58(%r15,%r11,1)
  6f8ffd:	48 89 d0             	mov    %rdx,%rax
  6f9000:	48 c1 f8 02          	sar    $0x2,%rax
  6f9004:	0f 8e e8 01 00 00    	jle    6f91f2 <mkl_blas_avx2_dgemm_kernel_0_b0+0x2f2>

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

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

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

Это ещё ничего - он кукарекал, что «никакого друго выравнивания кроме 16/32байт не получить». Добавляя к этому пруфцы от маллока().

Кстати, ты не особо лучше его - ты такой же ноль в софтварной части как и он. Т.е. твой кукаретинг такой же как у mv - ко-ко-ко ты идиот, ко-ко-ко так не бывает, а почему? - ты идиот.

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

Когда ж тебя, пиздюка, забанят-то наконец? Ты ж, школоло, в теме вообще не разбираешься.

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

тогда-бы мои слова было-бы легко опровергнуть.

Ну так их и опровергают почти в каждой теме.

Здесь ты сморозил про один 16 битный регистр на процессоре 8086, в теме про byteorder давал рекомендации как передавать данные по сети не зная про сетевой порядок.

Про перезагрузку... :)

А поспорить ты мастер, да.

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

Фсе, с менеджером памяти покончено? :)

Как всегда остановился на strcpy?

Вот поэтому к тебе никто серьезно и не относится.

BRE ★★
()

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

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