The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Проект LLVM развивает средства для безопасной работы с буферами в C++, opennews (?), 06-Окт-22, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


10. "Проект LLVM развивает средства для безопасной работы с буфер..."  +7 +/
Сообщение от Аноним (10), 06-Окт-22, 11:23 
Будет короче тормозить еще больше из за постоянных проверок. Голые указатели придумали не просто так. А потому, что проги на асме работали в 10 раз быстрее, чем всякие проги на басике, но хотелось же писать на ЯВУ, а не убивать мозг проблемами аллокешена регистров. Есть простая и тупая вещь. В других языках типа Delphi/Lazarus можно включить проверку границ в отладочном режиме. Есть так же клевые менеджеры памяти типа FastMM, которые в FullDebugMode отслеживают все возможные проблемы с утечками памяти и use-after-free. Это просто Сишники привыкли страдать. А еще говорят, что их язык лучший в мире, ога.
Ответить | Правка | Наверх | Cообщить модератору

16. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от Анусимусemail (?), 06-Окт-22, 11:37 
сиплюсплюсовцы же
Ответить | Правка | Наверх | Cообщить модератору

21. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от Аноним (10), 06-Окт-22, 11:49 
А еще ассерты есть. И вообще работать с буфферами неявного размера, как это принято в Сях - это плохая идея. Короче это называется культура программирования. Если нанимать индусов на аутсорсе за копейки, то никакие ухищрения не помогут. А в итоге ради так называемой безопасности производительность нативного кода опустят до уровня скряптов. Ну и зачем тогда вообще нужен нативный код? Давайте всех посадим на питон.
Ответить | Правка | Наверх | Cообщить модератору

23. "Проект LLVM развивает средства для безопасной работы с буфер..."  +3 +/
Сообщение от Аноним (23), 06-Окт-22, 11:54 
C и C++ это разные языки.
Ответить | Правка | Наверх | Cообщить модератору

131. "Проект LLVM развивает средства для безопасной работы с буфер..."  +1 +/
Сообщение от Аноним (129), 06-Окт-22, 19:20 
Не может быть!
Ответить | Правка | Наверх | Cообщить модератору

265. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от Аноним (265), 12-Окт-22, 14:52 
> А еще ассерты есть. И вообще работать с буфферами неявного размера, как
> это принято в Сях - это плохая идея.

Си разный бывает. В каком-нибудь MISRA например много чего НЕ принято. И это как бы си но как бы здорово другой по надежности если на эти правила не забивать.

Всякие void* - ой, вы не указали намерения, как это проверять? Статический анализ в пролете.
Туда же массивы неизвестного размера и прочий хлам, где намерения не декларированы.
Математика над указателями это вообще зло. Реально легитимных причин это делать есть минимум, типа реализации своего memcpy() или декомпрессора какого. В более приземленном коде это намекает что кодер занимается чем-то не тем. Особенно если в выражение входят разные указатели, нормальные анализаторы на это жутко воют и правильно делают.

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

Ответить | Правка | К родителю #21 | Наверх | Cообщить модератору

25. "Проект LLVM развивает средства для безопасной работы с буфер..."  +3 +/
Сообщение от _kp (ok), 06-Окт-22, 12:03 
Проверка диапазона не ресурсоёмкая, и на некоторых платформах даже аппаратная.

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

Ответить | Правка | К родителю #10 | Наверх | Cообщить модератору

67. "Проект LLVM развивает средства для безопасной работы с буфер..."  +1 +/
Сообщение от none7 (ok), 06-Окт-22, 14:30 
Не бывает бесплатных проверок, даже за защищённый режим процессора с его виртуальной памятью приходится платить свою цену, реальный режим реально быстрее. У x86 так же есть инструкция bound для проверки соответствия указателя определённому диапазону, но естественно времени она занимает столько же как и пара cmp+j[ab], хотя реализована аппаратнее некуда. Проверки данных по одной границе при изменении оказались дешевле и инструкцию выбросили на свалку истории. Дешевле одной проверки только отсутствие проверки во время выполнения, например мы можем быть уверены, что в результате операции i & 255, i не выйдет за пределы массива длиной 256 байт. Компиляторы Rust и Ada вроде как специализируются на обеспечении таких гарантий и должны бы быть быстрее компиляторов Си... должны бы быть.
Проверки это вещь столь бесплатная, что у gcc даже есть флаг -funroll-loops, который разворачивает циклы так, чтобы уменьшить число проверок.
Ответить | Правка | Наверх | Cообщить модератору

