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

Cache miss - C++

Восстановить пароль Регистрация
 
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 20:50     Cache miss #1
Всем привет.
Хочу разобраться с 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...
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.09.2013, 20:54     Cache miss #2
Что за cache miss?
stawerfar
 Аватар для 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
 Аватар для 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
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.09.2013, 21:10     Cache miss #6
Идите дальше учить матчасть. В частности, разницу между кеш-промахами и ошибками предсказателя переходов. Эффективность данного кода слабо зависит от самих условных операторов. Если уж так хочется поизучать кеши, то возьмите какие-нибудь развёрнутые списки.

И орфографию тоже (пишется: "азы") неплохо бы подтянуть. И верьте в компиляторы. И процессоры. На них потрачено столько человеко-часов, что они редко когда оказываются глупее отдельно взятого человека.
stawerfar
 Аватар для 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
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
15.09.2013, 21:19     Cache miss #8
stawerfar, это вещь достаточно специфическая
я не сильно представляю теорию, но практически можно померить (cachegrind, или специфические тулы от производителей процессоров)
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 21:22  [ТС]     Cache miss #9
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
И орфографию тоже (пишется: "азы") неплохо бы подтянуть. И верьте в компиляторы. И процессоры. На них потрачено столько человеко-часов, что они редко когда оказываются глупее отдельно взятого человека.
Я тут не бодаться пришел с Вами если что, а по поводу моего правописания, то знаете анекдот про программиста который не умел писать...? Я верю в компиляторы, но вы вместо того что бы пытаться прыгнуть выше головы ответили бы на вопрос. Потому что вы не учли может быть я буду использовать свой "тупой" компилятор некого языка, под программируемый свой контроллер. По этому если не можете сказать чего по теме лучше не засоряйте эфир разборками типа у кого больше яйца.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 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
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 21:27  [ТС]     Cache miss #11
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
три ифа — капля в море
Да кто сказал что их три будет? А если код 100 000 строк то сколько будет? А если 200 000? То может получиться что и не такая уж капля.
Тем более что я хочу писать это на своем программируемом микроконтроллере, а там количество логических элементов не так уж много, не говоря об остальных ресурсах. По этому хотелось бы ответа по конкретней.
И все же какой будет быстрее угадан?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.09.2013, 21:30     Cache miss #12
Цитата Сообщение от stawerfar Посмотреть сообщение
И все же какой будет быстрее угадан?
Второй снизу по вторникам и первый в остальные дни. Или одиннадцатый, если их число делится на 71231.

А по поводу памяти и кешей есть прекрасная вводная статья.
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,043
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
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 21:37  [ТС]     Cache miss #14
Цитата Сообщение от ValeryS Посмотреть сообщение
кэш 2 уровня
нет но его можно легко реализовать ручками, как и всю логику процессора. Я говорю о плисине.
По поводу профилировщика, я понимаю о чем Вы. Я просто изначально хотел лишь получить совет на по ставленый в посте вопрос.
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,043
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
 Аватар для 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
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
15.09.2013, 23:24     Cache miss #18
Хм. А причем тут ошибки предсказателя и особенно кэш?
Вроде ж очевидно, что первый код быстрее просто потому, что при нахождении нужного элемента дальнейшие проверки не производятся. Второй же код всегда будет выполнять все проверки. Ну, вообще да, предсказатель уменьшит оверхед на ненужные проверки во втором коде, но в первом коде этот оверхед отсутствует вообще.
stawerfar
 Аватар для 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
Еще ссылки по теме:

cache chrome C# ASP.NET
cache manifest HTML, CSS
WordPress WP Super Cache

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

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

Не по теме:

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

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

Текущее время: 19:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru