Russian Qt Forum
Май 04, 2024, 09:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Вопросы студентам  (Прочитано 26967 раз)
Bepec
Гость
« Ответ #15 : Февраль 20, 2016, 17:49 »

Оптимизация сейчас уходит в прошлое, особенно на десктопах.
Конечно есть тот минимум, который необходимо знать и использовать, вроде уменьшения повторяющихся блоков кода, но компиляторы справляются всё лучше и лучше.

Слышал историю, как один разработчик переписывал ради оптимизации функцию на асм. В результате через 2 недели получилась оптимизация на 4 мс.

Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #16 : Февраль 20, 2016, 19:16 »

Оптимизация сейчас уходит в прошлое, особенно на десктопах.
Конечно есть тот минимум, который необходимо знать и использовать, вроде уменьшения повторяющихся блоков кода, но компиляторы справляются всё лучше и лучше.

Смотря что называть "десктопами". Конечно, нет особого смысла оптимизировать почтовый клиент или примитивный текстовый редактор (все равно пользователь не заметит разницы). Но когда речь идет о научных вычислениях или высокопроизводительных системах обработки данных, то как бы не всякий компилятор сможет помочь, если код изначально написан тормознуто.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #17 : Февраль 20, 2016, 20:15 »

Смотря что называть "десктопами". Конечно, нет особого смысла оптимизировать почтовый клиент или примитивный текстовый редактор (все равно пользователь не заметит разницы). Но когда речь идет о научных вычислениях или высокопроизводительных системах обработки данных, то как бы не всякий компилятор сможет помочь, если код изначально написан тормознуто.

Конечно, есть вещи, где оптимизация крайне важна. Но вот только это узкоспециализированные задачи.
Записан

Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #18 : Февраль 20, 2016, 21:01 »

Странно, почему же тогда все процессоры от интел имеют симд-инструкции, а не только узкоспециализированные Непонимающий
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Bepec
Гость
« Ответ #19 : Февраль 20, 2016, 21:34 »

Ну в 90% программ оптимизация не нужна. Достаточно просто следить за чистотой кода.

А 10% узкоспециализированных - там и писать то надо для специализированных компьютеров/плисин.

PS ну есть ещё микроконтроллеры, но там тоже всё лучше становится. Разница в мощности современных мк многократна, а по цене почти незначительна.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #20 : Февраль 20, 2016, 23:08 »

Ляпнув разок-другой чем-то типа QString::split человек уверяется что это совершенно нормально, так писать МОЖНО.

а что плохово в QString::split  ?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #21 : Февраль 20, 2016, 23:34 »


Вот неплохая статейка на эту тему

Не статья, а какое-то говно.
Собаку съел на профилировании - всегда тормозит "пара функций". Другое дело, что эти пару функций будешь переписывать месяц:)
К примеру - вот у нас есть TableView, которая постоянно вставляет-удаляет строки. И мы видим, что тормозит paintEvent (жрет 90% ядра). Ваши действия? Будем выжимать из каждой строки в нём максимум аки стандартная библиотека?

По сабжу - мы считаем, что memset написан втупую ака while(*c++) или всё мы знаем, что в современных библиотеках мемсет уже дано использует SIMD инструкции и надо быстрее них написать?

ЗЫ: присоединяюсь к вопросу про string::split.
« Последнее редактирование: Февраль 20, 2016, 23:39 от Авварон » Записан
Bepec
Гость
« Ответ #22 : Февраль 20, 2016, 23:41 »

То, что он удобен и что он потребляет ресурсы.

Т.е. проход по std::char будет выгоднее по ресурсам, но неудобнее для программиста Веселый

PS статейка шлак. Какая то невнятная отсебятина с криво опущенными графиками.  Мало того он приводит html страничку в качестве примера... Это же блестящий пример Веселый
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #23 : Февраль 20, 2016, 23:42 »


- банальная распущенность. Напр такой код вряд ли будет осуждаться на форуме
Код
C++ (Qt)
int red = qRed(image.pixel(x, y)) / 2;
int green = qQreen(image.pixel(x, y)) / 2;
int blue = qBlue(image.pixel(x, y)) / 2;
А ведь есть куда более быстрый доступ к пикселю. И, по крайней мере, никто не мешал сохранить рез-т в локальной переменной. И деление на 2 далеко не безгрешно. Но все это не считается важным, мол, "экономия на спичках".
 
Вот за такие вещи нормальный препод должен бить мокрым веником по заднице.

А что, мы не знаем, что компилятор оптимизирует деление на степени 2 в сдвиг? Хотя для работы с пикселями сдвиги нагляднее, имхо. Хотя иногда и вредны:)
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #24 : Февраль 20, 2016, 23:47 »

То, что он удобен и что он потребляет ресурсы.

это ответ про QString::split  ?
мысль не раскрыта

Записан
Bepec
Гость
« Ответ #25 : Февраль 21, 2016, 00:33 »

Ну, особо упертые типа Igors, борются за каждую инструкцию. QString::split в разы массивнее такой же конструкции на чистом C. И пусть падение быстродействия где то 0,5%, их это всё равно не устраивает.

Можете поискать, он серьёзно борется с этим и пишет об этом в каждой теме, где есть это сочетание Веселый
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #26 : Февраль 21, 2016, 01:48 »

Да пофиг на QString::split. Функция как функция, юзать удобно, и это главное. Для гуя пойдет.
Для хардкорной оптимизации - нет. Но для этого, как правило, все равно другие способы есть.
Посыл темы был, я так понимаю, в том, что мощность процессоров развращает - и народ не то что не оптимизирует,
а даже не думает об эффективности написанного говнокода. Зачем, есть же умный компилятор, а если он не разрулит,
то докинем еще памяти и проц заменим. А мозги можно выключить и передавать вектора по значению.
Как то так, в общем.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Bepec
Гость
« Ответ #27 : Февраль 21, 2016, 02:03 »

А так по сути и есть. И это называется эволюцией.

Раньше надо было все регистры знать процессора, все инструкции. Что то не так сделал - капец.
А эволюция то идёт, теперь вместо достоверного знания всех инструкций мы запоминаем конструкции языка.
А ещё дальше, я верю, будет компилятор понимающий базовые вещи на  обычном языке. И даже тогда будут находиться люди, говорящие - а вот раньше, мы писали на c++ и чтобы файл прочитать надо было написать 24 строки, а сейчас просто сказать "прочитать файл".

"Раньше было лучше..." ©
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #28 : Февраль 21, 2016, 07:35 »

А что, мы не знаем, что компилятор оптимизирует деление на степени 2 в сдвиг?
А тут все как раз наоборот Улыбающийся Если есть последующие вычисления я бы соскочил в float, т.е. делил бы на 255.0f / 2. Xотя большинство расчетов можно исполнить и в интах без потери точности, это часто сложно, а главное - загромоздит код. Тут опять мы знаем что "целочисленная арифметика намного быстрее плавающей" - но опять знаем не то и кое-как (типа "почитал/слышал" Улыбающийся)

а что плохово в QString::split  ?
Для каждой найденной подстроки создается новый QString. Все они помещаются в контейнер, который тоже нужно создать. И потом еще затратить время на удаление всего этого. Поэтому неудивительно что часто синтаксический разбор ускоряется в N раз просто вычисткой split

Да пофиг на QString::split. Функция как функция, юзать удобно, и это главное.
Ничего подобного, ф-ционал спланирован отвратно. Напр
Цитировать
1 2'\\'3        // вместо пробела попался tab
1, 2,3,  4     // пробелы так и сяк
В первом случае (после того как юзер ткнет носом) придется сначала по-колхозному заменить табы на пробелы. Во втором пооткусывать пробелы. Эти операции тоже недешевые. Где же "удобство"? А у кого-то еще хватит ума решать это через QRegExp. В итоге смех и грех - "на скриптах разбирается быстрее - вот видите, скрипты уже догнали плюсы"  Улыбающийся

Справедливости ради надо отметить что тролли учли критику и сделали QStringRef::split. Вообще QStringRef - отличный класс, практически без накладных расходов.

Конечно, есть вещи, где оптимизация крайне важна. Но вот только это узкоспециализированные задачи.
А так ли это? Напр задача разбора текстовика возникает в любой предметной области, "узкоспециализированной" ее никак не назвать. А текстовики бывают и гигабайты.
Записан
Bepec
Гость
« Ответ #29 : Февраль 21, 2016, 07:43 »

Там где разбирают текстовые файлы - там вообще пофиг на производительность.
А вот к примеру расчёт траектории, сканирование местности или же обработка поступающих данных в 10 гб/с, вот где узкая специализация. Ну ещё можно добавить системы безопасности допустим той же АЭС.
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.078 секунд. Запросов: 22.