Натрий (по характеристикам он хуже) хорош, если ощутимо выгоднее лития. Он ощутимо выгоднее лития, если литий дорожает почти на порядок и становится заметен в стоимости батареи. Литий это сделал, а потом подешевел обратно почти на порядок. Вроде так.
Ну, желание поскромнее - чтобы DRAM дешевела как дешевела флеш-память за счёт наращивания слоёв на одном кристалле. 2014 - первые SSD на 3D V-NAND. 20?? - первые плашки на 3D X-DRAM или чём-то похожем.
Да, так что по его методике отката на 15 лет не будет, будет использование DDR4 или DDR3 для продолжения графика.
Точка в начале 2011 это 2x 2GB DIMM DDR3-1333 в Newegg. Последняя точка в середине 2024 это 2x 32GB DIMM DDR4-3600 там же.
В 2017 было ответвление здесь https://hblok.net/blog/storage/: Following McCallum’s example, I’ve continued to use the “lowest priced [items] for which I could find prices at the time”.
Но оригинальные данные John C. McCallum (jcmit.net) обновлял дольше и перестал обновлять примерно в 77 лет с завещанием: I must pass the work of keeping the data updated to the next generation.
Это покупатель заинтересован, чтобы ёмкость увеличилась, а PCIe-слотов занимала столько же. И перефасовать терабайты нельзя, если большая упаковка на витрине залежится.
8ТБ в среднем продаются с наценкой относительно 4+4. Samsung в 9100 PRO просит +40%.
Инфляция не важна на фоне выкупания ~половины производимой памяти на ближайшие несколько лет под Манхэттенский проект 2.
Но если отвлечься и думать про инфляцию, то в компьютерном железе «дорожает, но зато медленнее инфляции» было бы очень слабым утешением. Это как сказать, что ничего нового больше не будет. То есть будет, но как с холодильниками и микроволновками, а не как со слоёной флеш-памятью в 2014.
Из одной статистики получалось, что если (дешёвая, по низу рынка?) DRAM-память вырастет до 160 долларов за 16 ГБ, то это означает откат на 15 лет в прошлое.
но один из указателей можно привести к числу (преобразовать дату в количество дней) и тогда он в сумме рассматривается как смещение
это смещение должно быть относительно другого указателя (другой даты) из этих двух, но оно относительно нуля (1 января 1 н.э.), поэтому смысла в сумме нет
Each of the operators < (less than), > (greater than), <= (less than or equal to), and >= (greater than or equal to) shall yield 1 if the specified relation is true and 0 if it is false. The result has type int.
И чем скомпилированный код будет отличаться
По задумке: будет отличаться отсутствием ветвления (jump'а) => нет работы для предсказателя переходов => не может быть ошибки предсказания перехода => результат быстрее, чем при ошибке предсказания (и стабильный по скорости, если нас волнует утечка информации).
В реальности: GCC на -O0 (!!) распознаёт за этими 5 операциями x < y ? x : y, которое тоже компилируется без ветвления в cmov (ветвление vs. предикация). https://godbolt.org/z/51YWe7c1s
Чтобы код из статьи "заработал", нужно оружие сильнее, чем -O0:
Пища для ума от цикла статей: что иногда можно найти под капотом компилятора и почему так нельзя делать вручную.
В соседней ветке разговор ушёл куда-то в сторону "стандартный Си местами даёт меньше, чем LLVM (если другой язык завяжется на возможности LLVM, он автоматически окажется впереди)".
Здесь пришли к тому, что стандарту языка нет дела до низкоуровневых возможностей и надо завязываться на расширения компилятора, чтобы попытаться получить желаемое.
Вот самый настоящий алармизм есть у экологов касательно сведения с орбиты (влияние на океаны и т.д.). Они за километр обходят вопрос "каков вклад космонавтики относительно других загрязнителей" и, видимо, из корыстных соображений.
упадёт на Луну большинство сгорит в атмосфере улетит неизвестно куда случайно забросить гайки
Ну кто так бочки с гайками взрывает. Это больше похоже на нервное "запомни, таких игр не существует, тебе ещё два курса проучиться две звездные системы колонизировать" (башорг #395556). Начать с ретроградного аналога геостационарной орбиты, его в учебниках истории станут называть "первое кольцо Земли"...
Не факт. Зависит от реализации. Может любое ненулевое число дать.
Эту скрепу отняли у сишников в C23 (предложения N2218&N2330 родом из C++ (P0907R4&P1236R1)).
The sign representation defined in this document is called two’s complement. Previous editions of this document (specifically ISO/IEC 9899:2018 and prior editions) additionally allowed other sign representations.
Тоже зависит от реализации
Эту (отсутствие гарантии sign extension) любовно оставили, обрезав предложение при портировании из C++. Это значит, что у комитета была на уме некая архитектура без arithmetic shift right, где будет поддерживаться C23 (вместе с его плюсово-шаблонными _BitInt'ами), но не будет поддерживаться C++20. Достаточно важная архитектура, чтобы избегать там медленной эмуляции инструкции. Достаточно заметная, потому что в компиляторах под неё задокументировано поведение (Implementation-Defined обязует), необычное. Но называть архитектуру они не станут. А может и не было её... но сама идея, что такую архитектуру можно придумать (черновое название - ds9k) и периодически про неё напоминать, сама идея прекрасна.
Милорд, они уже бегут на Rust, Zig и GNU C? Не надо бояться, все не убегут!..
А ещё бывает, что компилятор вроде и умеет в __builtin_parity, но реализовано оно медленнее, потому что готовой инструкции под это дело в целевом процессоре нет. Попробуйте в этом godbolt-сниппете выбрать, скажем, 32-х битную архитектуру PPC (power gcc 15.0.2). Там компилятор вообще сгенерит немаленький такой код, да ещё и вызывающий встроенную функцию (__paritysi2); это не будет быстро.
Он генерирует вызов функции из поста. Пока что разница в том, что на godbolt он не инлайнится и надо смотреть дальше у себя, если нужна производительность на той платформе. Это же и в других местах повторится, пользы от решения проблем с (?) LTO будет больше, чем велосипедостроения.
Это расширение, а не часть стандарта языка, так что есть случаи, когда использовать такое — не комильфо
Лучше на него сначала наткнуться, GCC и LLVM - это тоже стандарты, которые зачастую важнее бумажного. Хотел сказать, что к тому времени стандарт могут и поправить, но это уже сделали в C23 (__builtin_popcount→stdc_count_ones_ui).
К биту чётности (и, наверное, много где ещё) не хватает предупреждения, что не надо пытаться быть умнее компилятора - он имеет __builtin_parity...__builtin_parityll и знает про Parity-Flag-для-младшего-байта в вашем процессоре и с какой микроархитектуры доступна popcnt. https://godbolt.org/z/qdo7x435f
К ошибке в макросах - что о них всё рассказывают правила SEI CERT C. Что опасно нарушать, что нет, как исправлять - 13 правил.
«dma bypass» (программный метод обхода защитных механизмов).
Лучше часть убрать, она заменяется на printf("%p\n", bar); (или printf("0x%"PRIxPTR"\n", (uintptr_t)bar);) и пропадают ошибки (лишний volatile, sizeof считает размер указателя на буфер, а не буфера, указатель на функцию с такой-то сигнатурой где нужен просто указатель, разбор на отдельные байты сталкивает нас с endianness'ом железа, а так как повсюду little-endian, то выводится неправильно).
И, кажется, его странно желать как новую фичу вместо какого-либо общего механизма. User-defined префиксы/суффиксы к строковым литералам, например.
В D шаблоны могут играть префиксов (some_template!"string literal") и uniform call syntax позволяет записывать вызов функции "как суффикс" ( "string literal".foo() или "string literal".foo с учётом, что "any function can be used like a property").
Главное, чтобы был прорыв (твёрдый электролит?)
а не скучная эволюция как в транзисторах
Натрий (по характеристикам он хуже) хорош, если ощутимо выгоднее лития. Он ощутимо выгоднее лития, если литий дорожает почти на порядок и становится заметен в стоимости батареи. Литий это сделал, а потом подешевел обратно почти на порядок. Вроде так.
График
Ну, желание поскромнее - чтобы DRAM дешевела как дешевела флеш-память за счёт наращивания слоёв на одном кристалле.
2014 - первые SSD на 3D V-NAND.
20?? - первые плашки на 3D X-DRAM или чём-то похожем.
Да, так что по его методике отката на 15 лет не будет, будет использование DDR4 или DDR3 для продолжения графика.
Точка в начале 2011 это 2x 2GB DIMM DDR3-1333 в Newegg.
Последняя точка в середине 2024 это 2x 32GB DIMM DDR4-3600 там же.
В 2017 было ответвление здесь https://hblok.net/blog/storage/: Following McCallum’s example, I’ve continued to use the “lowest priced [items] for which I could find prices at the time”.
Но оригинальные данные John C. McCallum (jcmit.net) обновлял дольше и перестал обновлять примерно в 77 лет с завещанием: I must pass the work of keeping the data updated to the next generation.
Это покупатель заинтересован, чтобы ёмкость увеличилась, а PCIe-слотов занимала столько же. И перефасовать терабайты нельзя, если большая упаковка на витрине залежится.
8ТБ в среднем продаются с наценкой относительно 4+4. Samsung в 9100 PRO просит +40%.
Каких металлов?..
Инфляция не важна на фоне выкупания ~половины производимой памяти на ближайшие несколько лет под Манхэттенский проект 2.
Но если отвлечься и думать про инфляцию, то в компьютерном железе «дорожает, но зато медленнее инфляции» было бы очень слабым утешением. Это как сказать, что ничего нового больше не будет. То есть будет, но как с холодильниками и микроволновками, а не как со слоёной флеш-памятью в 2014.
Не про флеш, но:
Из одной статистики получалось, что если (дешёвая, по низу рынка?) DRAM-память вырастет до 160 долларов за 16 ГБ, то это означает откат на 15 лет в прошлое.
Картинка
Нандий (nandium), драмий...
Ну, аналогия с указателем хорошо работает.
складывать их запрещено правилами языка
но один из указателей можно привести к числу (преобразовать дату в количество дней) и тогда он в сумме рассматривается как смещение
это смещение должно быть относительно другого указателя (другой даты) из этих двух, но оно относительно нуля (1 января 1 н.э.), поэтому смысла в сумме нет
Вариант с diff и расширением знака на все биты:
поиск максимума:
Clang распутывает в
cmovна -O1.GCC на любых уровнях не справляется и сохраняет алгоритм.
поиск минимума: оба не распутывают
https://godbolt.org/z/e4b63vd49
Она таки всегда вела себя одинаково:
Each of the operators < (less than), > (greater than), <= (less than or equal to), and >= (greater than or equal to) shall yield 1 if the specified relation is true and 0 if it is false. The result has type int.
По задумке: будет отличаться отсутствием ветвления (jump'а) => нет работы для предсказателя переходов => не может быть ошибки предсказания перехода => результат быстрее, чем при ошибке предсказания (и стабильный по скорости, если нас волнует утечка информации).
В реальности: GCC на -O0 (!!) распознаёт за этими 5 операциями
x < y ? x : y, которое тоже компилируется без ветвления вcmov(ветвление vs. предикация).https://godbolt.org/z/51YWe7c1s
Чтобы код из статьи "заработал", нужно оружие сильнее, чем -O0:
GNU extended asm с подобранным ограничением
Весь код и asm - на godbolt.
Пища для ума от цикла статей: что иногда можно найти под капотом компилятора и почему так нельзя делать вручную.
В соседней ветке разговор ушёл куда-то в сторону "стандартный Си местами даёт меньше, чем LLVM (если другой язык завяжется на возможности LLVM, он автоматически окажется впереди)".
Здесь пришли к тому, что стандарту языка нет дела до низкоуровневых возможностей и надо завязываться на расширения компилятора, чтобы попытаться получить желаемое.
Вот самый настоящий алармизм есть у экологов касательно сведения с орбиты (влияние на океаны и т.д.). Они за километр обходят вопрос "каков вклад космонавтики относительно других загрязнителей" и, видимо, из корыстных соображений.
https://www.grunge.com/1090709/how-space-debris-is-affecting-the-worlds-oceans/
Гидразин - канцероген. При температурах сведения он распадётся... но сам факт!
Ну кто так бочки с гайками взрывает. Это больше похоже на нервное "запомни, таких игр не существует, тебе ещё
два курса проучитьсядве звездные системы колонизировать" (башорг #395556). Начать с ретроградного аналога геостационарной орбиты, его в учебниках истории станут называть "первое кольцо Земли"...* чем от велосипедостроения
* лучше сначала натолкнуться на такой случай, прежде чем действовать
Эту скрепу отняли у сишников в C23 (предложения N2218&N2330 родом из C++ (P0907R4&P1236R1)).
The sign representation defined in this document is called two’s complement. Previous editions of this document (specifically ISO/IEC 9899:2018 and prior editions) additionally allowed other sign representations.
Эту (отсутствие гарантии sign extension) любовно оставили, обрезав предложение при портировании из C++. Это значит, что у комитета была на уме некая архитектура без arithmetic shift right, где будет поддерживаться C23 (вместе с его плюсово-шаблонными _BitInt'ами), но не будет поддерживаться C++20. Достаточно важная архитектура, чтобы избегать там медленной эмуляции инструкции. Достаточно заметная, потому что в компиляторах под неё задокументировано поведение (Implementation-Defined обязует), необычное. Но называть архитектуру они не станут. А может и не было её... но сама идея, что такую архитектуру можно придумать (черновое название - ds9k) и периодически про неё напоминать, сама идея прекрасна.
Милорд, они уже бегут на Rust, Zig и GNU C? Не надо бояться, все не убегут!..
Он генерирует вызов функции из поста. Пока что разница в том, что на godbolt он не инлайнится и надо смотреть дальше у себя, если нужна производительность на той платформе. Это же и в других местах повторится, пользы от решения проблем с (?) LTO будет больше, чем велосипедостроения.
Лучше на него сначала наткнуться, GCC и LLVM - это тоже стандарты, которые зачастую важнее бумажного. Хотел сказать, что к тому времени стандарт могут и поправить, но это уже сделали в C23 (
__builtin_popcount→stdc_count_ones_ui).Если гнаться за непротиворечивостью, то
char const * s1, чтобы тип легко читался (указатель на... const... char).Но непротиворечивость - это не про Си и у неё есть цена.
Цена непротиворечивости в D, наглядно (размерность читается справа налево, а индексы слева направо).
К биту чётности (и, наверное, много где ещё) не хватает предупреждения, что не надо пытаться быть умнее компилятора - он имеет __builtin_parity...__builtin_parityll и знает про Parity-Flag-для-младшего-байта в вашем процессоре и с какой микроархитектуры доступна popcnt. https://godbolt.org/z/qdo7x435f
К ошибке в макросах - что о них всё рассказывают правила SEI CERT C. Что опасно нарушать, что нет, как исправлять - 13 правил.
Нет, это
Лучше часть убрать, она заменяется на
printf("%p\n", bar);(илиprintf("0x%"PRIxPTR"\n", (uintptr_t)bar);) и пропадают ошибки (лишний volatile, sizeof считает размер указателя на буфер, а не буфера, указатель на функцию с такой-то сигнатурой где нужен просто указатель, разбор на отдельные байты сталкивает нас с endianness'ом железа, а так как повсюду little-endian, то выводится неправильно).И, кажется, его странно желать как новую фичу вместо какого-либо общего механизма. User-defined префиксы/суффиксы к строковым литералам, например.
В D шаблоны могут играть префиксов (
some_template!"string literal") и uniform call syntax позволяет записывать вызов функции "как суффикс" ("string literal".foo()или"string literal".fooс учётом, что "any function can be used like a property").