Размер кэша карт в мб что это
Это нормально, что ОС кэширует данные в оперативку. Она всегда может её очистить если не будет хватать для игры и т.д. Как правильно заметили лучше проверить диск.
Я тоже так думал, но тут как-то проскакивало видео, показывающее что есть статтеры в играх при заполненной памяти. Как я понимаю, очистка кэша не мгновенная операция, и если в обычных приложениях это не заметно, то в играх - очень даже. Плюс ОС чистит только необходимое количество памяти, поэтому при следующем запросе снова будет задержка.
.
ЗЫ. В линуксе, кстати, ситуация не лучше - в реалтаймовых приложениях, вроде телефонии, начинается полный пиздец, если вся память ушла под кэш.
Если бы была причина в заполнении памяти, то проблема была бы у 95% геймеров. Какой смысл иметь 16+ гб оперативки, если в неё не кэшировать инфу для ускорения работы. Скорость очистки кэша никак не влияет на игры.
Куда больше вероятность, что проблема связана с HDD где стоят игры.
Скорость очистки кэша никак не влияет на игры.
Освобождение системной памяти не самая дешёвая операция. И в играх, когда время кадра измеряется миллисекундами, это вызывает ощутимую задержку. Посмотрите видео, там всё весьма наглядно показано (единственное что, я бы не стал ставить автоматическую очистку).
(единственное что, я бы не стал ставить автоматическую очистку)
Почему? В видосе гайд именно на авто отчистку.
Очистка кэша нужна только в играх. В остальное время от неё только вред будет.
Комментарий удален по просьбе пользователя
очистка кеша помогла улучшить ситуацию в батле. Но не полностью
Хотя не, не помогло
Комментарий удален по просьбе пользователя
Ага, а мои тапки умнее Гейтса. Хватит тупо обожествлять багованную систему, написанную индусами. Если ты интересовался этой проблемой, то знал бы что в сети полно гайдов решающих проблему статтеров через очистку ОЗУ от кэша.
Комментарий удален по просьбе пользователя
Он отчасти прав, отчасти нет.
Есть некоторые тайтлы, которые зажирают всю оперативу к хренам и не дают её выгружать -> получаем статтеры. Отсюда всякие очистители получили популярность
Комментарий удален по просьбе пользователя ред.
В ac: origins с последним патчем такая проблема. И решилась она установкой в планировщике задач очистки памяти раз в 5 минут. Решение этой проблемы я нашел на руоверах в шапке темы процессоров на сокет ам4. И это помогло. После этого я этой проблемы не встречал.
Проблемы с кэшем в любой операционке, на расчитанной на реалтайм.
в чем тогда может быть проблема стетров?
В одном видео утверждается что очистка кэша помогает со статерами и фризами
Комп новый, хз в чем дело
Игра стоит на ССД, частота ОЗУ 3200
Комментарий удален по просьбе пользователя
Процессор Intel Core i7-10700F OEM
Материнская плата MSI Z490-A PRO
Видеокарта MSI GeForce RTX 2080 Ti VENTUS GP
Блок питания Cougar GX 800W
Оперативная память A-Data XPG SPECTRIX D41 RGB 32 ГБ
1000 ГБ SSD M.2 накопитель A-Data XPG SX8200 Pro
Кулер для процессора Arctic Cooling Freezer 34 eSports
Корпус DEEPCOOL MATREXX 55 MESH ADD-RGB 4F
Проц не тротлится в стресс-тестах
Статеры в сингле даже больше, чем в онлайне
Комментарий удален по просьбе пользователя
да куда там 4к, на 1080p играю
Комментарий удален по просьбе пользователя
в стресс тестах аиды везде температуры нормальные были
Комментарий удален по просьбе пользователя
стоит, темпы ГП и ЦП в норме
Комментарий удален по просьбе пользователя ред.
Комментарий удален по просьбе пользователя ред.
В мафии. Там такой явной проблемы нет
Комментарий удален по просьбе пользователя ред.
Фризит даже первая батла без лучей которая
Комментарий удален по просьбе пользователя
Отключение игрового режима Винды улучшило ситуацию. По крайней мере на одной карте
Комментарий удален по просьбе пользователя ред.
да и так летает. Только со статерами проблема
Комментарий удален по просьбе пользователя
качаю метро и рдр2, на них чекну
Комментарий удален по просьбе пользователя
в метро тоже статтеры есть. Например в самом начале игры есть статтер заметный когда опускается камера, а второй когда Артем спускается в метро и открывает первую дверь слева.
И они оба были и при сбросе кеша и при отключении режима игры Винды
Т. Е в одних и тех же местах
Комментарий удален по просьбе пользователя
крч глянул бенчмарки метро. И у других эти 2 фриза в аналогичном месте.
Видимо не так уж она хороша оптимизирована
Комментарий удален по просьбе пользователя
Вполне нормально, чем больше памяти, тем больше ее использует система.
А ты хочешь, чтобы она для красоты просто так пустая стояла?
Ты что! Иначе как же понтоваться 500-700 метрами в лине?) Ведь так круто, когда из 32 кубоа ось юзает нисколько)))
И не одного дельного совета, я в шоке от народа :)
Держи, кэшированную память нужно чистить, там в видео будет программка. Фризы из-за этого и есть в той же батле и колде.
Просто винда берет и тупо сжирает в кэш весь свободный ОЗУ, а кэш находится в лучшем случае на ССД, а худшем - жестком диске, который в сотни раз медленнее ОЗУ, поэтому и случаются фризы, поскольку игра запрашивает свободные ячейки памяти, а берутся они не из быстрой ОЗУ, а с кэша.
Ты же вообще не понимаешь, о чём пишешь, да?
Только решение проблемы озвученной в видео - реально работает. И проверено на практике.
Но вам лишь бы поплявузгать.
Комментарий удален по просьбе пользователя ред.
У меня 16 гб очень быстрой ддр4 в двухканале. Жаловаться мне не на что, кроме дебильной работы виндовс с озу, в результате чего пришлось делать этот костыль.
Комментарий удален по просьбе пользователя
Тупая шутка учитывая, что моя система собрана на ам4 для игр. Осталось пошутить что я сижу на резиновом члене - и дно будет нащупано.
Комментарий удален по просьбе пользователя
Только практика показала обратное. А то как их идеальные обновы сбивают настройки в системе - отдельная песня. Так что говорить о какой либо идеальности системы - моветон.
Комментарий удален по просьбе пользователя
Сейчас бы по мнению одного юзера делать статистику.
Некоторые средневековые методы лечения тоже вполне работали без понимания причин болезни. Но впоследствии былли вытеснены более эффективными, когда началось понимание. Так что так себе аргумент.
Это ты не понимаешь, в чем суть проблемы, да?
Ну что ж.
1) Открой Resource Monitor
2) Посмотри на размер Cached-данных
3) Открой расположение файла pagefile.sys и swapfile.sys
4) Сравни размер этих файлов и размер кэшированных данных.
5) Пойми, что это вообще не связанные параметры и Cached категорически не то же самое, что
винда берет и тупо сжирает в кэш весь свободный ОЗУ, а кэш находится в лучшем случае на ССД, а худшем - жестком диске, который в сотни раз медленнее ОЗУ
потому что это несвязный бред человека, который вообще не понимает, что такое кэширование в общем случае и путает его со свопом.
А ещё у меня, например, свободной RAM отображается вообще меньше 50 мегабайт, но ни к каким фризам и статтерам это не приводит. Потому что надо вначале понимать, как работает управление памятью в ОС, а уже потом пытаться что-то утверждать по этой теме. ред.
Во всех центральных процессорах любого компьютера, будь то дешёвый ноутбук или сервер за миллионы долларов, есть устройство под названием «кэш». И с очень большой вероятностью он обладает несколькими уровнями.
Наверно, он важен, иначе зачем бы его устанавливать? Но что же делает кэш, и для чего ему разные уровни? И что означает «12-канальный ассоциативный кэш» (12-way set associative)?
Что такое кэш?
TL;DR: это небольшая, но очень быстрая память, расположенная в непосредственной близости от логических блоков центрального процессора.
Однако мы, разумеется, можем узнать о кэше гораздо больше…
Давайте начнём с воображаемой волшебной системы хранения: она бесконечно быстра, может одновременно обрабатывать бесконечное количество операций передачи данных и всегда обеспечивает надёжное и безопасное хранение данных. Конечно же, ничего подобного и близко не существует, однако если бы это было так, то структура процессора была бы гораздо проще.
Процессорам бы тогда требовались только логические блоки для сложения, умножения и т.п, а также система управления передачей данных, ведь наша теоретическая система хранения способна мгновенно передавать и получать все необходимые числа; ни одному из логических блоков не приходится простаивать в ожидании передачи данных.
Но, как мы знаем, такой волшебной технологии хранения не существует. Вместо неё у нас есть жёсткие диски или твердотельные накопители, и даже самые лучшие из них далеки от возможностей обработки, необходимых для современного процессора.
Великий Т'Фон хранения данных
Причина этого заключается в том, что современные процессоры невероятно быстры — им требуется всего один тактовый цикл для сложения двух 64-битных целочисленных значений; если процессор работает с частотой 4 ГГЦ, то это составляет всего 0,00000000025 секунды, или четверть наносекунды.
В то же время, вращающемуся жёсткому диску требуются тысячи наносекунд только для нахождения данных на дисках, не говоря уже об их передаче, а твердотельным накопителям — десятки или сотни наносекунд.
Очевидно, что такие приводы невозможно встроить внутрь процессоров, поэтому между ними будет присутствовать физическое разделение. Поэтому ещё добавляется время на перемещение данных, что усугубляет ситуацию.
Увы, но это Великий А'Туин хранения данных
Именно поэтому нам нужна ещё одна система хранения данных, расположенная между процессором и основным накопителем. Она должна быть быстрее накопителя, способна одновременно управлять множеством операций передачи данных и находиться намного ближе к процессору.
Ну, у нас уже есть такая система, и она называется ОЗУ (RAM); она присутствует в каждом компьютере и выполняет именно эту задачу.
Почти все такие хранилища имеют тип DRAM (dynamic random access memory); они способны передавать данные гораздо быстрее, чем любой накопитель.
Однако, несмотря на свою огромную скорость, DRAM не способна хранить такие объёмы данных.
Одни из самых крупных чипов памяти DDR4, разработанных Micron, хранят 32 Гбит, или 4 ГБ данных; самые крупные жёсткие диски хранят в 4 000 раз больше.
Итак, хоть мы и повысили скорость нашей сети данных, нам потребуются дополнительные системы (аппаратные и программные), чтобы разобраться, какие данные должны храниться в ограниченном объёме DRAM, готовые к обработке процессором.
DRAM могут изготавливаться в корпусе чипа (это называется встроенной (embedded) DRAM). Однако процессоры довольно малы, поэтому в них не удастся поместить много памяти.
10 МБ DRAM слева от графического процессора Xbox 360. Источник: CPU Grave Yard
Подавляющее большинство DRAM расположено в непосредственной близости от процессора, подключено к материнской плате и всегда является самым близким к процессору компонентом. Тем не менее, эта память всё равно недостаточно быстра…
DRAM требуется примерно 100 наносекунд для нахождения данных, но, по крайней мере, она способна передавать миллиарды битов в секунду. Похоже, нам нужна ещё одна ступень памяти, которую можно разместить между блоками процессора и DRAM.
На сцене появляется оставшаяся ступень: SRAM (static random access memory). DRAM использует микроскопические конденсаторы для хранения данных в виде электрического заряда, а SRAM для той же задачи применяет транзисторы, которые работают с той же скоростью, что и логические блоки процессора (примерно в 10 раз быстрее, чем DRAM).
Разумеется, у SRAM есть недостаток, и он опять-таки связан с пространством.
Память на основе транзисторов занимает гораздо больше места, чем DRAM: в том же размере, что чип DDR4 на 4 ГБ, можно получить меньше 100 МБ SRAM. Но поскольку она производится по тому же технологическому процессу, что и CPU, память SRAM можно встроить прямо внутрь процессора, максимально близко к логическим блокам.
С каждой дополнительной ступенью мы увеличивали скорость перемещаемых данных ценой хранимого объёма. Мы можем продолжить и добавлять новые ступени,, которые будут быстрее, но меньше.
И так мы добрались до более строгого определения понятия кэша: это набор блоков SRAM, расположенных внутри процессора; они обеспечивают максимальную занятость процессора благодаря передаче и сохранению данных с очень высокими скоростями. Вас устраивает такое определение? Отлично, потому что дальше всё будет намного сложнее!
Кэш: многоуровневая парковка
На приведённом выше изображении процессор (CPU) обозначен прямоугольником с пунктирной границей. Слева расположены ALU (arithmetic logic units, арифметико-логические устройства); это структуры, выполняющие математические операции. Хотя строго говоря, они не являются кэшем, ближайший к ALU уровень памяти — это регистры (они упорядочены в регистровый файл).
Каждый из них хранит одно число, например, 64-битное целое число; само значение может быть элементом каких-нибудь данных, кодом определённой инструкции или адресом памяти каких-то других данных.
Регистровый файл в десктопных процессорах довольно мал, например, в каждом из ядер Intel Core i9-9900K есть по два банка таких файлов, а тот, который предназначен для целых чисел, содержит всего 180 64-битных целых чисел. Другой регистровый файл для векторов (небольших массивов чисел) содержит 168 256-битных элементов. То есть общий регистровый файл каждого ядра чуть меньше 7 КБ. Для сравнения: регистровый файл потоковых мультипроцессоров (так в GPU называются аналоги ядер CPU) Nvidia GeForce RTX 2080 Ti имеет размер 256 КБ.
Регистры, как и кэш, являются SRAM, но их скорость не превышает скорость обслуживаемых ими ALU; они передают данные за один тактовый цикл. Но они не предназначены для хранения больших объёмов данных (только одного элемента), поэтому рядом с ними всегда есть более крупные блоки памяти: это кэш первого уровня (Level 1).
Одно ядро процессора Intel Skylake. Источник: Wikichip
На изображении выше представлен увеличенный снимок одного из ядер десктопного процессора Intel Skylake.
ALU и регистровые файлы расположены слева и обведены зелёной рамкой. В верхней части фотографии белым обозначен кэш данных первого уровня (Level 1 Data cache). Он не содержит много информации, всего 32 КБ, но как и регистры, он расположен очень близко к логическим блокам и работает на одной скорости с ними.
Ещё одним белым прямоугольником справа показан кэш инструкций первого уровня (Level 1 Instruction cache), тоже имеющий размер 32 КБ. Как понятно из названия, в нём хранятся различные команды, готовые к разбиению на более мелкие микрооперации (обычно обозначаемые μops), которые должны выполнять ALU. Для них тоже существует кэш, который можно классифицировать как Level 0, потому что он меньше (содержит всего 1 500 операций) и ближе, чем кэши L1.
Вы можете задаться вопросом: почему эти блоки SRAM настолько малы? Почему они не имеют размер в мегабайт? Вместе кэши данных и инструкций занимают почти такую же площадь на чипе, что основные логические блоки, поэтому их увеличение приведёт к повышению общей площади кристалла.
Но основная причина их размера в несколько килобайт заключается в том, что при увеличении ёмкости памяти повышается время, необходимое для поиска и получения данных. Кэшу L1 нужно быть очень быстрым, поэтому необходимо достичь компромисса между размером и скоростью — в лучшем случае для получения данных из этого кэша требуется около 5 тактовых циклов (для значений с плавающей запятой больше).
Кэш L2 процессора Skylake: 256 КБ SRAM
Но если бы это был единственный кэш внутри процессора, то его производительность наткнулась бы на неожиданное препятствие. Именно поэтому в ядра встраивается еще один уровень памяти: кэш Level 2. Это обобщённый блок хранения, содержащий инструкции и данные.
Он всегда больше, чем Level 1: в процессорах AMD Zen 2 он занимает до 512 КБ, чтобы кэши нижнего уровня обеспечивались достаточным объёмом данных. Однако большой размер требует жертв — для поиска и передачи данных из этого кэша требуется примерно в два раза больше времени по сравнению с Level 1.
Во времена первого Intel Pentium кэш Level 2 был отдельным чипом, или устанавливаемым на отдельной небольшой плате (как ОЗУ DIMM), или встроенным в основную материнскую плату. Постепенно он перебрался в корпус самого процессора, и, наконец, полностью интегрировался в кристалл чипа; это произошло в эпоху таких процессоров, как Pentium III и AMD K6-III.
За этим достижением вскоре последовал ещё один уровень кэша, необходимый для поддержки более низких уровней, и появился он как раз вовремя — в эпоху расцвета многоядерных чипов.
Чип Intel Kaby Lake. Источник: Wikichip
На этом изображении чипа Intel Kaby Lake в левой части показаны четыре ядра (интегрированный GPU занимает почти половину кристалла и находится справа). Каждое ядро имеет свой «личный» набор кэшей Level 1 и 2 (выделены белыми и жёлтым прямоугольниками), но у них также есть и третий комплект блоков SRAM.
Кэш третьего уровня (Level 3), хоть и расположен непосредственно рядом с одним ядром, является полностью общим для всех остальных — каждое ядро свободно может получать доступ к содержимому кэша L3 другого ядра. Он намного больше (от 2 до 32 МБ), но и намного медленнее, в среднем более 30 циклов, особенно когда ядру нужно использовать данные, находящиеся в блоке кэша, расположенного на большом расстоянии.
Ниже показано одно ядро архитектуры AMD Zen 2: кэши Level 1 данных и инструкций по 32 КБ (в белых прямоугольниках), кэш Level 2 на 512 КБ (в жёлтых прямоугольниках) и огромный блок кэша L3 на 4 МБ (в красном прямоугольнике).
Увеличенный снимок одного ядра процессора AMD Zen 2. Источник: Fritzchens Fritz
Но постойте: как 32 КБ могут занимать больше физического пространства чем 512 КБ? Если Level 1 хранит так мало данных, почему он непропорционально велик по сравнению с кэшами L2 и L3?
Не только числа
Кэш повышает производительность, ускоряя передачу данных в логические блоки и храня поблизости копию часто используемых инструкций и данных. Хранящаяся в кэше информация разделена на две части: сами данные и место, где они изначально располагаются в системной памяти/накопителе — такой адрес называется тег кэша (cache tag).
Когда процессор выполняет операцию, которой нужно считать или записать данные из/в память, то он начинает с проверки тегов в кэше Level 1. Если нужные данные там есть (произошло кэш-попадание (cache hit)), то доступ к этим данным выполняется почти сразу же. Промах кэша (cache miss) возникает, если требуемый тег не найден на самом нижнем уровне кэша.
В кэше L1 создаётся новый тег, а за дело берётся остальная часть архитектуры процессора выполняющая поиск в других уровнях кэша (при необходимости вплоть до основного накопителя) данных для этого тега. Но чтобы освободить пространство в кэше L1 под этот новый тег, что-то обязательно нужно перебросить в L2.
Это приводит к почти постоянному перемешиванию данных, выполняемому всего за несколько тактовых циклов. Единственный способ добиться этого — создание сложной структуры вокруг SRAM для обработки управления данными. Иными словами, если бы ядро процессора состояло всего из одного ALU, то кэш L1 был бы гораздо проще, но поскольку их десятки (и многие из них жонглируют двумя потоками инструкций), то для перемещения данных кэшу требуется множество соединений.
Для изучения информации кэша в процессоре вашего компьютера можно использовать бесплатные программы, например CPU-Z. Но что означает вся эта информация? Важным элементом является метка set associative (множественно-ассоциативный) — она указывает на правила, применяемые для копирования блоков данных из системной памяти в кэш.
Представленная выше информация кэша относится к Intel Core i7-9700K. Каждый из его кэшей Level 1 разделён на 64 небольших блока, называемые sets, и каждый из этих блоков ещё разбит на строки кэша (cache lines) (размером 64 байта). «Set associative» означает, что блок данных из системы привязывается к строкам кэша в одном конкретном сете, и не может свободно привязываться к какому-то другому месту.
Инклюзивный кэш L1+L2, victim cache L3, политики write-back, есть даже ECC. Источник: Fritzchens Fritz
Ещё один аспект сложности кэша связан с тем, как хранятся данные между разными уровнями. Правила задаются в inclusion policy (политике инклюзивности). Например, процессоры Intel Core имеют полностью инклюзивные кэши L1+L3. Это означает, что одни данные в Level 1, например, могут присутствовать в Level 3. Может показаться, что это пустая трата ценного пространства кэша, однако преимущество заключается в том, что если процессор совершает промах при поиске тега в нижнем уровне, ему не потребуется обыскивать верхний уровень для нахождения данных.
В тех же самых процессорах кэш L2 неинклюзивен: все хранящиеся там данные не копируются ни на какой другой уровень. Это экономит место, но приводит к тому, что системе памяти чипа нужно искать ненайденный тег в L3 (который всегда намного больше). Victim caches (кэши-жертвы) имеют похожий принцип, но они используются для хранения информации, переносимой с более низких уровней. Например, процессоры AMD Zen 2 используют victim cache L3, который просто хранит данные из L2.
Существуют и другие политики для кэша, например, при которых данные записываются и в кэш, и основную системную память. Они называются политиками записи (write policies); большинство современных процессоров использует кэши write-back — это означает, что когда данные записываются на уровень кэшей, происходит задержка перед записью их копии в системную память. Чаще всего эта пауза длится в течение того времени, пока данные остаются в кэше — ОЗУ получает эту информацию только при «выталкивании» из кэша.
Графический процессор Nvidia GA100, имеющий 20 МБ кэша L1 и 40 МБ кэша L2
Для проектировщиков процессоров выбор объёма, типа и политики кэшей является вопросом уравновешивания стремления к повышению мощности процессора с увеличением его сложности и занимаемым чипом пространством. Если бы можно было создать 1000-канальные ассоциативные кэши Level 1 на 20 МБ такими, чтобы они при этом не занимали площадь Манхэттена (и не потребляли столько же энергии), то у нас у всех бы были компьютеры с такими чипами!
Самый нижний уровень кэшей в современных процессорах за последнее десятилетие практически не изменился. Однако кэш Level 3 продолжает расти в размерах. Если бы десять лет назад у вас было 999 долларов на Intel i7-980X, то вы могли бы получить кэш размером 12 МБ. Сегодня за половину этой суммы можно приобрести 64 МБ.
Подведём итог: кэш — это абсолютно необходимое и потрясающее устройство. Мы не рассматривали другие типы кэшей в CPU и GPU (например, буферы ассоциативной трансляции или кэши текстур), но поскольку все они имеют такую же простую структуру и расположение уровней, разобраться в них будет несложно.
Был ли у вас компьютер с кэшем L2 на материнской плате? Как насчёт слотовых Pentium II и Celeron (например, 300a) на дочерних платах? Помните свой первый процессор с общим L3?
На правах рекламы
Наша компания предлагает в аренду серверы с процессорами от Intel и AMD. В последнем случае — это эпичные серверы! VDS с AMD EPYC, частота ядра CPU до 3.4 GHz. Максимальная конфигурация — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe.
Вот подробная карта Москвы для Яндекс карт - это 1.2 ГБ.
Подробная карта МО - аж 5.6 Гб.
При этом в такой программе, например, как MapsWithMe, карта центрального региона России (а это несколько областей) - всего 306 МБ. В разы меньше!
И не сказал бы, что эти карты прям уж менее подробные, чем у Яндекса.
Вот, например, скриншоты одного и того же куска Москвы, просто навскидку:
Заметьте - это именно кэшированные карты, я специально отключил на телефоне вайфай и сотовые данные.
Плюс - это не только Москва, но и вся область, и вот, например, кусок города Владимир (которого в Яндекс-картах попросту нет, если не скачать отдельно Владимирскую область):
Да, я понимаю, что у Яндекс-карт есть еще пробки (их нет у того приложения), есть куча других сервисов, которых нет у "Картысомной".
Но речь не о том, что то приложение лучше яндексового - вопрос в том, почему карты одинаковой подробности занимают такое РАЗНОЕ количество мегабайт?
Неэффективность программистов Яндекса? Или еще что?
Парадокс. Юзер хочет знать, почему у одного приложения карты занимают гигабайты, а у другой мегабайты. Хотя непонятно, с какого юзер вообще что-то знает про мегабайты и гигабайты? Система то по хорошему всё должна от него спрятать.
Юзер при нехватке места просто покупает винт побольше, а не изучает сколько бит в мегабайте.
Но вот беда. Когда юзеру отвечаешь на его же вопрос, всплывают термины "растровые", "векторные", но юзер не хочет вдаваться в эти технические детали. Но всё равно продолжает требовать ответ на вопрос: почему?
В данном случае множества "не пудрите мозг деталями" и "почему мегабайты разные" не пересекаются. Т.е. ответ невозможно дать в принципе.
Разговор выглядит примерно так. Звонок в ЖЭК:
- У меня свет в квартире не горит!
- Выйдите на лестничную клетку и проверьте автомат.
- Какого я должен выходить на лестничную клетку, если света нет в квартире? И вообще я ни про какие автоматы не знаю и знать не хочу. Почему у меня в квартире не горит свет?
Не по делу наехали Вы либо не поняли меня, либо специально передергиваете, чтобы потешить свое эго.
Юзер видит перед собой две программы, с одинаковыми примерно возможностями (а те возможности, которые у них не совпадают, не имеют никакого отношения в объему загружаемых карт), и видит, что одна программа требует от него 6 ГБ на диске, а другая - 300 МБ, причем, обладает еще и гораздо бОльшим покрытием.
И это для юзера это означает лишь то, что одна из программ написана НЕЭФФЕКТИВНО.
И ему в этом смысле действительно ПОФИГ, почему так произошло. Объяснение "потому что она растровая" - не объяснение.
Это все равно, что на вопрос "почему ваша программа неэффективная" отвечать "потому что она так написана".
Ну так напишите по-другому.
Точно так же, как если Вы будете выбирать обувь, и одна пара будет весить 1 кг,а другая - 10 кг, то у Вас вполне может возникнуть вопрос - "почему так".
Разве Вас устроит ответ "потому что они растровые"? (вместо "растровые" поставьте любое другое слово, объясняющее, почему они тяжелые).
Ну так сделайте "векторные" ботинки, легкие, удобные.
Вообще, суббота, мне лень спорить. Объяснение я понял, растровые - так растровые. Это всё объясняет, больше вопросов не имею.
"Что случилось с вашей подводной лодкой? - Она утонула."
Не по делу спросил :) Растровые карты закачиваются в устройство в онлайне - это возможность вносить изменения на сервере и через 1 секунду после изменений все юзеры получат эти изменения если запросят. Разница в измененных участках ни в скорости закачки ни в способе закачки ни в чем-то еще не видна. При наличии безлимитных интернетов решение идеальное, но карта много весит.
Векторные карты - это некий массив описанных координат, соединенных линиями. Представляет собой неделимую целостную структуру. Поменять в одном месте разворот на поворот налево, значит поменять ВСЕ КАРТЫ РЕГИОНА и пользователю придется закачивать весь этот объем. Решение для экономии места иделаьное, но проблема с оперативностью обновлений "минута в минуту" не решаема в принципе. Только способом "обновить программу", что позволяет, например, нескольким пользователям одномоментно пользоваться разными картами, что вносит некоторую неразбериху, неправда ли?
А теперь скажи мне - какая из программ написана неэффективным методом?
Я там ниже написал уже. Основное правило: всё делается как можно дешевле. Т.е. проще в реализации и поддержке. Никто ради красоты просто так своё время тратить не будет. ЯКарты это коммерческий проект, там бабло считать умеют.
При нормальной и дешевой связи кеш нафиг не упёрся. Посему заниматься исключительно оптимизацией его размера ради небольшого числа пользователей пустая трата времени и денег.
И вот что я не пойму. Неужели так нужен кеш ВСЕЙ МО? Если кататься более-менее в одних и тех же местах, кеш будет в разы меньше.
Да это понятно Просто объяснение "мы так сделали, потому что нам так проще и дешевле" - для меня по-прежнему не объяснение :-)).
Это всего лишь "цивилизованный" вариант показывания среднего пальца потребителю.
Впрочем, пока яндекс-сервисы бесплатные - ладно, фиг с ним.
MapsWithMe, правда, тоже бесплатная :-)).
Ну ладно, закончим на этом, согласен.
А насчет всего кэша МО - ну, если производитель делает, как ему проще, то я тем более делаю как мне удобно, т.к. подгружать карты по мобильному интернету - как минимум долго и неудобно. Особенно при наших дырах в 3G связи, когда в области можно вообще интернета не поймать.
А карты лучше в телефоне иметь.
В любом процессоре любого компьютера – от дешевого ноутбука до сервера в миллион долларов – есть то, что называется кэшем. И чаще всего он ещё и многоуровневый.
Должно быть, это что-то важное, иначе зачем бы это было? Но что оно делает, и зачем там несколько уровней? И что, вообще, значат всякие там множественно-ассоциативные 12-канальности?
Что же такое кэш?
Это небольшая, но очень быстрая память, которая находится рядом с логическими блоками процессора.
Но, конечно, такого определения нам недостаточно.
Представим себе идеальную волшебную систему хранения данных: бесконечно быструю, с бесконечным числом одновременных операций, и при этом обеспечивая абсолютную сохранность данных. Ничего подобного в реальности не существует, но если бы существовало, то устройство процессора было бы существенно проще.
Процессору было бы достаточно иметь только логические блоки для выполнения арифметических операций и систему для контроля передачи данных. Потому, что наша воображаемая система хранения мгновенно отправляет и получает все необходимые значения; ни один из логических блоков не задерживается в ожидании выполнения транзакции данных.
Причина в том, что современные процессоры невероятно быстры – им требуется всего один такт, чтобы сложить два 64-битных целых числа, а для процессора, работающего на частоте 4 ГГц, это занимает всего 0,00000000025 секунды (четверть наносекунды).
В то время как вращающимся жестким дискам требуются тысячи наносекунд только для того, чтобы найти данные на внутренних дисках, не говоря уже об их передаче. Твердотельные накопители работают быстрее, но и им требуются десятки или сотни наносекунд.
Понятно, что такие накопители нельзя встроить внутрь процессора, а это означает, что между ними будет физическое разделение и, следовательно, понадобится больше времени на перемещение данных, что еще больше усугубляет ситуацию.
Итак, нам нужна еще одна система хранения данных, которая находилась бы между процессором и основным хранилищем. Она должна быть быстрее, чем диск, уметь обрабатывать большое количество транзакций одновременно и быть в непосредственной близости к процессору.
Что ж, у нас уже есть такая штука, и она называется RAM. Во всех компьютерах она используется как раз для этой цели.
Почти всегда это – DRAM (динамическая память с произвольным доступом), и она способна совершать обмен данными намного быстрее любого диска.
Однако, значительно превосходя в скорости, DRAM столь же значительно уступает в объёме хранимых данных.
Самые большие на сегодня чипы DDR4 (производства Micron, одного из немногих производителей DRAM) уступают самым большим по объёму жестким дискам примерно в 4000 раз.
Поэтому, увеличив скорость обмена данными, встала другая задача: с помощью аппаратных и программных решений определить, какие данные следует поместить в ограниченный объём DRAM, для оперативного пользования процессором.
Но по крайней мере, DRAM можно встроить в корпус процессора (встраиваемая DRAM, eDRAM). Однако процессоры относительно небольшие, поэтому особо внутри них не развернёшься.
10 Мб DRAM чип слева от графического процессора Xbox 360. Источник: CPU Grave Yard 10 Мб DRAM чип слева от графического процессора Xbox 360. Источник: CPU Grave YardПодавляющее большинство модулей DRAM располагается на материнской плате рядом с процессором, и это всегда ближайший к процессору компонент в компьютерной системе. И всё равно это недостаточно быстро.
Опять же, для поиска данных DRAM требуется время около 100 наносекунд, но по крайней мере она может передавать миллиарды бит данных в секунду. Похоже, нам понадобится еще одна промежуточная память, между блоками процессора и DRAM.
Встречайте: SRAM (статическая память с произвольным доступом). В то время как DRAM использует микроскопические конденсаторы для хранения данных в виде электрического заряда, SRAM для той же цели использует транзисторы, работающие почти с той же скоростью, что и логические блоки в процессоре (примерно в 10 раз быстрее, чем DRAM).
Конечно, у SRAM есть недостаток, и опять же, речь об объёме.
Транзисторная память занимает намного больше физического места, чем DRAM: чип SRAM размером с чип DDR4 4 Гб будет иметь объём менее 100 Мб. Но поскольку технологически SRAM основана на том же процессе, что и процессор, то её можно встроить прямо внутрь него, в непосредственной близости к его логическим блокам.
Транзисторная память занимает намного больше физического места, чем DRAM: чип SRAM размером с чип DDR4 4 Гб будет иметь объём менее 100 Мб.
Каждая такая дополнительная система памяти на пути к сверхбыстрым узлам процессора отличается повышенной скоростью в ущерб её объёму. Можно добавить больше таких систем, каждая из которых будет быстрее, но меньше.
И вот теперь мы можем дать более внятное определение, что такое кэш: это несколько модулей SRAM, расположенных внутри процессора. Они обеспечивают максимальную загрузку логических блоков, выполняя обмен данными на сверхвысоких скоростях. Этого достаточно? Отлично, потому что с этого момента все станет намного сложнее!
Кэш – это как многоуровневая парковка
Как мы выяснили, кэш необходим, потому что системы хранения данных неидеальны и не способны удовлетворить соответствующие требования логических блоков в процессоре. Современные CPU и GPU содержат массив блоков SRAM, которые внутренне организованы в иерархию – последовательность кэшей, упорядоченных следующим образом:
На этой схеме область процессора выделена черным пунктирным прямоугольником. Блоки ALU (арифметико-логическое устройство) находятся в крайнем левом углу; это те самые структуры, которые и делают процессор – процессором, выполняя математические вычисления. Ближайшим к ALU уровнем памяти являются регистры (они сгруппированы в файл регистров) – но технически они кэшем не являются.
Каждый из них содержит одно число, например 64-битное целое; само значение может быть фрагментом каких-то данных, кодом определенной инструкции, либо же ссылкой на адрес других данных.
Файл регистров в процессоре настольного компьютера довольно мал – например, в Intel Core i9-9900KF их на каждое ядро по два банка: один для целых чисел, содержащий 180 64-битных регистров, другой – для векторов (небольших массивов чисел), имеющий 168 256-битных регистров. Таким образом, общий файл регистров для каждого ядра чуть меньше 7 Кб. Для сравнения, размер файла регистров в потоковых мультипроцессорах (графических эквивалентах ядер CPU) в NVIDIA GeForce RTX 2080 Ti равен 256 Кб.
Регистры – это SRAM-память, как и кэш, но работающие на той же скорости, что и обслуживаемые ими ALU, вводя и выводя данные за один такт. Но они не предназначены для хранения большого количества данных (а только одного их фрагмента), поэтому поблизости всегда есть несколько блоков памяти побольше: это кэш уровня 1, L1 (Level 1).
Процессор Intel Skylake, увеличенное изображение одного из ядер. Источник: Wikichip Процессор Intel Skylake, увеличенное изображение одного из ядер. Источник: WikichipНа фото крупным планом показано ядро процессора Intel Skylake для PC.
Зелёным прямоугольником слева выделены ALU и файлы регистров. В центре вверху белым прямоугольником показан кэш данных 1 уровня (L1 D cache). Его объём небольшой, всего 32 Кб, но, как и регистры, он находится очень близко к логическим блокам и работает с той же скоростью, что и они.
Второй белый прямоугольник – это кэш инструкций 1 уровня (L1 Ins cache), также размером 32 Кб. Как следует из названия, здесь хранятся различные команды, готовые к разделению на более мелкие – так называемые микрооперации (обычно обозначаемые как μops) для выполнения ALU. Для них также есть свой кэш – так сказать, кэш нулевого уровня (L0 cache), поскольку он меньше (всего на 1500 операций) и ближе, чем кэши L1.
Вы можете спросить: а почему эти блоки SRAM такие маленькие? Почему бы не увеличить их размер до мегабайта хотя бы? Во-первых, основные логические блоки процессора занимают в чипе такое же пространство, как и кэши данных и инструкций вместе взятые, поэтому увеличение размеров последних приведет и к существенному увеличению общего размера кристалла.
А во-вторых (и в-главных), причина, по которой они хранят всего несколько килобайт, заключается в том, что время, необходимое для поиска и извлечения данных, увеличивается по мере увеличения объёма памяти. Кэш L1 должен быть очень быстрым, поэтому необходим компромисс между размером и скоростью – в лучшем случае требуется около 5 тактовых циклов (чуть больше для значений с плавающей точкой), чтобы предоставить данные из этого кэша, готовые к использованию.
Но если бы это был единственный кэш внутри процессора, то производительность последнего резко упала бы. Вот почему все процессоры имеют другой уровень памяти, встроенный в ядра: кэш 2 уровня, L2 (Level 2 cache). Это общее хранилище для инструкций и данных.
Его размер всегда несколько больше, чем L1: к примеру, в процессорах AMD Zen 2 устанавливается до 512 Кб памяти L2, поэтому кэши более низкого уровня обеспечиваются должным образом. Но за этот дополнительный размер приходится платить: на поиск и передачу данных из этого кэша уходит примерно вдвое больше времени по сравнению с L1.
Возвращаясь в прошлое, во времена оригинального Intel Pentium, кэш-память 2 уровня представляла собой отдельную микросхему – либо на небольшой съёмной плате расширения по подобию RAM DIMM, либо встроенную в материнскую плату. Затем кэш L2 переехал в сам корпус процессора, и в конечном итоге был интегрирован в кристалл, что стало причиной появления Pentium III и AMD K6-III.
За этим развитием вскоре последовал другой уровень кэш-памяти, предназначенный для поддержки более низких уровней, и это было связано с появлением многоядерных чипов.
На этой макрофотографии чипа Intel Kaby Lake мы видим его 4 ядра слева от центра (интегрированный GPU почти полностью занимает половину кристалла справа от центра). Каждое
ядро имеет свой собственный «личный» набор кэшей L1 и L2 (белые и желтый прямоугольники), но кроме этого имеет ещё и третий банк блоков SRAM (выделены красным).
Несмотря на то, что кэш 3 уровня (Level 3 cache) непосредственно окружает каждое ядро, он является общим для всех ядер – любое из ядер может свободно получать доступ к содержимому L3 другого ядра. Этот кэш-уровень намного больше (от 2 до 32 Мб), но и намного медленнее – в среднем на 30 циклов, особенно если ядру необходимо использовать данные, которые находятся в дальнем блоке кэша.
Ниже мы видим строение ядра в архитектуре AMD Zen 2: кэши данных и инструкций L1 (белым) объемом 32 Кб, L2 (жёлтым) – 512 Кб, и огромный блок кэша L3 (красным) размером 4 Мб.
Увеличенное изображение ядра процессора AMD Zen 2. Источник: Fritzchens Fritz Увеличенное изображение ядра процессора AMD Zen 2. Источник: Fritzchens FritzПостойте! Как 32 Кб могут занимать больше физического пространства, чем 512 Кб? Если L1 хранит так мало данных, почему он пропорционально значительно больше, чем кэши L2 и L3?
Больше, чем просто число
Кэш повышает производительность за счет ускорения передачи данных в логические блоки и хранения наготове часто используемых инструкций и данных. Информация, хранящаяся в кэше, делится на две части: сами данные и информация о том, где они изначально находились (в системной памяти или на носителе) – этот адрес называется тегом кэша.
Когда процессор выполняет операцию, которая собирается прочитать/записать данные из/в память, он начинает с проверки тегов в кэше L1. Если затребованные данные там присутствуют (cache hit, «кэш-попадание»), к ним можно сразу получить доступ напрямую. «Кэш-промах» (cache miss) происходит, когда кэш самого низкого уровня не содержит запрашиваемый тег.
В последнем случае, в кэше L1 создается новый тег, и соответствующие узлы архитектуры процессора начинают перебирать другие уровни кэша (вплоть до основного накопителя, если нужно), чтобы найти данные для затребованного тега. Но чтобы освободить место в кэше L1 для этого нового тега, нужно что-то оттуда выгрузить в L2.
В результате данные почти постоянно перемещаются и перемешиваются за считанные такты. Единственный способ управлять этим всем – оснастить сложной структурой обслуживания SRAM. Иными словами: если бы в ядре процессора был бы только один ALU, то кэш L1 был бы намного проще, но поскольку их десятки (многие из которых жонглируют двумя потоками инструкций), кэшу требуется сразу несколько подключений для поддержания кэшированных данных в движении.
С помощью бесплатных утилит типа CPU-Z можно получить информацию о кэше в вашем процессоре. Что же мы там видим? Важным элементом является параметр ассоциативности (set associative) – он определяет, как именно блоки данных из системной памяти копируются в кэш.
В приведенном выше примере представлена информация о кэше процессора Intel Core i7-9700KF . Каждый из кэшей L1 разделен на 64 маленьких блока, называемых сэтами (set, “набор”), и каждый из них далее делится на кэш-линии (cache lines), размером 64 байта. «Set associative»
(множественно- или наборно-ассоциативный) означает, что блок данных из RAM отображается на кэш-линии одного конкретного сэта, а не где угодно.
Инклюзивный кэш L1+L2, жертвенный кэш L3, политика отложенной записи (write-back policies), ECC (корректор ошибок). Источник: Fritzchens Fritz Инклюзивный кэш L1+L2, жертвенный кэш L3, политика отложенной записи (write-back policies), ECC (корректор ошибок). Источник: Fritzchens FritzЕщё одним аспектом организации кэша является то, как именно данные распределяются по разным уровням. Соответствующие правила устанавливаются так называемой политикой инклюзивности (inclusion policy). Например, процессоры Intel Core имеют полностью инклюзивный кэш L1+L3. Это означает, что одни и те же данные, например, в L1, могут находиться и в L3. Может показаться, что это лишь трата столь ценного пространства кэша, но преимущество состоит в том, что если процессор получает кэш-промах при поиске тега в низком уровне, ему не нужно искать его в более высоком уровне.
В тех же процессорах кэш L2 является не-инклюзивным: любые хранящиеся в нем данные не копируются на какой-либо другой уровень. Это экономит место, но приводит к тому, что системе памяти чипа приходится выполнять поиск по L3 (который всегда намного больше), чтобы найти требуемый тег. Подобным образом устроены и жертвенные кэши (victim cache), но они используются для хранения информации, вытесняемой с более низкого уровня – например, процессоры AMD Zen 2 используют L3 в качестве кэша жертв, который просто хранит данные, вытесненные из L2.
Существуют и другие политики для организации кеширования, например, регламентирующие запись данных в кэш и RAM. Это так называемые политики записи (write policies), и большинство современных процессоров используют кэши с отложенной записью (write-back); это означает, что когда данные записываются на уровень кэша, происходит задержка перед тем, как копия этих данных отправляется в RAM. По большей части эта пауза длится до тех пор, пока данные в кэше не будут замещены новыми данными – и только тогда происходит запись вытесняемых данных в RAM.
Видеокарта Nvidia GA100, оснащенная 20 Мб кэш-памяти L1 и 40 Мб L2. Видеокарта Nvidia GA100, оснащенная 20 Мб кэш-памяти L1 и 40 Мб L2.При выборе объема, типа и политик кэш-памяти, разработчики процессоров стараются найти оптимальный баланс между повышением производительности процессора и увеличением необходимой площади кристалла с неминуемым усложнением системы. Если бы было возможно просто взять и сделать 1000-канальные полностью ассоциативные 20-мегабайтные кэши L1, и при этом их размер не был бы размером с Манхэттэн (и не потребляли бы такую же мощность), то у нас всех уже были бы компьютеры с такими процессорами!
За последние десять лет кэш L1 претерпел мало изменений, в то время как L3 продолжает увеличиваться. Десять лет назад, покупая Intel i7-980X за 999 долларов, вы получали 12 Мб L3. Сегодня же кэшем L3 объёмом 64 Мб снабжены процессоры стоимостью вдвое дешевле.
Итак, кэш – это абсолютно необходимые и совершенно потрясающие технологии. В данной статье мы не рассматривали другие типы кэшей в CPU и GPU (например, буфер ассоциативной трансляции – TLB, или текстурные кэши), но поскольку все они следуют той же логике и структуре уровней, как мы описали здесь, то вам, скорее всего, уже будет не так сложно разобраться с ними.
Читайте также: