Ошибки, баги, вопросы - страница 2162

 
Renat Fatkhullin:

Оптимизация математики: попытка использовать массивы вместо sqrt.

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

 
Комбинатор:

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

Где вы видите простой массив?

Это динамический массив управляемого языка со всеми вытекающими последствиями на контроль. А sqrt - одиночная нативная команда процессора.


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

Еще 20 лет назад я занимался вылизыванием ассемблерного кода на 486 процессоре и боролся с постоянно плавающими на десятки процентов скоростями от перестановки команд, выравнивания и просто положения в памяти. Казалось сумашедшим, но мануалы интеловские и Vtune впоследствии объясняли картину.

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

Например: Атомы с зарезанными кешами вроде бы на приличной архитектуре или придушенные U модели часто показывают кратно ниже результаты даже на простых случаях. Больше cache miss’ов и досвидания.

 
Artyom Trishkin:
Мух знаю, котлеты видел, а вот в чём проблема - не видно без кода функции.
Если в перегруженной функции есть енум то стринг то при вызове её для интегера возникает проблема... 
 
Renat Fatkhullin:

Где вы видите простой массив?

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

Я верю что вы на порядок лучше разбираетесь в оптимизациях, но с точки зрения простого юзера все выглядит немого странно -- вы заявляете что MQL компилятор генерирует код сравнимый по скорости с С++, но тут вдруг выясняется, что массивы в MQL нифига не быстрые.
 
Комбинатор:

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

По сравнению с прямой одиночной ассемблерной командой?

Да, запросто. Вы не в курсе, что в процессорах давно уже встроили предрасчитанные таблицы разнообразных математических функций. И дорогие математические команды cpu ими пользуются для ускорения.

В понедельник проведем детальный анализ его примера и выясним точную причину.
 
Renat Fatkhullin:

По сравнению с прямой одиночной ассемблерной командой?

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

 
Комбинатор:


Я верю что вы на порядок лучше разбираетесь в оптимизациях, но с точки зрения простого юзера все выглядит немого странно -- вы заявляете что MQL компилятор генерирует код сравнимый по скорости с С++, но тут вдруг выясняется, что массивы в MQL нифига не быстрые.

Управляемый/managed язык однозначно означает, что массивы должны жестко контролироваться. Без этого язык не может быть защищенным.

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

Код генерится на уровне качества C++, но в managed вещах конечно есть оверхед. Математика, циклы и все остальное на уровне C++.

 
Комбинатор:

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

В managed языке только в статическом массиве с константным индексированием. То есть, если оптимизатор на 100% уверен, что не надо проверять границы и наличие буфера.

При нарушении условий появляется контроль наличия буфера и границ[ы].

Это базовые знания, которые надо иметь при программировании.

 
Vladimir Pastushak:
Если в перегруженной функции есть енум то стринг то при вызове её для интегера возникает проблема... 

Я обращал внимание на это https://www.mql5.com/ru/forum/1111/page1297#comment_1382986

Но менять ничего не стали, поэтому ::EnumToString в шаблонах во многих случаях бесполезен

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2015.02.16
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 

Продолжаем осваивать проекты и натыкаемся на 

#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 картинок, звуков, справок файлов и Мы должны все свалить в одну папку ?

Я не любитель винегрета в каталогах, что бы писать много качественно должен быть порядок не только в голове но и везде...