Ребята, стоп-стоп-стоп.
Эта тема- - лишь вопрос, понять надо ли оно вообще. И в каком объёме. И с чего начать.
Ни на какую полноту или систематичность не претендую, на то есть учебники, спасибо
GAA и
SergeCpp уже к ним отослали. Я выберу те что на русском. Ну вот потому что.
Про архитектуру внутри проца тоже конечно скажу несколько слов, необходимый минимум для понимания в контексте ассемблера, и потом ещё буду добавлять по мере необходимости. Про весь остальной комп не буду, на скорость вычислений он не влияет (тему GPU и прочих ускорителей тут не затрагиваем вообще).
Цель темы не рассказать про всё-всё-всё, а помочь начать писать
вычислительные задачи, те что могут считать что-то днями, неделями, месяцами. Ввод-вывод, и многое другое затрону лишь очень косвенно, только в контексте задания параметров и входных данных и вывода результатов. Насчёт обработки ошибок (деления на 0, выхода за пределы памяти, корень из -1, и прочее) пока раздумываю, может вообще лишь упомяну. Стресс-тесты и вообще вопрос проверки/доказательства правильности тоже видимо лишь упомяну как-нибудь потом. Я тупо всё это не слишком уверенно знаю.
Сравнением разных компиляторов заниматься не буду, я использую FASM, как скачать и настроить расскажу коротко. Но на сам язык асм компилятор влияет слабо (за исключением синтаксиса, но тут сами разбирайтесь если нужен другой компилятор).
Вопросами встраивания в другие языки заниматься не буду, но немного попозже покажу как перейти от .exe к .dll, которую уже можно использовать где угодно (кроме PARI/GP). Это не всегда оптимально по скорости, но зато универсально. Я согласен что писать всю прогу на асме глупость, надо лишь критические места, но смешивать обучение ещё и С или Питону - не-не-не.
GAA, про сравнение SSE и AVX есть
отдельная близкая тема, готов в ней отвечать на вопросы. Постепенно может и здесь (в новой теме) к этому придём, но это совсем не первые шаги. Вопрос оптимизации - вообще один из сложнейших (вместе с многозадачностью и надёжностью и ещё чем-нибудь), (посмотрите
вот тут мой офтоп), это совсем не первые шаги. Хотя упоминать отдельные моменты буду конечно сразу же.
Есть сомнения, что на ассемблере будет заметно быстрее, чем на с++.
Пойтиде в соседнюю тему
«Приемы программирования SSE/AVX [Обмен опытом]» и попытайтесь любой кусок кода что я приводил на AVX2 получить из C++ без инстриктов и встроенного асм. Успехов! Там кстати и замеры скорости есть.
Об AVX, AVX2, AVX-512 есть немного в книге
Куссвюрм Д. Профессиональное программирование на ассемблере x64 с расширениями AVX, AVX2 и AVX-512, 2021.
Об ней
уже говорил.
Короче, кто хочет принять участие в качестве изучающего, отпишитесь плиз готовы ли штудировать (хотя бы бегло) какую-то толстую книгу, чтобы не пересказывать много текста (а коротко я не умею), а лишь отсылать к ней. Какую именно - выберу потом, не помню смотрел ли даже все указанные выше.
-- 15.01.2024, 15:58 --Да, по срокам.
Думаю чтобы сделать что-то простенькое (факториал, решето Эратосфена, медленную проверку на простоту небольших чисел) самому понадобится неделя-две.
Что-то практически полезное (но совсем не оптимальное!) - пара месяцев. Как и подправить готовый чужой код под свои несложные запросы. И начать понимать что же (и главное почему так) пишут другие.
И тогда же проглянет через "туман войны"(с)игры величина той горы на которую собрался влезть (или которую перелопатить).
Чтобы написать самому что-то
реально эффективное (типа тех кусочков как в указанной выше теме про SSE/AVX) - ну, полгода, наверное ... Программистом не станете, но решить конкретную
вычислительную задачу более-менее эффективно - пожалуй.