сравнение времени выполнения операций процессором
я так скажу. хрен с два что у тебя выйдет оценить из-за всяких разных кешей и конвейеров
делаешь некий цикл на миллиард операций. засекаешь время. (секундомером )
потом добавляешь в цикл лишнюю операцию сложения. снова засекаешь. вычитаешь
неужели так сложно было придумать подобную схему эксперимента?
Посоветуйте статьи с результатамиТогда нужно как минимум писать, что за процессор ты используешь.
время затрачиваемое процессоромВремя до того момента, когда устройство выборки команд возьмется за следующую инструкцию? Или время до того момента, когда результат операции можно будет использовать?
на перезапись и на сложениеПерезапись чего и сложение чего?
в первом приближении (очень тупо, получая ошибку в разы и на порядки мог бы сделать и так:
делаешь некий цикл на миллиард операций. засекаешь время. (секундомером )
потом добавляешь в цикл лишнюю операцию сложения. снова засекаешь. вычитаешь
неужели так сложно было придумать подобную схему эксперимента?
Теоретически то да, но при этом результаты получаются шокирующие: при добавлении 2х операций сложения добавка во времени (относительно пустого цикла) более чем в 2 раза больше, чем при добавлении одной операции. при добавлении 3х и 4х операций аналогичный эффект: время растет несоразмерно.
http://habrahabr.ru/blogs/development/93263/
потом почитай еще где-нибудь как примерно работает конвейер у процессора.
а потом узнай че-нить про оптимизации компиляторов. которые выкидывают нафиг твой пустой цикл
показывай
самого кода тестанадеюсь, имеется ввиду ассемблерный вид
вдруг он в этой команде в память лезет а не в регистрах копается?
затрачиваемое процессором на перезапись и на сложениеперезапись куда? в память — это уже не совсем процессор.
в некоторых биосах можно отключить кэш процессора. Далее, нужно взять компилятор без оптимизации (чтобы получить именно инструкцию add некоторый цикл (надо придумать, какой убрать из него операцию add и через rdtsc измерить время с циклом и без. Вычесть, поделить. Возможно, стоит как-то избежать взаимодействия с памятью во время измерения.
делаешь некий цикл на миллиард операций. засекаешь время. (секундомером )как ты при этом докажешь, что не попал на какую-то особенность связанную с размером очереди команд и т.п.?
потом добавляешь в цикл лишнюю операцию сложения. снова засекаешь. вычитаешь
ты пост выше читал? ну а хотя бы начало цитируемого поста?
а зачем? это же, в общем-то, будут абстрактные попугаи, и в реальном, а не шарообразном в вакууме, приложении, на реальной системе, твоя статистика работать не будет. если есть некоторая задача, для которой существуют несколько принципиальных методов, стоит реализовать хотя бы самые затратные куски и посмотреть что будет.
взботни для начала.И еще это:
Блин, мазовую ты ссылку дал, кстати
а зачем? это же, в общем-то, будут абстрактные попугаи, и в реальном, а не шарообразном в вакууме, приложении, на реальной системе, твоя статистика работать не будет. если есть некоторая задача, для которой существуют несколько принципиальных методов, стоит реализовать хотя бы самые затратные куски и посмотреть что будет.В таком случае, почему бы не поискать подобные данные в спеках на процы? Там, по идее, должно быть указано типичное время обработки команды в тактах и даже рекомендации по выстраиванию команд. Во всяком случае, что-то такое я видел для P1 давным давно.
всем спасибо, особенно за первую ссылку. Проблема можно считать решена (в ее непригодности к реальным задачам я не сомневался, но от меня все же требовали ее решение).
Оставить комментарий
molochnik
требуется сравнить время затрачиваемое процессором на перезапись и на сложение. Посоветуйте статьи с результатами, ну или в крайнем случае как это можно самому сравнить средствами C++&