Здравствуйте, Аноним, Вы писали:
А>А можно ли в теории создать такую программу, чтобы она А>на процессоре с кэшем для ОЗУ работала медленее, А>чем на том же самом процессоре без кэша?
А>Т.е. в теории кэши допускают работу со скоростью >= скорости памяти, А>или при нетипичных нагрузках может быть и '<'?
Кэш по определению предназначен для того чтобы скорость была > скорости памяти. Алсо, почитай мануалы к процам.
Здравствуйте, <Аноним>, Вы писали:
А>А можно ли в теории создать такую программу, чтобы она А>на процессоре с кэшем для ОЗУ работала медленее, А>чем на том же самом процессоре без кэша?
Кэш заполняется/сбрасывается параллельно работе процессора, никоим образом его не задерживая. То есть, ускорить работу может, замедлить — нет.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Кэш заполняется/сбрасывается параллельно работе процессора, никоим образом его не задерживая. То есть, ускорить работу может, замедлить — нет.
Если cache line шире, чем шина данных, к которой припаяна память, то вытаскивать целую cache line ради одного байта может быть невыгодно.
Потом, write back кэш может заняться write как раз в тот момент, когда программе очень надо read, да нету свободного cache line.
Re[3]: кэш и промахи
От:
Аноним
Дата:
30.12.09 16:43
Оценка:
Здравствуйте, Pzz, Вы писали:
Pzz>Если cache line шире, чем шина данных, к которой припаяна память, то вытаскивать целую cache line ради одного байта может быть невыгодно.
примерно об этом и шла речь,
конктекст был такой:
32 битный процессор
за раз из памяти можно считать 64 бита,
в линии кэша 16 32 битных слов,
но я подумал может такие проблемы решают какими-нибудь средствами,
например сначала считывают нужное слово, а потом дочитывают остальную линейку
Здравствуйте, Аноним, Вы писали:
А>примерно об этом и шла речь, А>конктекст был такой: А>32 битный процессор А>за раз из памяти можно считать 64 бита, А>в линии кэша 16 32 битных слов,
Вы не думайте только, что высосать из такой памяти целый кеш-лайн аж в 8 раз дороже, чем высосать один байт. На самом деле, современная память долго запрягает да быстро едет, в том смысле, что при последовательном чтении первого слова приходится ждать в несколько раз дольше, чем каждого последующего.
А>но я подумал может такие проблемы решают какими-нибудь средствами, А>например сначала считывают нужное слово, а потом дочитывают остальную линейку
Нет, на самом деле скорее эти проблемы являются решением фундаментальных проблем, присущих самой памяти — см. выше
Re[5]: кэш и промахи
От:
Аноним
Дата:
02.01.10 14:36
Оценка:
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, Аноним, Вы писали:
А>>примерно об этом и шла речь, А>>конктекст был такой: А>>32 битный процессор А>>за раз из памяти можно считать 64 бита, А>>в линии кэша 16 32 битных слов,
Pzz>Вы не думайте только, что высосать из такой памяти целый кеш-лайн аж в 8 раз дороже, чем высосать один байт. На самом деле, современная память долго запрягает да быстро едет, в том смысле, что при последовательном чтении первого слова приходится ждать в несколько раз дольше, чем каждого последующего.
процессор может запросить линейку кеша в разном порядке,
а вот если ее в определенном порядке ждать, то для современного
процессора с большим line cache size даже с учетом того что последовательный
доступ к DRAM быстрыый все равно слишком медленно.
Здравствуйте, Pzz, Вы писали:
Pzz>Вы не думайте только, что высосать из такой памяти целый кеш-лайн аж в 8 раз дороже, чем высосать один байт. На самом деле, современная память долго запрягает да быстро едет, в том смысле, что при последовательном чтении первого слова приходится ждать в несколько раз дольше, чем каждого последующего.
Насколько я знаю, это не соответствует действительности, и любая операция чтения занимает одинаковое время, т.е. цикл чтения всегда одинаков вне зависимости от предыдущих чтений. На то она и Random Access Memory. Другой вопрос, что ширина шины памяти больше ширины слова проца (вроде бы сейчас она 128 бит), посему, при чтении линии может быть некоторый прирост производительности...
Pzz>>Вы не думайте только, что высосать из такой памяти целый кеш-лайн аж в 8 раз дороже, чем высосать один байт. На самом деле, современная память долго запрягает да быстро едет, в том смысле, что при последовательном чтении первого слова приходится ждать в несколько раз дольше, чем каждого последующего. K>Насколько я знаю, это не соответствует действительности, и любая операция чтения занимает одинаковое время, т.е. цикл чтения всегда одинаков вне зависимости от предыдущих чтений. На то она и Random Access Memory.
Святая наивность Это давно неправда, обращали внимание на кучу разных таймингов у современной памяти?
Вот почитайте про них http://people.overclockers.ru/antinomy/record4
Как много веселых ребят, и все делают велосипед...
Здравствуйте, koandrew, Вы писали:
K>Насколько я знаю, это не соответствует действительности, и любая операция чтения занимает одинаковое время, т.е. цикл чтения всегда одинаков вне зависимости от предыдущих чтений. На то она и Random Access Memory. Другой вопрос, что ширина шины памяти больше ширины слова проца (вроде бы сейчас она 128 бит), посему, при чтении линии может быть некоторый прирост производительности...
Почитайте как-нибудь на досуге, как работает динамическая память, вы будете удивлены.
Если вкратце, физически она представляет собой большую, более-менее квадратную матрицу конденсаторов. Чтение происходит в два этапа: сначала из матрицы выбирается целая строка, а на следующем этапе из строки выбираются нужные биты. Так вот, строка довольно длинная, значительно длиннее ширины шины памяти (которая, к слову, не имеет прямого отношения к ширине слова процессора). Выборка строки — довольно длительная операция, а вот когда строка уже выбрана, читать ее последовательно, слово за словом, получается в несколько раз быстрее.