Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
#1

Cache miss - C++

15.09.2013, 20:50. Просмотров 668. Ответов 19
Метки нет (Все метки)

Всем привет.
Хочу разобраться с cache miss. Кто знает какой вариант кода будет меньше содержать промахов и следовательно выполняться быстрее?

Код №1
C++
1
2
3
4
5
6
7
8
9
10
11
12
if (a == 12)
{
  do something....
}
else if (a == -1) 
{
  do something...
}
else
{
  do something...
}
Код №2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (a == 12)
{
  dosomething...
}
 
if (a == -1)
{
  dosomething...
}
 
if (a != -1 && a != 12)
{
  do something...
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2013, 20:50     Cache miss
Посмотрите здесь:

На какой лучше поставить винду: WD 6400AAKS 640GB 16mb cache или UTANIA DF604RS 1TB 32mb cache ? - Жесткие диски
Имеется 2 жестака. 1) WD 6400AAKS 640GB 16mb cache 2) UTANIA DF604RS 1TB 32mb cache(покупался в корее, 0 инфы в гугле) Сделал 2 теста в...

Intel Dual Core 1,8 Ghz, 1 mb cache e2140 или Pentium 4 3,2 Ghz 2 mb cache 800mhz - что быстрее? - Компьютерное железо
Что быстрее работает ? Intel Dual Core 1,8 Ghz, 1 mb cache e2140 или Pentium 4 3,2 Ghz 2 mb cache 800mhz bus:huh:

Мисс Никто / Miss Nobody
В 2010 году вышел это фильм, посмотрел я его вчера... Не то, чтобы фильм такой классный, что сподвиг меня на создание целой темы, нет... ...

Cache - Objective-C
Всем доборое время суток! Я отправляю на Сервер запрос и он мне присылает данные JSON после чего я пропарсил JSON полученные...

WP Super Cache - WordPress
1. Если добавляется новая запись она становится видна на главной странице? 2. Если запись отредактировали изменяется ли кэш сразу?...

Cache-Control - nginx
Есть php файл с javascript. Он отдает заголовки кэширования. <? $maxAge = 2592000; header ("Content-Type: application/x-javascript;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.09.2013, 20:54     Cache miss #2
Что за cache miss?
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 20:56  [ТС]     Cache miss #3
Цитата Сообщение от Nekto Посмотреть сообщение
Что за cache miss?
.
Промахи кеша процессора
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.09.2013, 21:01     Cache miss #4
Цитата Сообщение от stawerfar Посмотреть сообщение
Это как-то связано с С++, а тем более С++ для начинающих? О.о
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 21:06  [ТС]     Cache miss #5
Цитата Сообщение от Nekto Посмотреть сообщение
Это как-то связано с С++, а тем более С++ для начинающих? О.о
C C++ это связано так как приведенный код выше был на языке C++.
А архитектуру процессора (в целом) программисты должны знать еще до изучения C++ или каких то ни было серьезных языков. Следовательно начинающий программисту было бы не плохо знать при каких конструкциях условного оператора будет меньше промахов во время выполнения программы, что бы уже с озов писать нормальный код не вешая всю оптимизацию на компиляторы.
P.S (Тем более компилятор компилятору рознь)
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.09.2013, 21:10     Cache miss #6
Идите дальше учить матчасть. В частности, разницу между кеш-промахами и ошибками предсказателя переходов. Эффективность данного кода слабо зависит от самих условных операторов. Если уж так хочется поизучать кеши, то возьмите какие-нибудь развёрнутые списки.

И орфографию тоже (пишется: "азы") неплохо бы подтянуть. И верьте в компиляторы. И процессоры. На них потрачено столько человеко-часов, что они редко когда оказываются глупее отдельно взятого человека.
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 21:13  [ТС]     Cache miss #7
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Идите дальше учить матчасть. В частности, разницу между кеш-промахами и ошибками предсказателя переходов. Эффективность данного кода слабо зависит от самих условных операторов. Если уж так хочется поизучать кеши, то возьмите какие-нибудь развёрнутые списки.
Мда... Мне очень кажется, с вероятностью 1.0 что вы заблуждаетесь в Вашем утверждении по поводу условных операторов и использования условных операторов типа else if или того хуже switch. (Естественно речь идет без контекста оптимизации кода компилятором)
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
15.09.2013, 21:19     Cache miss #8
stawerfar, это вещь достаточно специфическая
я не сильно представляю теорию, но практически можно померить (cachegrind, или специфические тулы от производителей процессоров)
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 21:22  [ТС]     Cache miss #9
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
И орфографию тоже (пишется: "азы") неплохо бы подтянуть. И верьте в компиляторы. И процессоры. На них потрачено столько человеко-часов, что они редко когда оказываются глупее отдельно взятого человека.
Я тут не бодаться пришел с Вами если что, а по поводу моего правописания, то знаете анекдот про программиста который не умел писать...? Я верю в компиляторы, но вы вместо того что бы пытаться прыгнуть выше головы ответили бы на вопрос. Потому что вы не учли может быть я буду использовать свой "тупой" компилятор некого языка, под программируемый свой контроллер. По этому если не можете сказать чего по теме лучше не засоряйте эфир разборками типа у кого больше яйца.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.09.2013, 21:23     Cache miss #10
Цитата Сообщение от stawerfar Посмотреть сообщение
Мда... Мне очень кажется, с вероятностью 1.0 что вы заблуждаетесь в Вашем утверждении по поводу условных операторов и использования условных операторов типа else if или того хуже switch. (Естественно речь идет без контекста оптимизации кода компилятором)
В данном конкретном коде — слабо зависит. Все эти клёвые ифы без циклов. Один промах предсказателя — ну тактов 20. Пара каких-нибудь кеш-промахов в этом "do something" с лихвой их перекроет. Я уж молчу, если операционке вздумается именно в этот момент отдать процессор другому потоку. По сравнению с переключением контекста все ваши три ифа — капля в море. Точно так же как переключение контекста по сравнению с неэффективным алгоритмом.

Цитата Сообщение от stawerfar Посмотреть сообщение
Я тут не бодаться пришел с Вами если что, а по поводу моего правописания то знаете анекдот про программиста который не умел писать...? Я верю в компиляторы, но вы вместо того что бы пытаться прыгнуть выше головы ответили бы на вопрос. Потому что вы не учли может быть я буду использовать свой "тупой" компилятор некого я зыка, под программируемый свой контроллер. По этому если не можете сказать чего по теме лучше не засоряйте эфир разборками типа у кого больше яйца.
Вот у своего особого компилятора и надо спрашивать, не? А также у мануала к контроллеру. А не об абстрактных ифах.
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 21:27  [ТС]     Cache miss #11
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
три ифа — капля в море
Да кто сказал что их три будет? А если код 100 000 строк то сколько будет? А если 200 000? То может получиться что и не такая уж капля.
Тем более что я хочу писать это на своем программируемом микроконтроллере, а там количество логических элементов не так уж много, не говоря об остальных ресурсах. По этому хотелось бы ответа по конкретней.
И все же какой будет быстрее угадан?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.09.2013, 21:30     Cache miss #12
Цитата Сообщение от stawerfar Посмотреть сообщение
И все же какой будет быстрее угадан?
Второй снизу по вторникам и первый в остальные дни. Или одиннадцатый, если их число делится на 71231.

А по поводу памяти и кешей есть прекрасная вводная статья.
ValeryS
Модератор
6534 / 5000 / 460
Регистрация: 14.02.2011
Сообщений: 16,630
15.09.2013, 21:33     Cache miss #13
Цитата Сообщение от stawerfar Посмотреть сообщение
Мне очень кажется, с вероятностью 1.0 что вы заблуждаетесь в Вашем утверждении по поводу условных операторов и использования условных операторов типа else if или того хуже switch.
а как по вашему организован свитч?
далее во всех приведенных кодах процессор ошибется примерно одинаково да и вылавливать блох в разовом коде бессмыслено
а вот в таком коде(условный)
C++
1
2
3
for(int i=0;i<100;i++)
 if(i<75)
.............
процессор может ошибиться пару раз при начальных итерациях, потом начнет предсказывать истину, потом еше пару раз ошибется при i больше или равно 75

если хочется вообще убыстрить код отказывайся от ветвлений

Добавлено через 3 минуты
Цитата Сообщение от stawerfar Посмотреть сообщение
Да кто сказал что их три будет? А если код 100 000 строк то сколько будет? А если 200 000? То может получиться что и не такая уж капля.
Тем более что я хочу писать это на своем программируемом микроконтроллере, а там количество логических элементов не так уж много, не говоря об остальных ресурсах.
и что там тоже есть кэш 2 уровня?
оптимизация так не делается
сначала пишется прога потом проходится профиловшиком выискиваются слабые места и их уже чистишь
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 21:37  [ТС]     Cache miss #14
Цитата Сообщение от ValeryS Посмотреть сообщение
кэш 2 уровня
нет но его можно легко реализовать ручками, как и всю логику процессора. Я говорю о плисине.
По поводу профилировщика, я понимаю о чем Вы. Я просто изначально хотел лишь получить совет на по ставленый в посте вопрос.
ValeryS
Модератор
6534 / 5000 / 460
Регистрация: 14.02.2011
Сообщений: 16,630
15.09.2013, 21:53     Cache miss #15
Цитата Сообщение от stawerfar Посмотреть сообщение
Я просто изначально хотел лишь получить совет на по ставленый в посте вопрос.
изначально никто не знает
предсказания даются на основании каких то данных
а при первом запуске/проходе откуда они
Цитата Сообщение от stawerfar Посмотреть сообщение
нет но его можно легко реализовать ручками, как и всю логику процессора. Я говорю о плисине.
ой, не уверен
Интел этим не одно десятилетие занимается и то не все идеально
да и зачем микроконтроллеру кэш? там (у всех мне знакомых) гарвардская архитектура
программа лежит в памяти, смысл закачивать

попробуй stm32 достаточно дешевые адресуют до 4 гБайт памяти
и самое вкусное все и переферия и память и регистры все в одном сегменте, поначалу неудобно но быстро привыкаешь

Добавлено через 5 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
изначально никто не знает
могу только предположить что изначально процессор код закачивает подряд
но компилятор вправе поменять твое условие, тем более если оно сложное, на обратное
т.е
C++
1
2
3
4
if(m)
 cod1
else
 cod2
может легко поменять на

C++
1
2
3
4
if(!m)
 cod2
else
 cod1
чтобы уменьшить количество переходов

почитай К Касперски, но все что я видел он пишет для ПСишных процессоров
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 21:53  [ТС]     Cache miss #16
Хм..? stm32 - говоришь. Не знаю что за зверь, но попробую узнать побольше. Большое спасибо за инфу.
ValeryS
15.09.2013, 22:01
  #17

Не по теме:

Цитата Сообщение от stawerfar Посмотреть сообщение
stm32 - говоришь. Не знаю что за зверь, но попробую узнать побольше. Большое спасибо за инфу.
32 разрядные микроконтроллеры на борту куча всяких вкусностей USB, несколько USART,таймеры, часы реального времени
а самое главное камни одной серии подходят друг другу по ножкам, не понравился один впаиваешь по мощнее, плату переразводить не надо
есть отладочные комплекты стоят от 200 до 500 рублей, и сами камни достаточно дешевые
вот например http://cxem.net/mc/mc139.php

diagon
Higher
1926 / 1192 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
15.09.2013, 23:24     Cache miss #18
Хм. А причем тут ошибки предсказателя и особенно кэш?
Вроде ж очевидно, что первый код быстрее просто потому, что при нахождении нужного элемента дальнейшие проверки не производятся. Второй же код всегда будет выполнять все проверки. Ну, вообще да, предсказатель уменьшит оверхед на ненужные проверки во втором коде, но в первом коде этот оверхед отсутствует вообще.
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 23:27  [ТС]     Cache miss #19
Цитата Сообщение от ValeryS Посмотреть сообщение

Не по теме:


32 разрядные микроконтроллеры на борту куча всяких вкусностей USB, несколько USART,таймеры, часы реального времени
а самое главное камни одной серии подходят друг другу по ножкам, не понравился один впаиваешь по мощнее, плату переразводить не надо
есть отладочные комплекты стоят от 200 до 500 рублей, и сами камни достаточно дешевые
вот например http://cxem.net/mc/mc139.php

А как у них с адаптацией под linux?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2013, 23:29     Cache miss
Еще ссылки по теме:

Mozilla cache - Софт
Где кеш мозиллы??? спасибо.

Second level cache - Java EE
Всем доброго дня. В такой ситуации: есть dao-либка, в настройкай которой мы включаем кэш второго уровня, и эта либка подрубается к двум...

cache manifest - HTML, CSS
кто шарит помогите настроить, всегда статус 0 &lt;!DOCTYPE HTML&gt; &lt;html manifest=&quot;tocache.manifest&quot;&gt; &lt;html&gt; &lt;head&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alex_x_x
15.09.2013, 23:29     Cache miss
  #20

Не по теме:

Цитата Сообщение от stawerfar Посмотреть сообщение
А как у них с адаптацией под linux?
там в основном линукс либо всякие real time os

Yandex
Объявления
15.09.2013, 23:29     Cache miss
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru