Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какой из методов итерации лучше, итераторы или индекс 
:(
    Опции темы
djamshud
Дата 18.12.2009, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



В векторе он не быстрее, а может даже наоборот. Обращение по индексу - прямой доступ к данным без прослойки в виде итератора.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 18.12.2009, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, обращение по индексу - это *(base+index) а обращение через итератор это *iterator.
feel the difference
PM MAIL ICQ   Вверх
djamshud
Дата 19.12.2009, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



GoldFinch, 

Код

int main() {
std::vector<int>vector(0xFFFFFF);
for(int i=0;i<10;i++)
for(std::vector<int>::iterator i=vector.begin();i!=vector.end();i++)
*i=0;
return 0;
}


Код

$ g++ -O0 vector.cpp -o vector && time ./vector

real    0m4.514s
user    0m4.388s
sys     0m0.040s


Код

int main() {
std::vector<int>vector(0xFFFFFF);
for(int i=0;i<10;i++)
for(int i=0;i<vector.size();i++)
vector[i]=0;
return 0;
}


Код

$ g++ -O0 vector.cpp -o vector && time ./vector

real    0m1.288s
user    0m1.227s
sys     0m0.034s


feel the difference 


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 19.12.2009, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, и что? я не юзаю гцц, я хз что это за время, и плохая оптимизация гцц - проблемы гцц

если ты хотел этим доказать что гцц - плохой компилятор, тебе это удалось, поздравляю

Это сообщение отредактировал(а) GoldFinch - 19.12.2009, 00:34
PM MAIL ICQ   Вверх
djamshud
Дата 19.12.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



GoldFinch, а при чем тут оптимизация? Мы же говорим об идее итератор Vs индекс, а не о том, как ее извратит оптимизатор. Именно поэтому оптимизация была совсем выключена.

Про цифры поясню. Процессор работает в двух режимах (реально может в большем количестве) - режиме пользователя (обычный режим, числодробления и пр) и режиме ядра (это системные вызовы, обращение к железу). Программа с итератором выполнялась 4.388 секунды в режиме пользователя и 0.040 - в режиме ядра. Всего она "прожила" 4.514 секунд (процессор был занят не толькой ей, поэтому sys+usr!=real). Программа с индексом работала почти в четыре(!) раза меньше, т.е. быстрее.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 19.12.2009, 00:44 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, жги еще

Добавлено через 2 минуты и 48 секунд
хоть и говорили недавно, что без профайлера нельзя ничего сказать о быстродействии кода,
но всетаки программисту надо самому понимать что он делает и во что компилится его код, иначе это будет называться 100%-м быдлокодингом.
PM MAIL ICQ   Вверх
djamshud
Дата 19.12.2009, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



>хоть и говорили недавно, что без профайлера нельзя ничего сказать о быстродействии кода,
но всетаки программисту надо самому понимать что он делает и во что компилится его код, иначе это будет называться 100%-м быдлокодингом.

И это говорит человек, уповающий на оптимизацию компилятора? Ууух, жгунишка!

Добавлено через 2 минуты и 9 секунд
>без профайлера нельзя ничего сказать о быстродействии кода

Т.е. на самом деле четырехкратный слив как бэ намекает нам, что программа просто разминается перед тем, как попасть в профайлер? Там то она точно даст жару!

Добавлено через 10 минут и 14 секунд
>если ты хотел этим доказать что гцц - плохой компилятор, тебе это удалось, поздравляю

Посмеялся. Блажен неведающий.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
fry
Дата 19.12.2009, 03:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: нет
Всего: 3



Для Zhekin,
Опред. "итерация"
И я с этим согласен.
Цитата

Какая разница между двумя способами итерации?

По твоим примерам, небольшая, однако итераторы, как мне думается, следует применять в конструкциях вроде стандартных алгоритмов или при необходимости задания некоторого порядка следования элементов при итерации (некий "интеллектуальный" вариант). В остальных случаях дело за автором кода.

ЗЫ
Сильно ИМХО: В остальных случаях предпочитаю классический вид обхода элементов массива. Думается он как-то нагляднее показывает работу кода, чем все эти .begin(), .end(), "..элемент, следующий за последним..." и остальное, т.е., иными словами, как-то проще читать код.

PM MAIL   Вверх
andrew_121
Дата 19.12.2009, 06:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(GoldFinch @ 19.12.2009,  00:32)
djamshud, и что? я не юзаю гцц, я хз что это за время, и плохая оптимизация гцц - проблемы гцц

если ты хотел этим доказать что гцц - плохой компилятор, тебе это удалось, поздравляю

не гони. не раз было доказано, что gcc оптимизирует превосходно, и поставляемая с ним stl лучше микрософтофской.

Добавлено @ 06:16
Цитата(djamshud @  19.12.2009,  00:50 Найти цитируемый пост)
Посмеялся. Блажен неведающий. 

 smile 

Это сообщение отредактировал(а) andrew_121 - 19.12.2009, 06:16


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Леопольд
Дата 19.12.2009, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: нет
Всего: 13



Я последнее время предпочитаю такой способ smile

Код

#include <vector>
#include <boost/foreach.hpp>
...
std::vector<Class> a;
...
BOOST_FOREACH(Class iter, a){
   iter.foo();
   iter.getElement() = calculateSomething();
   ...
}


Удобно.

Добавлено через 6 минут и 28 секунд
Цитата(djamshud @  18.12.2009,  23:21 Найти цитируемый пост)
В векторе он не быстрее, а может даже наоборот. Обращение по индексу - прямой доступ к данным без прослойки в виде итератора. 

Вероятнее всего, после оптимизации, разницы в скорости доступа не будет вообще. Ни там ни там нет проверок на выход за границы массива. Почти любой современный компилятор способен на это.

Есть ещё std::vector<Type>::at


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
djamshud
Дата 19.12.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



Леопольд, да оптимизация практически сравнивает показатели.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
W4FhLF
Дата 19.12.2009, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



Цитата(Леопольд @  19.12.2009,  09:45 Найти цитируемый пост)
Удобно.


И медленно. 

Тогда уж так:

Код

BOOST_FOREACH(Class& iter, a){


Цитата(Леопольд @  19.12.2009,  09:45 Найти цитируемый пост)
Есть ещё std::vector<Type>::at


Тоже штука тормозная. Хотя и безопасная. smile 







--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Lazin
Дата 19.12.2009, 16:02 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(djamshud @  19.12.2009,  00:50 Найти цитируемый пост)
Т.е. на самом деле четырехкратный слив как бэ намекает нам, что программа просто разминается перед тем, как попасть в профайлер? Там то она точно даст жару!


Цитата(djamshud @  19.12.2009,  12:31 Найти цитируемый пост)
да оптимизация практически сравнивает показатели


ну и где слив? smile 
в отладочной версии, без оптимизации итератор будет работать медленно, оптимизация должна свести работу с итератором к работе с простым указателем, так-как по факту, в коде должно происходить именно это,  доступ к памяти через указатель smile 
а вообще да, лучше пользоваться индексами, если не предполагается смена типа контейнера, потому-что если ты используешь индексы, а потом выясняется, что тебе нужно использовать не вектор, а скажем список, то придется все переписывать
PM MAIL Skype GTalk   Вверх
djamshud
Дата 19.12.2009, 16:38 (ссылка)  | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



Lazin, не передергивайте. Во-первых, отладочная версия и без оптимизации - совершенно разные вещи. Во-вторых изначально я и написал, что индексы выиграют если и выиграют, то чуть-чуть, а про "слив" - это ответ на совсем другое заявление одного товарища. Stl-итератор запрятывает реальную работу с указателем за слои абстракций, поэтому работа через него однозначно медленнее, это все, что я хотел сказать. Оптимизация вытаскивают его из лужи, но речь то шла не про нее.

>если ты используешь индексы, а потом выясняется, что тебе нужно использовать не вектор, а скажем список, то придется все переписывать

У stl-списка нет интерфейса доступа к объектам через индекс? Бугагашеньки:).


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
bsa
Дата 19.12.2009, 16:56 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Цитата(djamshud @  19.12.2009,  16:38 Найти цитируемый пост)
Stl-итератор запрятывает реальную работу с указателем за слои абстракций, поэтому работа через него однозначно медленнее
работа с ним медленней, когда отключена оптимизация и компилятор весь код, который следовало бы встроить, делает в виде вызовов функций. Именно поэтому итератор и сливает, так как там этих вызовов больше выходит. С другой стороны, тот же доступ по индексу в векторе будет медленней, чем в простом массиве. И проблема тут не в компиляторе или идеологии работы с массивами, а в том, что генерируется специальный код, который легко отлаживать.

PM   Вверх
GoldFinch
Дата 19.12.2009, 17:52 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Цитата(djamshud @  19.12.2009,  16:38 Найти цитируемый пост)
У stl-списка нет интерфейса доступа к объектам через индекс? Бугагашенькиsmile. 

ты в курсе что такое список?)
PM MAIL ICQ   Вверх
djamshud
Дата 19.12.2009, 20:36 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



