Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Допустим у нас есть два цикла: Код: plaintext 1. 2. 3. 4. 5. 6. 7. и Код: plaintext 1. 2. 3. 4. Подскажите пожалуйста, какое примерно отношение по времени между T1(время выполнения первого кода) и T2(время выполнения второго кода) ? Мне показалось что T1/T2 не стремится к 0. Или ошибаюсь ? Хотя как я понимаю стандарт это не регламентирует, и это может зависеть только от компилятора, и среды выполнения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2014, 02:46 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
SashaMercury, 1) Эти два кода имеют разное число итераций Проверьте для n=1 2) Если даже переписать второй код правильно, то я уверен что второй код медленнее на порядок, т.к. для вычисления пары координат из линейного индекса потребуется деление, которое не такое уж быстрое. Конечно при малых n теоретически может быть замедление первого кода из-за чуть более частых условных переходов. Но обычно про скорость заботятся при больших n :) Во всяком случае, если уж устранять условные переходы, то лучше разворачивать внутренний цикл с шагом в несколько итераций. Схематически: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2014, 03:44 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky1) Эти два кода имеют разное число итераций Проверьте для n=1 Вы правы. Я прошу прощение, должно быть так. Код: plaintext 1. 2. 3. 4. 5. Сегодня я подумаю о том, что вы написали ниже. А если мой вопрос касается считывания квадратной матрицы из файла размерности 1000 на 1000 например, читаю я каждый элемент Код: plaintext 1. То быстрее будет одномерный цикл по i от 0 до 10^6 -1 ? Ведь в данном случае мне не важен индекс, и я не трачу время t1. Использую каждое значение один раз, и не храню всю матрицу в памяти программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2014, 04:00 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВы правы. Я прошу прощение, должно быть так. Код: plaintext 1. Зачем вам эта 1. Циклы базирующиеся на 1, так же как и закрытые интервалы - источник багов. Пишите как и в первом коде - начиная с 0 и с полуоткрытым интервалом. Код: plaintext 1. SashaMercuryА если мой вопрос касается считывания квадратной матрицы из файла размерности 1000 на 1000 например, читаю я каждый элемент Код: plaintext 1. То быстрее будет одномерный цикл по i от 0 до 10^6 -1 ? Ведь в данном случае мне не важен индекс, и я не трачу время t1. Использую каждое значение один раз, и не храню всю матрицу в памяти программы. Забейте, ввод/вывод на порядки медленнее любых циклов, делений и прочего. Никакой практической разницы в скорости не будет. Зато код усложнится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2014, 04:23 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky Зачем вам эта 1. Циклы базирующиеся на 1, так же как и закрытые интервалы - источник багов. Пишите как и в первом коде - начиная с 0 и с полуоткрытым интервалом. Больше так делать не буду(если без этого можно будет обойтись), понял на своём примере про "источник багов". Спасибо что поправили меня. Сам я не сделал вывод на то, что сделал ошибку во многом из-за того что решил начать цикл с 1, и просто её исправил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2014, 04:42 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Вообще, ты не там золото ищешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2014, 11:56 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Саш. Вот мне как-бы всё время хочеться тебе cказать - "не парься". . Потому как ощущение непрерывной паровой бани у тебя не проходит Кейс №2 используют для обхода элементов матрицы указателем когда она задана "плоским" (plain) массивом. К примеру. В остальных случаях развёртывание цикла ничего кроме головной боли и ошибок тебе не даст. Алгоритм №1 первичен и концептуален. Алгоритм №2 это некая переработка причём не очень нужная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2014, 12:17 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
MasterZiv, mayton дело в том, что я не хочу ничего упустить. Мне нравится понимать как всё это работает, мне жутко приятно смотреть на недавний пример функции strcpy и понимать для чего нужны в её прототипе все квалификаторы, писать код, и понимать почему я делаю так, а не по другому, мне очень нравится разбираться в чужом коде, искать ошибки, или ещё больше смотреть на красивый код, или какие-нибудь элементы fe Код: plaintext 1. и понимать, что это очень красиво, потому что полностью используется оператор if, и не нужно писать if((a-b)!=0). Потому, когда я программирую, всегда думаю как это сделать лучше, как это сделать красивее, как это сделать правильно. И у меня часто возникают сомнения. И вот почему-то возникла такая мысль(почему-то двойной цикл, как мне показалось, был слишком медленный), и я решил спросить. Конечно, вопрос наверное простой и может напоминать какой-нибудь вброс, но это не так, просто не хочу упустить ничего. Кстати, месяца два назад, я решал численно ДУ, в Maple, и там мне потребовалось развернуть n^2xn^2 массив в одномерный(left_nnnn), без этого не получилось бы никак: Код: maple 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Спасибо всем за советы :) Я сделал выводы. Меня гонят ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2014, 16:18 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
SashaMercury, вобщем кури теорию Алгоритмов. Книжек по сабжу много. А на развертывании циклов ты ничего не выгадаешь. Хуже - будешь крепко бит коллегами по проекту если они увидят "результат" твоих оптимизаций. P.S. Да гоним :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2014, 16:32 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. и понимать, что это очень красиво, потому что полностью используется оператор if, и не нужно писать if((a-b)!=0). читабельнее Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2014, 16:38 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Сегодня читал статью(p.5) , согласно которой прямой цикл будет медленнее обратного. Написал такой пример, получается ровно наоборот(программа вычисляет натуральный логарифм как сумму гармонического ряда без постоянной Эйлера-Маскерони). Я что-то не так понял в той работе, или пример неудачный ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2015, 08:43 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
На ноль проверка быстрее идёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2015, 10:21 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте. Сегодня читал статью(p.5) , согласно которой прямой цикл будет медленнее обратного. Написал такой пример, получается ровно наоборот(программа вычисляет натуральный логарифм как сумму гармонического ряда без постоянной Эйлера-Маскерони). Я что-то не так понял в той работе, или пример неудачный ? ...на разных платформах, на разных компиляторах результат может быть сильно разный имхо пиши как можно понятнее, а оптимизацию, если будет нужно, делай в самый последний момент Ален И. Голуб "Правила программирования на Си и Си++": 21.1. Эффективность — часто просто пугало Я потратил несколько часов, делая одну подпрограмму более "эффективной", и не останавливался, чтобы подумать о том, как часто эта подпрограмма будет вызываться, что является пустой потерей времени в том случае, когда программа вызывается лишь один или два раза. Ваша программа должна быть непременно настолько эффективной, насколько это возможно, но вашей первоочередной заботой является сопровождение, и вы не должны приносить читаемость в жертву на алтарь эффективности. Напишите программу сперва с учетом сопровождения, затем запустите свою программу под профайлером и определите, где на самом деле есть узкие места. Будучи вооружены реальной информацией, вы теперь знаете, где стоит обменять часть читаемости на скорость, и можете вернуться и сделать это изменение. Тем не менее, вы можете включить первоначальный текст в комментарий, чтобы не потерять его. Всегда имейте в виду, что любое количество подчисток на уровне текста программы не повысит эффективность так, как это сделает лучший алгоритм. Пузырьковая сортировка будет выполняться медленно вне зависимости от того, насколько хорошо она запрограммирована ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2015, 10:28 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
На сайтах intel и AMD в разделах разработки есть хорошие рекомендательные документы по оптимизации разработки для этих архитектур. С учотом новых систем комад процессора, кешей e.t.c. Но оптимизация for для проверки на ноль можеть дать и внезапно обратный эффект если мы читаем память в "обратном" порядке. Об этом надо помнить. Кажется я уже где-то приводил одну из этих ссылок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2015, 11:27 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2015, 02:04 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Ты прочитай про O() (большое О, big O), например, у (Кормен, Лейзерсон, Ривест, Штайн)-а "Алгоритмы, построение и анализ" -- там это одна глава небольшая -- всё сразу станет ясно. Твой пример в принципе всегда работает с одинаковой сложностью , потому что число повторений smth_do одинаковое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2015, 10:25 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
MasterZivSashaMercury, Ты прочитай про O() (большое О, big O), например, у (Кормен, Лейзерсон, Ривест, Штайн)-а "Алгоритмы, построение и анализ" -- там это одна глава небольшая -- всё сразу станет ясно. Твой пример в принципе всегда работает с одинаковой сложностью , потому что число повторений smth_do одинаковое. Что такое асимптотическая сложность алгоритмов мне читать нет необходимости. Я исследовал эти циклы в контексте комментариев из статьи приведенной выше. Тут я начинал тему и этот пример больше относится к ней, вероятно, но её больше нет в Сообществе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2015, 01:31 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
Саша, ты не там золото ищешь. Все твои вопросы в этом топике это сравнение нескольких пустынь: "а вот тут на одну песчинку больше, как же так?!". В первом посте топика ты привел два кода, Анатолий над ними посмеялся. С одной стороны правильно. Но с другой, его хихиканье отвлекло внимание от главного вопроса: какое примерно отношение по времени между T1 и T2? Ответ: T1=T2. Потому что оба кода это . Все. Это финальный ответ. При этом совершенно не важно если в одном случае это будет а в другом . И человек которому нет необходимости читать что такое асимптотическая сложность алгоритмов будет понимать о чем я говорю :) Я понимаю что ты пришел из математического мира, но поверь - настоящей математики тут очень мало. Для "писать и понимать программы" нужен инженерный подход а не математический. Возьмись за ассемблер. Пора уже. Прежде чем копать алгоритмы дальше, тебе очень нужно получить физическую базу - знать что именно выполняет процессор. Попробуй вручную пооптимизировать ассемблерный код. И Саша, я тебе очень сильно советую забыть на время про Си и С++. Возьмись за другие языки. За совсем другие. И не за строго математические типа Хаскела и иже с ним, а что-нибудь приземленное: Basic, SQL, bat, javascript. Саша, поверь: тебе это нужно! Да, Си это великий язык и мать сотен других, но знать только одну вершину - это очень узколобо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2015, 02:43 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
Спасибо за советы и наставления C: Но я ещё слабо знаю Си. Как только напишу то что задумал, изучу что-нибудь ещё. Хотя больше мне ничего не нравится (из того что знаю кроме языка Си). Вот только ассемблер нужно изучить, я понимаю. Но пока трачу большую часть времени на математику, научным постоянно что-то не нравится :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2015, 02:59 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
Если в каждой из пустынь каждая песчинка будет весить на 10% меньше чем в другой, то число песчинок останется одинаковым, но вес каждой сильно повлияет на итоговый вес пустыни. Но сравнение на 0 в теле цикла не дало ожидаемого эффекта. Я пытаюсь найти контрпример к модели RAM, он наверняка должен быть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2015, 03:02 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
Вещественное деление скушало эффект. Хотя.. надо ассемблерный код смотреть. Сравнение с нулём даёт эффект на очень уж триваильных штуках типа измерения длины ASCIIZ-строки. На численном методе получился пшик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2015, 12:35 |
|
||
|
Оценка времени выполнения аналогичных циклов.
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЕсли в каждой из пустынь каждая песчинка будет весить на 10% меньше чем в другой, то число песчинок останется одинаковым, но вес каждой сильно повлияет на итоговый вес пустыни. Но сравнение на 0 в теле цикла не дало ожидаемого эффекта. Я пытаюсь найти контрпример к модели RAM, он наверняка должен бытьЕсли бы да кабы... В данных пустынях, все песчинки весят константные значения. Никаких прогрессий тут нет. Поэтому и выгадывать каждую - не эффективно. Саша, я тебя очень прошу: забудь математику, забудь Си. Поработай с другими языками. Пока ты этого не сделаешь - у тебя не будет роста в Си. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2015, 15:21 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38713892&tid=2018911]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 155ms |

| 0 / 0 |