73. "Проект LLVM развивает средства для безопасной работы с буфер..."  –3 +/
Сообщение от n00by (ok), 06-Окт-22, 14:52 
> даже за защищённый режим процессора с его виртуальной
> памятью приходится платить свою цену, реальный режим реально быстрее.

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

Ответить | Правка | Наверх | Cообщить модератору

79. "Проект LLVM развивает средства для безопасной работы с буфер..."  +2 +/
Сообщение от none7 (ok), 06-Окт-22, 15:03 
> Столько нового и интересного узнаёшь на Опеннете. То есть виртуальная память иногда
> медленнее, поскольку её размер меньше физической и страницы иногда гоняются на
> медленный накопитель и обратно? На самом деле, в этом случая система
> работает быстрее - потому что в реальном режиме она бы вообще
> не работала из-за нехватки памяти.

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

Ответить | Правка | Наверх | Cообщить модератору

95. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от n00by (ok), 06-Окт-22, 16:21 
Исключение потому так и называется, что генерируется в исключительных случаях. Так то да, если запретить ещё и прерывания, то система будет работать «быстрее», не прерываясь на чтение с накопителя и приём пакетов. А если обрабатывать только 64 байта, то не придётся читать из медленного ОЗУ, поскольку хватит линейки кеша. Только почему-то мало кому приходит в голову «оптимизировать» всё это.
Ответить | Правка | Наверх | Cообщить модератору

102. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от Аноним (102), 06-Окт-22, 16:34 
> Так то да, если запретить ещё и прерывания, то система будет работать «быстрее»,
> не прерываясь на чтение с накопителя и приём пакетов.

Вот кстати в голодные времена провайдеры вместо Cisco использовали ПК с Linux
и отключали прерывания, чтобы увеличить число пакетов перевариваемых роутером за секунду.

> А если обрабатывать только 64 байта, то не придётся читать из медленного ОЗУ,
> поскольку хватит линейки кеша. Только почему-то мало кому приходит в голову
> «оптимизировать» всё это.

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

Ответить | Правка | Наверх | Cообщить модератору

241. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от n00by (ok), 08-Окт-22, 16:01 
>> Так то да, если запретить ещё и прерывания, то система будет работать «быстрее»,
>> не прерываясь на чтение с накопителя и приём пакетов.
> Вот кстати в голодные времена провайдеры вместо Cisco использовали ПК с Linux
> и отключали прерывания, чтобы увеличить число пакетов перевариваемых роутером за секунду.

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

>> А если обрабатывать только 64 байта, то не придётся читать из медленного ОЗУ,
>> поскольку хватит линейки кеша. Только почему-то мало кому приходит в голову
>> «оптимизировать» всё это.
> Те кто воюют за оптимизацию работы процессорного кеша в природе водятся это
> факт.

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

Интерпретация:

    $ time echo 5 | refal lambda.ref
    Enter a number:
    120

    real    2m47,046s
    user    2m46,415s
    sys     0m0,014s

Скомпилировано Рефал-05

    $ time echo 5 | ./lambda-05
    Enter a number:
    120

    real    3m32,260s
    user    3m30,360s
    sys     0m1,193s

Это на исходнике, который не я писал. На моём и в 5 раз быстрее получилось.

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

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

Ответить | Правка | Наверх | Cообщить модератору

78. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от n00by (ok), 06-Окт-22, 15:00 
> У x86
> так же есть инструкция bound для проверки соответствия указателя определённому диапазону,
> но естественно времени она занимает столько же как и пара cmp+j[ab],
> хотя реализована аппаратнее некуда.

А если посмотреть талмуд, то она делает совсем другое - генерирует исключение #BR — BOUND Range Exceeded. Время её выполнения, надо полагать, Вы дадите в ответе на моё сообщение?

Ответить | Правка | К родителю #67 | Наверх | Cообщить модератору

81. "Проект LLVM развивает средства для безопасной работы с буфер..."  +1 +/
Сообщение от none7 (ok), 06-Окт-22, 15:06 
> А если посмотреть талмуд, то она делает совсем другое - генерирует исключение
> #BR — BOUND Range Exceeded. Время её выполнения, надо полагать, Вы
> дадите в ответе на моё сообщение?

Она даёт исключение при выходе за границы проверки, а не всегда.

Ответить | Правка | Наверх | Cообщить модератору

93. "Проект LLVM развивает средства для безопасной работы с буфер..."  –1 +/
Сообщение от n00by (ok), 06-Окт-22, 16:14 
Что бы «естественно времени она занимает столько же как и пара cmp+j[ab]» имело силу, хорошо бы написать времена для обоих случаев. А эти команды даже делают разное.
Ответить | Правка | Наверх | Cообщить модератору

96. "Проект LLVM развивает средства для безопасной работы с буфер..."  +1 +/
Сообщение от Аноним (102), 06-Окт-22, 16:25 
> Что бы «естественно времени она занимает столько же как и пара cmp+j[ab]»
> имело силу, хорошо бы написать времена для обоих случаев. А эти
> команды даже делают разное.

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

Ответить | Правка | Наверх | Cообщить модератору

101. "Проект LLVM развивает средства для безопасной работы с буфер..."  –1 +/
Сообщение от n00by (ok), 06-Окт-22, 16:33 
> Так, что сравнивать
> нужно ситуации когда выхода за пределы массива нет.

Так для этого надо найти старый тадмуд, где указано время исполнения BOUND. Я смутно припоминаю, что она дико медленная, как и все сложные инструкции. Но не я делал заявление на тему «естественно столько же», так что тут есть кому искать тот талмуд. :)

Ответить | Правка | Наверх | Cообщить модератору

105. "Проект LLVM развивает средства для безопасной работы с буфер..."  +2 +/
Сообщение от Аноним (102), 06-Окт-22, 16:42 
> Но не я делал заявление на тему «естественно столько же»,
> так что тут есть кому искать тот талмуд. :)

Этот талмуд идёт в комплекте с masm32 и он у меня под рукой
bound - 7 тактов на 486
cmp reg, mem - 2 такта
Jxx при пропуске прыжка - 1 такт
Ой, bound даже немного медленнее.

Ответить | Правка | Наверх | Cообщить модератору

164. "Проект LLVM развивает средства для безопасной работы с буфер..."  +1 +/
Сообщение от Аноним (129), 07-Окт-22, 02:37 
> на 486

Сейчас какой год идёт? Не, не так... Какой сейчас век?

Ответить | Правка | Наверх | Cообщить модератору

170. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от none7 (ok), 07-Окт-22, 04:18 
> Сейчас какой год идёт? Не, не так... Какой сейчас век?

Да без разницы какой год. Основа вычислительного блока в процессорах Intel не меняется. Просто самих блоков стало больше и в местах где можно параллелить инструкции, процессор параллелит. Хотя да, цепочку cmp, ja, cmp, jb можно за счёт спекулятивного выполнения ужать до тактов cmp, ja, если перехода по Jxx не будет. Но вот если будет, то процессор неизвестное количество тактов потратит на откат состояния.

Ответить | Правка | Наверх | Cообщить модератору

242. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от n00by (ok), 08-Окт-22, 16:05 
>> Сейчас какой год идёт? Не, не так... Какой сейчас век?
> Да без разницы какой год. Основа вычислительного блока в процессорах Intel не
> меняется. Просто самих блоков стало больше и в местах где можно
> параллелить инструкции, процессор параллелит. Хотя да, цепочку cmp, ja, cmp, jb
> можно за счёт спекулятивного выполнения ужать до тактов cmp, ja, если
> перехода по Jxx не будет. Но вот если будет, то процессор
> неизвестное количество тактов потратит на откат состояния.

Откат будет, внезапно, в случае ошибки в программе! Что Вы там собрались оптимизировать при выходе за пределы буфера?

Ответить | Правка | Наверх | Cообщить модератору

269. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от Аноним (-), 12-Окт-22, 15:46 
> Да без разницы какой год. Основа вычислительного блока в процессорах Intel не меняется.

Ага, конечно. Интел не настолько дно в разработках.

Ответить | Правка | К родителю #170 | Наверх | Cообщить модератору

274. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от none7 (ok), 12-Окт-22, 16:32 
> Ага, конечно. Интел не настолько дно в разработках.

У них есть специальная инструкция rdtsc которой можно узнать, сколько тактов занимает та или иная инструкция или блок инструкций. Если работать только с регистрами или с кешем первого уровня, то число тактов на инструкцию совпадает с 486 процессором. Просто кеш стал больше, число ALU стало больше, а конвееры стали хитрее. Наоборот Intel создала RISC процессор под своим CISC процессором, чтобы разбить сложные инструкции на несколько маленьких и примитивных, что позволяет им чуть лучше гнать частоты, так как на нынешнем уровне скорость распространения электрического тока от тактового генератора и до конца каждой используемой инструкции, уже имеет значение.
Хотя да, это можно считать за изменение, но число тактов не уменьшилось уж точно.

