diamond wrote:
Прежде чем переходить к обсуждению утверждения "ядро тормозное", отмечу две вещи по исходному утверждению "возможность разработки на C увеличит скорость работы". Во-первых, даже если считать, что ядро действительно тормозное, первое утверждение отсюда совершенно не следует.
Ну, в принципе, правильно. Тормозной асмовый код C не ускорит.
diamond wrote:
Во-вторых, если заниматься не философствованиями, а конкретными измерениями, то ассемблер заметно выигрывает у си:
http://wasm.ru/forum/viewtopic.php?pid=276576#p276576А если нормальный компилятор взять?
diamond wrote:
Интересно отметить, что характерные отзывы о Колибри как раз наоборот подчёркивают скорость работы системы.
Практически голой системы, наверное.
Кстати, ГУЙ у колибри таки заметно тормозит. XP на виртуалке поотзывчивей колибри будет.
diamond wrote:
Поэтому небольшой ликбез. Регистры по конвейерам никто не распределяет, распределяют переменные по регистрам
Я второй раз не стал слово «распределяет» вставлять. Думал, и так ясно будет, что я имел в виду.
diamond wrote:
и это как раз ассемблерщик делает и сам - выделить часто используемые переменные и выделить под эти часто используемые переменные конкретные регистры несложно и интуитивно делается
А теперь дай вменяемый ответ на вопрос: зачем самому делать то, что делает компилятор на порядки быстрее?
diamond wrote:
С тех пор процессоры ещё поумнели и могут переупорядочивать команды (а точнее, микрооперации, на которые эти команды разбиваются) самостоятельно и выполнять их в том порядке, как им удобно.
Только и при упорядочивании, и при подмене регистров остаются ситуации зависимостей.
diamond wrote:
Более того, у разных процессоров разная микроархитектура, разные возможности конвейеров, так что "шедулинга инструкций", оптимального для всех процессоров, просто не может существовать.
По крайней мере перекомпилить можно с оптимизацией под другую модель )))
И даже, при должном качестве кода, под другую архитектуру. Вот тут ты со своим асмокодом ничего не сможешь в ответ предложить (кроме эмуляции).
diamond wrote:
Даю подсказку: машинный код пары команд xor eax,eax/inc eax в 32-битном режиме есть 33 C0 40 (или, что эквивалентно, 31 C0 40), машинный код команды mov eax,1 есть B8 01 00 00 00.
Ну да. На 2 байта больше. Там с десяток мест такого кода. На целых 20 байт больше будет…
Есть смысл сокращать код на 20 байт? Даю подсказку: чтение идёт посекторно.
diamond wrote:
во-первых, использование статических массивов вместо динамических списков ускоряет ядро
Кроме массивов и списков есть ещё, например, различные деревья. Которые могут ускорить поиск.
Конечно, можно сказать, что массивы небольшие и поиск/добавление занимают не так уж много времени, возможно, даже меньше чем этого времени уходило бы на, скажем, поворот красно-чорного дерева.
Но цена этому — ограничение количества тех или иных структур.
diamond wrote:
во-вторых, это вообще никак не связано со сравнением ассемблера и си.
На C было бы легче это написать. И написали бы, если бы C юзали.