2. При сравнении скорости заполнения локального и глобального массива на МТ5, заполнение локального массива всегда 0 или 1 микросекунд (если более 20 000 000) ячеек. Иначе говоря, замер скорости заполения локального массива на МТ5 можно поставить под сомнение. Непонятно, почему всегда нулевое время заполнения.
Есть нюанс - локальный массив выходит за пределы 512 кб и возникает предупреждение. Возможно это влияет, и на МТ5 локальный массив вовсе не заполняется, если выходит за эти пределы.
В локальном массиве у МТ5 время замера ноль, так как компилятор выкидывает бесполезную работу с неиспользуемым впоследствии простым объектом. Это характеризует качество компилятора.
Вы нарушили правила проведения тестов компиляторов.
В локальном массиве у МТ5 время замера ноль, так как компилятор выкидывает бесполезную работу с неиспользуемым впоследствии простым объектом. Это характеризует качество компилятора.
Вы нарушили правила проведения тестов компиляторов.
Если я Вас правильно понимаю, то при выходе локального массива за 512 кб он не заполняется?
Или же просто сам замер неправильно осуществлен?
Как в таком случае сравнить?
Вопрос актуален так как занимаюсь графикой.
Ищу способ ускорить заполнение массива (массив очень большой). Возникла идея, что локальные массивы заполняются быстрее. Поэтому сделал замер.
На МТ4 разницы в скорости заполнения между локальным и глобальным массивом не увидел.
На МТ5 скорость заполнения глобального массива в 10 - 60 раз быстрее (по моим опытам), но не понятна скорость заполнения локального массива.
Цель этой темы - выяснить этот вопрос.
Если я Вас правильно понимаю, то при выходе локального массива за 512 кб он не заполняется?
Или же просто сам замер неправильно осуществлен?
Как в таком случае сравнить?
Неправильно понимаете, потому что не знаете правил проведения бенчмарков компиляторов.
В данном случае весь код между замерами был выкинут полностью, так как он бесполезен и его результаты нигде больше не используются.
ulong t3 = GetMicrosecondCount(); //-------------------------- for(int b1 = 0; b1 < Rows; b1++) { for(int b2 = 0; b2 < Colomns; b2++) { L_Array[b1][b2] = 1; } } //-------------------------- ulong t4 = GetMicrosecondCount();
Вопрос актуален так как занимаюсь графикой.
Ищу способ ускорить заполнение массива (массив очень большой). Возникла идея, что локальные массивы заполняются быстрее.
1) Идея неправильная, локальные массивы быстрее не заполняются (грубо, не опускаясь на микро уровень)
2) Массивы быстро надо заполнять через штатные функции инициализации
3) Для максимизации скорости массив лучше держать вектором (одномерным), чтобы у тебя в руках оставалось больше шансов оптимизации доступа. Ибо многомерность жестко тебя ограничивает обязательными рамками и заставляет компилятор делать дополнительные постоянные вычисления многомерных индексов.
Неправильно понимаете, потому что не знаете правил пробедения бенчмарков компиляторов.
В данном случае весь код между замерами был выкинут полностью, так как он бесполезен и его результаты нигде больше не используются.
Значит, мой замер скорости заполнения локального массива на МТ5 осуществлен неправильно.
Как в таком случае его осуществить?
Добавить например запись:
ulong t3 = GetMicrosecondCount(); //-------------------------- for(int b1 = 0; b1 < Rows; b1++) { for(int b2 = 0; b2 < Colomns; b2++) { L_Array[b1][b2] = 1; } } //-------------------------- ulong t4 = GetMicrosecondCount(); //-------------------------- int a = L_Array[0][0];
Если я Вас правильно понимаю, то при выходе локального массива за 512 кб он не заполняется?
Или же просто сам замер неправильно осуществлен?
Как в таком случае сравнить?
Если массив большой, то память под него нужно выделять динамически. В описанном случае Вы работаете со статическими массивами.
Если массив большой, то память под него нужно выделять динамически. В описанном случае Вы работаете со статическими массивами.
1) Идея неправильная, локальные массивы быстрее не заполняются (грубо, не опускаясь на микро уровень)
2) Массивы быстро надо заполнять через штатные функции инициализации
3) Для максимизации скорости массив лучше держать вектором (одномерным), чтобы у тебя в руках оставалось больше шансов оптимизации доступа. Ибо многомерность жестко тебя ограничивает обязательными рамками и заставляет компилятор делать дополнительные постоянные вычисления многомерных индексов.
1. Ясно. Выйгрыша в скорости таким способом получить не удастся. Начал это подозревать после проверки на МТ4.
2. Массив в данном случае является носителем специфической пользовательской информации. Не совсем понял какими штатными функциями его заполнять...
3. В данном случае это пока невозможно. С других технических точек зрения, двумерный массив имеет массу преимуществ (для моих задач).
(Но спасибо за совет.)
Если при этом будете сравнивать скорость доступа dynamic vs static, то получится неправильное сравнение.
Так я и говорю о том, что нужно сравнить скорость заполнения динамических массивов:
- Выделить память. Желательно достаточно большую для уменьшения погрешности.
- Заполнить.
- Сравнить время заполнения.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Возникла необходимость замерить и сравнить скорость заполнения локальных и глобальных массивов на МТ4 и МТ5.
Для этого написал простой скрипт:
При изменении значений Rows и Colomns меняются размеры локального и глобоального массивов и скорость их заполениния.
Интересно, что разница скорости заполения глобального массива на МТ4 и МТ5 от 10 до 60 раз. Причем, всегда по разному. Чем больше ячеек, тем меньше степень превосходства. Однако, более 10-ти раз выходит практически всегда (в пользу МТ5).
Что касается локального массива:
1. Сравнение скорости заполнения локального и глобального массива на MT4 почти не выявляет разницы в скорости. Заполнение глобального массива даже чуть быстрее.
2. При сравнении скорости заполнения локального и глобального массива на МТ5, заполнение локального массива всегда 0 или 1 микросекунд (если более 20 000 000) ячеек. Иначе говоря, замер скорости заполения локального массива на МТ5 можно поставить под сомнение. Непонятно, почему всегда нулевое время заполнения.
Есть нюанс - локальный массив выходит за пределы 512 кб и возникает предупреждение. Возможно это влияет, и на МТ5 локальный массив вовсе не заполняется, если выходит за эти пределы.
Хочется разобратся.
(Скрипт работает на обоих платформах).