Ответить | Правка | Наверх | Cообщить модератору

275. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от n00by (ok), 13-Окт-22, 10:27 
>> Ага, конечно. Интел не настолько дно в разработках.
> У них есть специальная инструкция rdtsc которой можно узнать, сколько тактов занимает
> та или иная инструкция или блок инструкций.

В действительности rdtsc читает time stamp counter, и есть нюанс:

The RDTSC instruction is not a serializing instruction. It does not necessarily wait until all previous instructions
have been executed before reading the counter. Similarly, subsequent instructions may begin execution before the
read operation is performed.

Время одной инструкции измерить невозможно. В лучшем случае была симуляции конвейера в AMD Code Analyst, но в актуальной uProf такой функциональности нет, как и в инструментах Intel.

> Если работать только с
> регистрами или с кешем первого уровня, то число тактов на инструкцию
> совпадает с 486 процессором.

Потрудитесь подтвердить цитатой официальной документации, или прекратите генерировать удивительные гипотезы.

Ответить | Правка | К родителю #274 | Наверх | Cообщить модератору

243. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от n00by (ok), 08-Окт-22, 16:23 
>> на 486
> Сейчас какой год идёт? Не, не так... Какой сейчас век?

Да даже для того времени утверждение «времени она занимает столько же» -- неверно, сложите такты. :) А кто скажет «2+1 + 2+1 это почти 7» - тот пусть идёт читает Генри Уоррена младшего, главу 4.1.

Ответить | Правка | К родителю #164 | Наверх | Cообщить модератору

240. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от n00by (ok), 08-Окт-22, 15:51 
>> Но не я делал заявление на тему «естественно столько же»,
>> так что тут есть кому искать тот талмуд. :)
> Этот талмуд идёт в комплекте с masm32 и он у меня под
> рукой
> bound - 7 тактов на 486
> cmp reg, mem - 2 такта
> Jxx при пропуске прыжка - 1 такт

Данные по cmp и Jxx неактуальны для современного железа. У cmp латентность 1, а пропускная способность 0,25 или 0,33.

> Ой, bound даже немного медленнее.

То есть согласно даже тем данным, в № 67 написана, мягко говоря, неправда, поскольку опирается на ложное утверждение:

Не бывает бесплатных проверок, даже за защищённый режим процессора с его виртуальной памятью приходится платить свою цену, реальный режим реально быстрее. У x86 так же есть инструкция bound для проверки соответствия указателя определённому диапазону, но естественно ***времени она занимает столько же как и пара cmp+j[ab]***, хотя реализована аппаратнее некуда.

Ответить | Правка | К родителю #105 | Наверх | Cообщить модератору

89. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от Аноним (89), 06-Окт-22, 15:56 
В защищенном режиме много всякой мути, которая в теории должна жутко тормозить. Виртуальная память, переключение контекстов и т.д. В современных процах все это решается за счет распараллеливания. Т.е. проблему по сути закидывают шапками. Это когда тебе тех процесс позволяет клепать сколько угодно транзисторов, так что можно параллельно просчитывать 100500 инструкций вперед при over9000 ветвлениях. Другое дело, что расплатой за это является возможность атак по сторонним каналам. Так что, как сказал Мэт Дэймон, да, да...
Ответить | Правка | К родителю #67 | Наверх | Cообщить модератору

98. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от Аноним (98), 06-Окт-22, 16:29 
Так чтож, теперь отказаться от защищённого режима? Привет, эпоха DOS! Сторонние каналы не требуются, получай достпуп к любым соседним процессам сколько хочешь!
Ответить | Правка | Наверх | Cообщить модератору

103. "Проект LLVM развивает средства для безопасной работы с буфер..."  –1 +/
Сообщение от n00by (ok), 06-Окт-22, 16:35 
> Привет, эпоха DOS! Сторонние каналы
> не требуются, получай достпуп к любым соседним процессам сколько хочешь!

И правда, быстрее же. =)

Ответить | Правка | Наверх | Cообщить модератору

