Вопросы с тегом «assembly»

Вопросы программирования на ассемблере (asm). ОБЯЗАТЕЛЬНО ТАКЖЕ пометьте процессором и / или набором команд, который вы используете, а также ассемблером. ПРЕДУПРЕЖДЕНИЕ. Вместо сборок .NET используйте тег [.net-assembly]. Для Java ASM используйте тег [java-bytecode-asm].

2120
Почему GCC не оптимизирует a * a * a * a * a * a до (a * a * a) * (a * a * a)?

Я делаю некоторую числовую оптимизацию для научного приложения. Одна вещь, которую я заметил, заключается в том, что GCC оптимизирует вызов pow(a,2), компилируя его a*a, но вызов pow(a,6)не оптимизируется и фактически вызовет библиотечную функцию pow, что значительно снижает производительность. (В...

1574
<Быстрее чем <=?

Является ли if( a < 901 )быстрееif( a <= 900 ) . Не совсем так, как в этом простом примере, но есть небольшие изменения производительности сложного кода цикла. Я полагаю, это связано с созданным машинным кодом на случай, если это...

1424
Замена 32-разрядного счетчика циклов на 64-разрядный вводит сумасшедшие отклонения производительности с _mm_popcnt_u64 на процессорах Intel

Я искал самый быстрый способ для popcountбольших массивов данных. Я обнаружил очень странное действие: Изменение переменного цикла из unsignedк uint64_tвысказанному падению производительности на 50% по сравнению с ПК. Бенчмарк #include <iostream> #include <chrono> #include...

833
Код C ++ для проверки гипотезы Коллатца быстрее, чем рукописная сборка - почему?

Я написал эти два решения для Project Euler Q14 , в сборке и на C ++. Это один и тот же метод грубой силы для проверки гипотезы Коллатца . Решение для сборки было собрано с nasm -felf64 p14.asm && gcc p14.o -o p14 C ++ был скомпилирован с g++ p14.cpp -o p14 Ассамблея, p14.asm section .data...

643
Как мне достичь теоретического максимума 4 FLOP за цикл?

Как достичь теоретической пиковой производительности 4 операций с плавающей запятой (двойной точности) за такт на современном процессоре Intel x86-64? Насколько я понимаю, для большинства современных процессоров Intel требуется три цикла для SSE add и пять циклов для a mul(см., Например , «Таблицы...

476
Когда сборка происходит быстрее, чем C?

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

320
Какова цель стека? Зачем нам это нужно?

Поэтому я сейчас изучаю MSIL, чтобы научиться отлаживать мои приложения на C # .NET. Я всегда задавался вопросом: какова цель стека? Просто чтобы поставить мой вопрос в контексте: почему происходит перенос из памяти в стек или «загрузка»? С другой стороны, почему происходит перенос из стека в...

276
Почему Java переключается на непрерывные целочисленные объекты, кажется, работает быстрее с добавленными случаями?

Я работаю над некоторым Java-кодом, который должен быть сильно оптимизирован, так как он будет работать в горячих функциях, которые вызываются во многих точках моей основной логики программы. Часть этого кода включает в себя умножение doubleпеременных 10на произвольные неотрицательные int...

256
Использование GCC для создания читаемой сборки?

Мне было интересно, как использовать GCC в исходном файле C для вывода мнемонической версии машинного кода, чтобы я мог видеть, во что компилируется мой код. Вы можете сделать это с Java, но я не смог найти способ с GCC. Я пытаюсь переписать метод C на ассемблере и посмотреть, как это делает GCC,...

244
Что такое ретполин и как он работает?

Для предотвращения раскрытия памяти в ядре или в межпроцессном режиме ( атака Spectre ) ядро Linux 1 будет скомпилировано с новой опцией , -mindirect-branch=thunk-externвведенной gccдля выполнения косвенных вызовов через так называемый retpoline . Похоже, что это новый изобретенный термин,...

243
Как выглядит многоядерный язык ассемблера?

Давным-давно, например, для написания ассемблера x86, вы должны будете получить инструкции о том, что «загрузить регистр EDX со значением 5», «увеличить регистр EDX» и т. Д. С современными процессорами, которые имеют 4 ядра (или даже больше), на уровне машинного кода это просто выглядит так, как...

242
Является ли «переключатель» быстрее, чем «если»?

Является ли switchутверждение на самом деле быстрее, чем ifутверждение? Я запустил код ниже на x64 C ++ компиляторе Visual Studio 2010 с /Oxфлагом: #include <stdlib.h> #include <stdio.h> #include <time.h> #define MAX_COUNT (1 << 29) size_t counter = 0; size_t testSwitch() {...

239
Как запустить программу без операционной системы?

Как вы запускаете программу самостоятельно без операционной системы? Можете ли вы создавать программы сборки, которые компьютер может загружать и запускать при запуске, например, загружать компьютер с флэш-накопителя, и он запускает программу, которая находится на...

237
Можно ли «декомпилировать» Windows .exe? Или хотя бы посмотреть сборку?

Мой друг скачал вредоносное ПО с Facebook, и мне любопытно посмотреть, что он делает, не заражая себя. Я знаю, что вы не можете декомпилировать .exe, но я могу хотя бы просмотреть его в Assembly или прикрепить отладчик? Изменить, чтобы сказать, что это не исполняемый файл .NET, нет заголовка...

228
Почему GCC использует умножение на странное число при реализации целочисленного деления?

Я читал о div и mulсборочных операциях, и я решил , чтобы увидеть их в действии, написав простую программу в C: Файл деление.c #include <stdlib.h> #include <stdio.h> int main() { size_t i = 9; size_t j = i / 5; printf("%zu\n",j); return 0; } И затем генерирование кода на ассемблере gcc...

225
Что такое базовый указатель и указатель стека? На что они указывают?

Используя этот пример из Википедии, в которой DrawSquare () вызывает DrawLine (), (Обратите внимание, что эта диаграмма имеет высокие адреса внизу и низкие адреса вверху.) Может ли кто-нибудь объяснить мне, что ebpи espв этом контексте? Из того, что я вижу, я бы сказал, что указатель стека всегда...

222
Почему введение бесполезных инструкций MOV ускоряет сжатый цикл в сборке x86_64?

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