>ты в курсе что такое список?)

Да, и не вижу причины, по которой к элементу списка нельзя обратиться по индексу.

ЗЫ. Прежде чем язвить, ознакомся с матчастью или погляди в сторону других библиотек (хинт: Qt). Сначала про gcc глупость ляпнул, теперь про список... Хоть бы учился на собственных ошибках, что ли.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
bsa
Дата 19.12.2009, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



djamshud, у STL есть политика - не давать ту функциональность, которую не заказывали. Т.е. если списку добавить индексированный доступ, то он будет очень медленно работать (линейная скорость), или класс будет потреблять больше ресурсов. В первом случае, это будет подталкивать писать неэффективный код. Во втором случае вообще бред. Мне нужен список, зачем мне дополнительная функциональность? Зачем я должен за нее платить ради пары процентов новичков, которые без нее никак не могут?
PM   Вверх
fry
Дата 19.12.2009, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: нет
Всего: 3



В случае с вектором полностью присоединяюсь к Lazin по части скорости доступа. Те, кто  говорит о понижении скорости при обращении через итератор, тот не до конца уяснил что такое шаблоны и их код после оптимизации. Как ни крути , а без оптимизации не обойтись и сравнивать скорости работы этих двух механизмов, тем более без оптимизации - дело не  благородное. Разница в скорости без оптимизации не умоляет универсальности использования итераторов. Просто два механизма существуют для несколько разных целей, а их скорость с оптимизацией лишь говорит свое "слово" за использование итераторов. Другое дело личная приверженность в написании кода к классическому механизму обращения.
PM MAIL   Вверх
djamshud
Дата 19.12.2009, 22:40 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



bsa, время последовательеного прохода по списку с помощью итератора или индекса - равно. Точнее оно становится равным после тривиальной оптимизации (не компилятора, а разработчика, реализующего список). Никаких дополнительных затрат в виде потери производительности или жора памяти нет.

А при непоследовательном обращении к элементам механизм с индексов еще и упрощает код. Таким образом профит во все поля. ЧТД.

Ваше заявление о "новичках" безосновательно: программисту нужны уникальные _свойства_ контейнера, а не способ их извлечения. Итератор есть, но должен был быть и индекс.

ЗЫ. Сам итераторы использую лишь при сложной логике проходе по контейнеру, то есть когда производить расчет индексов - очевидный идиотизм.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 19.12.2009, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, такая бы уверенность хороша когда она подкреплена знаниями, но это не про тебя

лучше выучи матчасть, а потом делай такие громкие заявления
PM MAIL ICQ   Вверх
djamshud
Дата 19.12.2009, 23:02 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



Мальчик, иди в школу. Найдешь, что сказать, возвращайся.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 19.12.2009, 23:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, не, завтра воскресенье - не пойду

алсо ты можешь рассказать в каких случаях нужно использовать обращение по индексу к элементам списка?

Это сообщение отредактировал(а) GoldFinch - 19.12.2009, 23:08
PM MAIL ICQ   Вверх
djamshud
Дата 19.12.2009, 23:22 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



GoldFinch, ну тогда домашнее задание как следует подготовь:).

ЗЫ. Не нужно, а можно. А можно всегда, кроме тех случаев, когда ты пользуешься STLевской или еще какой-нибудь обрезанной реализацией списка.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 19.12.2009, 23:53 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, так тебе же писали, что сложность [] у любого списка O(n), поэтому его "всегда" использовать нельзя, только в особых случаях, и вот я хз в каких

Это сообщение отредактировал(а) GoldFinch - 19.12.2009, 23:53
PM MAIL ICQ   Вверх
djamshud
Дата 20.12.2009, 00:00 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



GoldFinch, перечитай сообщение, содержащее запредельное количество "уверенности, не подкрепленной знаниями". Перечитывай до просветления.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 20.12.2009, 00:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, может ты еще и доказать можешь, что
Цитата(djamshud @  19.12.2009,  22:40 Найти цитируемый пост)
время последовательеного прохода по списку с помощью итератора или индекса - равно. 

?
PM MAIL ICQ   Вверх
mes
Дата 20.12.2009, 00:11 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(djamshud @  19.12.2009,  22:22 Найти цитируемый пост)
. можно всегда, кроме тех случаев, когда ты пользуешься STLевской или еще какой-нибудь обрезанной реализацией списка

утверждение безосновательно.. "можно " в вашем выражении означает "можно, так как можно притянуть за уши", а не "можно, так как является альтернативным вариантом"


Цитата(djamshud @  19.12.2009,  23:00 Найти цитируемый пост)
перечитай сообщение, содержащее запредельное количество "уверенности, не подкрепленной знаниями". Перечитывай до просветления. 

тон, честно говоря, оставляет желать лучшего..тем более что отсыл идет в "пустоту"


Добавлено @ 00:16
Цитата(djamshud @  19.12.2009,  22:22 Найти цитируемый пост)
. можно всегда. 

это называется (преждевременной, необдуманной) пессимизацией.

Это сообщение отредактировал(а) mes - 20.12.2009, 00:17


--------------------
PM MAIL WWW   Вверх
Леопольд
Дата 20.12.2009, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: нет
Всего: 13



Цитата(W4FhLF @  19.12.2009,  13:38 Найти цитируемый пост)
BOOST_FOREACH(Class& iter, a){

Угу, точно, лучше по ссылке smile

Цитата(djamshud @  19.12.2009,  20:36 Найти цитируемый пост)
Да, и не вижу причины, по которой к элементу списка нельзя обратиться по индексу.

Предлагаю реализовать поиск делением пополам в отсортированном списке и в векторе с доступом по индексу. 
Так же можно сделать быструю сортировку, по примеру qsort.


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
bsa
Дата 20.12.2009, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196




 ! 
bsa
djamshud, прекращай уже троллинг. Ты пытаешься вести себя как профессионал, хотя иногда такое сморозишь!

PM   Вверх
bsa
Дата 20.12.2009, 01:20 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Для программы:
Код
#include <vector>
int main()
{
   std::vector<int> x(100,0);
   for(int i = 0; i < 100; ++i)
       x[i] = 10;
   return 0;
}
Получается код:
Код
.L6:
        movl    $10, (%rax,%rdx) ;!!!!
        addq    $4, %rdx
        cmpq    $400, %rdx  ;!!!!
        jne     .L6
Тогда как для:
Код
#include <vector>
int main()
{
   std::vector<int> x(100,0);
   for(std::vector<int>::iterator i = x.begin(), e = x.end(); i != e; ++i)
       *i = 10;
   return 0;
}
Создается код:
Код
.L10:
        movl    $10, (%rsi) ;!!!!
        addq    $4, %rsi
        cmpq    %rsi, %rcx  ;!!!!
        jne     .L10

Вывод, второй код работает не медленнее первого, более того, скорее всего, даже быстрее, так как вычислительных операций процессором производится гораздо меньше: movl    $10, (%rsi) и movl    $10, (%rax,%rdx) немного отличаются, так как для выполнения второй необходимо сначала сложить регистры rax и rdx

Это сообщение отредактировал(а) bsa - 20.12.2009, 01:23
PM   Вверх
djamshud
Дата 20.12.2009, 01:47 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



>djamshud, может ты еще и доказать можешь

Я это делал собственноручно. Пока что не покажу, мучайся, думай. Попробуй таки напрячь мозг или чем ты обычно это делаешь.

>утверждение безосновательно.. "можно " в вашем выражении означает "можно, так как можно притянуть за уши", а не "можно, так как является альтернативным вариантом"

"Можно" всю жизнь означало "если хочется". Еще одно значение - позволение, но я, очевидно, никому разрешений на что-либо не выдаю.

>тон, честно говоря, оставляет желать лучшего..тем более что отсыл идет в "пустоту"

Ищущий всегда найдет. Посмотрите сообщение товарища перед вами.

bsa, я не троллю). И вообще они меня обижают, дайте им ремня! :D.

bsa, если компилятор способен в итоге так компактно развложить итератор, то это просто здорово. На примере, что я делал в начале топика, с простым -O3, итератор чуток отставал на 0.05 - 0.01 секунды, но асм не смотрел, ибо ни бум бум.

ЗЫ! А почему тему в холиворы пренесли? Черт, вот так вот стоит высказать свой маленький емнипчик и тут же топик скатывается в... Ну понятно в общем.:)

Добавлено @ 01:50
Блин, я отчаянно защищаюсь, а мне еще и предупреждения вкатывают. Ну вас, злые вы.

Это сообщение отредактировал(а) djamshud - 20.12.2009, 01:50


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 20.12.2009, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(djamshud @  20.12.2009,  00:47 Найти цитируемый пост)
"Можно" всю жизнь означало "если хочется".

"можно" всегда (в програмировании) означало "хуже не будет", а за "хочется" полагаю (хоть собственного опыта и нет) начальник бы показал бы где некие членистоногие зимуют,
расставив точки над i в этой теме ))


Это сообщение отредактировал(а) mes - 20.12.2009, 02:37


--------------------
PM MAIL WWW   Вверх
GoldFinch
Дата 20.12.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



bsa, ох уж этот страшный AT&T синтаксис %)

Добавлено через 5 минут и 35 секунд
Цитата(djamshud @  20.12.2009,  01:47 Найти цитируемый пост)
итератор чуток отставал на 0.05 - 0.01 секунды,

то как ты меряешь время - это ты меряешь что угодно, но не производительность алгоритмов
для нормальных измерений надо мерять такты, хотябы используя просто rdtsc (__rdtsc() в msvc и тоже какой-то интринсик в гцц)
при этом у процесса должен быть максимальный приоритет
PM MAIL ICQ   Вверх
djamshud
Дата 21.12.2009, 01:37 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



GoldFinch, я меряю при равных условиях - на бездействующей системе. Когда что-то идет нос к носу, проводится серия опытов. И заметь, показатели user и sys достойны доверия, т.к. показывают, сколько программа пробыла прямо в процессоре.

Да, это не лабораторные условия, ну так и я не лаборант. Использумый мной метод просто показывает, что программа А работает быстрее программы Б примерно в столько раз. Надеюсь, ты не станешь утверждать, что "реальные" тактовые измерения будут давать результат в точности до наоборот?

mes, "хуже не будет" по смыслу тоже подходит.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 21.12.2009, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Цитата(djamshud @  21.12.2009,  01:37 Найти цитируемый пост)
показывают, сколько программа пробыла прямо в процессоре

что то я сомневаюсь что ты представляешь как работает ОС и железо

Цитата(djamshud @  21.12.2009,  01:37 Найти цитируемый пост)
ну так и я не лаборант

может еще и не программист?

Цитата(djamshud @  21.12.2009,  01:37 Найти цитируемый пост)
Использумый мной метод просто показывает, что программа А работает быстрее программы Б 

если и показывает - то неточно, и точно не показывает разницу между двумя способами итерации

PM MAIL ICQ   Вверх
djamshud
Дата 21.12.2009, 14:30 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



>что то я сомневаюсь что ты представляешь как работает ОС и железо

Что-то я сомневаюсь, что ты хотя бы думаешь, прежде чм писать. Ну что ж, давай, гуру, изложи тезисно семитомный труд "как работает ОС и железо", я посмеюсь.

>может еще и не программист?

Ты так говоришь "программист", как будто это что-то особенное. Самомнение на высоте! Неподкрепленное знаниями(с), ага?

>если и показывает - то неточно, и точно не показывает разницу между двумя способами итерации

Да, оно показывает, что  Виллариба собрала урожай и гуляет, а Виллабаджа все ждет профайлер, чтобы потом ВНЕЗАПНО начать быстрее работать.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Shaggie
Дата 21.12.2009, 14:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: нет
Всего: 72



У нас появился толстый тролль  smile 


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
GoldFinch
Дата 21.12.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



я забыл, в этом разделе счетчик постов идет?
PM MAIL ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.1400 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.