136. "Проект LLVM развивает средства для безопасной работы с буфер..."  +1 +/
Сообщение от Tita_M (ok), 06-Окт-22, 20:08 
Существует архитектура Mill в которой нет виртуальной памяти и много чего другого, что есть в классических процессорах усложняющих их и тем не менее многие FLOSS программы и операционки корректно работают на ней после компиляции и  практически без изменений.
Ответить | Правка | Наверх | Cообщить модератору

218. "Проект LLVM развивает средства для безопасной работы с буфер..."  +1 +/
Сообщение от Аноним (218), 07-Окт-22, 18:11 
Но в реальном мире, кроме FOSS, ещё браузер загружает страницы с тоннами стороннего JS, которому наплевать на корректное сосуществование с другими просессами в архитектуре без виртуальной памяти.
Ответить | Правка | Наверх | Cообщить модератору

272. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от Аноним (-), 12-Окт-22, 16:10 
> Но в реальном мире, кроме FOSS, ещё браузер загружает страницы с тоннами
> стороннего JS, которому наплевать на корректное сосуществование с другими просессами в
> архитектуре без виртуальной памяти.

И при всем этом там приколы типа ROWHAMMER могут работать. Даже оттуда. Который как оказалось даже в DDR4 все же вылезает в определенных условиях. Сюрприз!

Ответить | Правка | Наверх | Cообщить модератору

244. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от n00by (ok), 08-Окт-22, 16:33 
А ещё есть компьютер Спектрум. Самый быстрый там вариант - самомодифицирующийся код. Но реальный мир - это немного другое.
Ответить | Правка | К родителю #136 | Наверх | Cообщить модератору

270. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от Аноним (-), 12-Окт-22, 15:47 
> А ещё есть компьютер Спектрум. Самый быстрый там вариант - самомодифицирующийся код.
> Но реальный мир - это немного другое.

В реальном мире вооон те игроделы бьют рекорды по скорости декомпресии vs плотность сжатия используя "data to code transformation". Из данных генерится код, это для их случая самый быстрый способ распаковки. Это нишевой случай но так можно было.

Ответить | Правка | Наверх | Cообщить модератору

276. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от n00by (ok), 13-Окт-22, 10:54 
Можно было, конечно, осталось посчитать, сколько играли в тот «Дум» на Спектруме и подумать, почему оно появилось сильно позже чем всякие Dyzzy и почему сорцы всех этих шедевров написаны под PC, который маст дай. ;)
Ответить | Правка | Наверх | Cообщить модератору

192. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от _kp (ok), 07-Окт-22, 11:00 
> В защищенном режиме много всякой мути, которая в теории должна жутко тормозить.

На счёт "жутко тормозить" это уже слишком безграмотно.
Если писать эмулятор 386+, то конечно, софтовая эмуляция защищенного режима требует каких то ресурсов, но не много. А по сравнению с иными издержками, и вовсе не беспокоит. Даже в софтовом виде, без предсказаний и спекулятивных операций.

Так же, "грамотно" написанное ПО не спасает никакой самый быстрый процессор.
Примеры? Неповоротливые игры на Unity, числодроюильные алгоритмы на Питоне, извращения с компиляцией в Ардуино.
Причем, тут и i10 10GHz принципиально не поможет.
А проверки диапазонов, есть много где, и почему то, рейтинг тормозного ПО они не занимают.

Про инструкцию bound сказано верно. Оптимизированный алгоритм, с учетом архитектуры, часто побеждает, то что предусмотрено разработчиками.
Пристномамятная фича - в z80 добавили инструкцию копирования памяти, стало быстрее, чем на 8080, но с учетом специфики z80 применяли програмное копирование, ибо на 90%(!) быстрее работало, чем аппаратное.
Это совсем разгромный пример, а с меньшей разницей в скорости, как грязи.


Ответить | Правка | К родителю #89 | Наверх | Cообщить модератору

245. "Проект LLVM развивает средства для безопасной работы с буфер..."  +1 +/
Сообщение от n00by (ok), 08-Окт-22, 16:40 
> Пристномамятная фича - в z80 добавили инструкцию копирования памяти, стало быстрее, чем
> на 8080, но с учетом специфики z80 применяли програмное копирование, ибо
> на 90%(!) быстрее работало, чем аппаратное.

Ну про 90% Вы загнули. LDIR - 21 такт на 1 байт. LDI - 16. Серия последних немного выигрывала по скорости за счёт раздутия кода. Быстрое копирование, насколько помню, выполнялось сериями POP+PUSH - 10+11 на 2 байта. Где-то вдвое быстрее, без учёта дополнительных инструкций. Хотя, может я что-то забыл, да и вариант с генерацией 100 Кб кода для заполнения 6 Кб экрана не рассматриваю.

Кстати, в IA32 с была похожая ситуация rep movs, но ныне она ускорена аппаратно с учётом нюансов работы с кешем.

Ответить | Правка | Наверх | Cообщить модератору

252. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от _kp (ok), 09-Окт-22, 00:23 
Верно.
Вдвое быстрее, плюс издержки, это и есть примерно на 90% быстрее. Прирост зависит от размеров портянки из push/pop в реализации memcpy(). Больше 32..64 пар редкость.

Про rep movs тоже в курсе.
Я как коллекционер старого железа, сконен и что под них иногда написать, и эмуляторы пишу тоже.

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

Ответить | Правка | Наверх | Cообщить модератору

254. "Проект LLVM развивает средства для безопасной работы с буфер..."  +1 +/
Сообщение от n00by (ok), 09-Окт-22, 15:58 
> Верно.
> Вдвое быстрее, плюс издержки, это и есть примерно на 90% быстрее.

Действительно. Как обычно, я налажал с арифметикой.

> Прирост
> зависит от размеров портянки из push/pop в реализации memcpy(). Больше 32..64
> пар редкость.
> Про rep movs тоже в курсе.
> Я как коллекционер старого железа, сконен и что под них иногда написать,
> и эмуляторы пишу тоже.
> Удивлен грамотному комментарию, по столь экзотической теме.

Довелось когда-то покодить для Спека. Вот редактор обратно совместимый с SoundTracker https://github.com/STrusov/CPS
Писался для демок, проигрыватель не самый быстрый, но более-менее стабильный по тактам.
Про копирование помню немного, поскольку тогда мы искали пути скроллировать весь экран и перепробовали все комбинации, до каких докопались в чужом коде и додумались сами. В итоге удалось лишь хитростью.

Ответить | Правка | Наверх | Cообщить модератору

257. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от _kp (ok), 10-Окт-22, 10:46 
Благодарю. Взял в коллекцию. Смотрю.
А на Гитхабе меня уже забанили, поэтому ссылками не делюсь.


Ответить | Правка | Наверх | Cообщить модератору

258. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от n00by (ok), 10-Окт-22, 16:34 
Как забанили? Это надо в новости. Тут публика любит, когда кого-то банят. Ну и вроде есть gitflic (что бы изменить там видимость репозитория, надо в службу поддержки написать, как говорят; я не пишу, просто год жду, вдруг заработает).
Ответить | Правка | Наверх | Cообщить модератору

259. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от _kp (ok), 11-Окт-22, 10:34 
> Как забанили? Это надо в новости.

Уже писали про это. Хотя, банили якобы сотрудничавших с подсанкционными организациями, работавших из Крыма, и вроде как не очень много народу. Но, меня то за что? Даже не отвечают причину в отписках.
А вообще, рукописи и репозитории не горят. А кучу чужих добавленных в лайки и форки проектов жалко.

Ответить | Правка | Наверх | Cообщить модератору

261. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от n00by (ok), 11-Окт-22, 14:41 
Если забанили на основании решения властей США - тогда им ничего не стоит указать это в причине (таким образом Микрософт как бы получаются невиновны). Не удивлюсь, что там была ещё опция «стукани на коллегу», и замешаны какие-то неадекваты. Во всяком случае, когда местная шаражка удалила мои репозитории, они точно так же не могли объяснить причину.
Ответить | Правка | Наверх | Cообщить модератору

266. "Проект LLVM развивает средства для безопасной работы с буфер..."  +/
Сообщение от Аноним (-), 12-Окт-22, 15:05 
> Не бывает бесплатных проверок,

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

Ответить | Правка | К родителю #67 | Наверх | Cообщить модератору

195. "Проект LLVM развивает средства для безопасной работы с буфер..."  +1 +/
Сообщение от yet another anonymous (?), 07-Окт-22, 11:12 
> Проверка диапазона не ресурсоёмкая, и на некоторых платформах даже аппаратная.

Звон-то конечно слышали, но откуда он, не разобрались.

Заканчивайте уже тащить слухи про Рабиновича, выигравшего на бегах два миллиона.

Ответить | Правка | К родителю #25 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру