Ошибки, баги, вопросы - страница 2162
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Оптимизация математики: попытка использовать массивы вместо sqrt.
так взятие элемента по индексу у простого массива должно быть очень быстрой операцией, разве нет?
так взятие элемента по индексу у простого массива должно быть очень быстрой операцией, разве нет?
Где вы видите простой массив?
Это динамический массив управляемого языка со всеми вытекающими последствиями на контроль. А sqrt - одиночная нативная команда процессора.
Добро пожаловать в мир удивительных открытий оптимизаций и влияния массы факторов в каждом конкретном случае в каждом поколении проца, каждой разнице размеров кешей, мультазадачности, штрафов и тд.
Еще 20 лет назад я занимался вылизыванием ассемблерного кода на 486 процессоре и боролся с постоянно плавающими на десятки процентов скоростями от перестановки команд, выравнивания и просто положения в памяти. Казалось сумашедшим, но мануалы интеловские и Vtune впоследствии объясняли картину.
А вот сегодня ситуация с результатами оптимизаций давно вышла из-под контроля. На рынке такое разнообразие совершенно разных процессоров с разными кешами, что ваш код будет гарантированно исполняться с разной скоростью. Огромное влияние оказывают кеши процессоров и архитектура процессора. Даже динамическое управление частотой проца приходится отключать, чтобы убрать разницу в десятки процентов на бенчмарке.
Например: Атомы с зарезанными кешами вроде бы на приличной архитектуре или придушенные U модели часто показывают кратно ниже результаты даже на простых случаях. Больше cache miss’ов и досвидания.
Мух знаю, котлеты видел, а вот в чём проблема - не видно без кода функции.
Где вы видите простой массив?
Не подходящий случай выставлять сложность. Массивы же используются везде, в индикаторах это основная расчетная часть, и вы сейчас практически напрямую признаете что реализация массивов у вас медленная.
Я верю что вы на порядок лучше разбираетесь в оптимизациях, но с точки зрения простого юзера все выглядит немого странно -- вы заявляете что MQL компилятор генерирует код сравнимый по скорости с С++, но тут вдруг выясняется, что массивы в MQL нифига не быстрые.Не подходящий случай выставлять сложность. Массивы же используются везде, в индикаторах это основная расчетная часть, и вы сейчас практически напрямую признаете что реализация массивов у вас медленная.
По сравнению с прямой одиночной ассемблерной командой?
Да, запросто. Вы не в курсе, что в процессорах давно уже встроили предрасчитанные таблицы разнообразных математических функций. И дорогие математические команды cpu ими пользуются для ускорения.
В понедельник проведем детальный анализ его примера и выясним точную причину.По сравнению с прямой одиночной ассемблерной командой?
индекс массива в лучшем случае тоже сводится к прямой одиночной ассемблерной команде, так что вопрос остается в силе
Я верю что вы на порядок лучше разбираетесь в оптимизациях, но с точки зрения простого юзера все выглядит немого странно -- вы заявляете что MQL компилятор генерирует код сравнимый по скорости с С++, но тут вдруг выясняется, что массивы в MQL нифига не быстрые.Управляемый/managed язык однозначно означает, что массивы должны жестко контролироваться. Без этого язык не может быть защищенным.
У статических массивов контроль проще и может частично упрощен на этапе оптимизатора кода. Для динамических контроля больше и его сложно упростить.
Код генерится на уровне качества C++, но в managed вещах конечно есть оверхед. Математика, циклы и все остальное на уровне C++.
индекс массива в лучшем случае тоже сводится к прямой одиночной ассемблерной команде, так что вопрос остается в силе
В managed языке только в статическом массиве с константным индексированием. То есть, если оптимизатор на 100% уверен, что не надо проверять границы и наличие буфера.
При нарушении условий появляется контроль наличия буфера и границ[ы].
Это базовые знания, которые надо иметь при программировании.
Если в перегруженной функции есть енум то стринг то при вызове её для интегера возникает проблема...
Я обращал внимание на это https://www.mql5.com/ru/forum/1111/page1297#comment_1382986
Но менять ничего не стали, поэтому ::EnumToString в шаблонах во многих случаях бесполезен
Продолжаем осваивать проекты и натыкаемся на
#resource "\\Experts\\[Project 2018]\\Expert Name\\Resources\\img\\open_buy.bmp"
resource name is too long '\Experts\[Project 2018]\Expert Name\Resources\img\open_buy.bmp' CPanel.mqh 6 1
Зачем нужны проекты если мы ограничены ?
Проект это ПРОЕКТ!!!!! в котором может быть 1000 картинок, звуков, справок файлов и Мы должны все свалить в одну папку ?
Я не любитель винегрета в каталогах, что бы писать много качественно должен быть порядок не только в голове но и везде...