Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 598
#1

Мой упрощенный алгоритм выполняется дольше алгоритма Google - Программирование Android

03.02.2015, 16:47. Просмотров 252. Ответов 0
Метки нет (Все метки)

Здравствуйте!
Возник вопрос по скорости выполнения... Я разрабатываю 2D-движок, в принципе работает быстро, но хочется убрать лишние операции, которые не нужны для 2D все равно.
Поэтому код функции Matrix.translateM
Java
1
2
3
4
5
6
7
8
public static void translateM(
            float[] m, int mOffset,
            float x, float y, float z) {
        for (int i=0 ; i<4 ; i++) {
            int mi = mOffset + i;
            m[12 + mi] += m[mi] * x + m[4 + mi] * y + m[8 + mi] * z;
        }
    }
Решил заменить своей, заточенной чисто под перемещение в плоскости:
Java
1
2
3
4
5
6
public static void translate(float[] m, float x, float y) {
        m[12] += m[0] * x + m[4] * y;
        m[13] += m[1] * x + m[5] * y;
        m[14] += m[2] * x + m[6] * y;
        m[15] += m[3] * x + m[7] * y;
    }
Далее решил сравнить скорость выполнения:
Java
1
2
3
4
5
6
7
8
9
10
11
12
long startTime;
        long delta;
        for(int i = 0; i < 10; ++i) {
            startTime = System.nanoTime();
            EasyMatrix.translate(mtrxView, 50f, 50f);
            delta = System.nanoTime() - startTime;
            Log.d(TAG, "Easy matrix time: " + delta);
            startTime = System.nanoTime();
            Matrix.translateM(mtrxView, 0, 50f, 50f, 0f);
            delta = System.nanoTime() - startTime;
            Log.d(TAG, "Android matrix time: " + delta);
        }
Получаю такой вывод:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
02-03 11:19:51.368    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Easy matrix time: 94426
02-03 11:19:51.368    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Android matrix time: 6425
02-03 11:19:51.368    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Easy matrix time: 7263
02-03 11:19:51.368    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Android matrix time: 268470
02-03 11:19:51.368    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Easy matrix time: 6704
02-03 11:19:51.368    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Android matrix time: 6705
02-03 11:19:51.368    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Easy matrix time: 6425
02-03 11:19:51.368    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Android matrix time: 6146
02-03 11:19:51.368    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Easy matrix time: 6146
02-03 11:19:51.369    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Android matrix time: 6425
02-03 11:19:51.369    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Easy matrix time: 9778
02-03 11:19:51.369    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Android matrix time: 6704
02-03 11:19:51.369    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Easy matrix time: 6984
02-03 11:19:51.369    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Android matrix time: 6984
02-03 11:19:51.369    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Easy matrix time: 7543
02-03 11:19:51.369    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Android matrix time: 7264
02-03 11:19:51.369    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Easy matrix time: 6146
02-03 11:19:51.369    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Android matrix time: 6425
02-03 11:19:51.369    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Easy matrix time: 6146
02-03 11:19:51.369    2463-2481/com.contedevel.lastlegend D/EasyRenderer﹕ Android matrix time: 6705


Ну, первое отличие при запуске я еще могу понять... Но, почему далее моя функция проигрывает по времени выполнения? Алгоритм же проще на порядок... Или я неправильно измеряю время выполнения?
Буду очень признателен за подробное объяснение!
P.S. Цикл взял, чтобы среднюю разницу определить.

Добавлено через 2 часа 15 минут
Такой вариант в среднем выполняется быстрее, чем без цикла, что мне тоже не понятно...
Java
1
2
3
4
5
public static void translate(float[] m, float x, float y) {
        for(int i = 0; i < 4; ++i) {
            m[12 + i] += m[i]*x + m[4 + i] * y;
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2015, 16:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Мой упрощенный алгоритм выполняется дольше алгоритма Google (Программирование Android):

Как добавить библиотеки Google API в мой проект? - Программирование Android
Сейчас пытаюсь сделать что-то с AdSense API, пока только запустил примеры с офсайта, и то - только как Java Project. Когда я импортировал...

Мой алгоритм шифрования - Программирование Android
Здравствуйте! Я студент, готовлюсь к одному конкурсу по программированию. Для него я подготовил программу для android - мастер паролей. Я...

Если скрипт выполняется дольше чем max_execution_t - PHP
Здравствуйте! Есть необходимость выполнять объемный скрипт, состоящий из однотипных итераций. Чтобы его выполнение не &quot;резалось&quot;, он был...

MS SQL Почему запрос в приложении выполняется в разы дольше чем в MicrosoftSQLServer - Delphi БД
Добрый день! Впервые столкнулась с такой ситуацией: есть SQL запрос, который в MsSQLServer выполняется за 30сек-2мин, а в моем...

Google Adsense не одобряет мой сайт - Контекстная реклама
Всем привет! Хотел поставить рекламу от Google Adsense на свой сайт но они не одобряет. Пишут Insufficient content: To be approved for...

Google не индексирует мой блог blogspot - Google
Ввожу прямым текстом заголовки моих статей и не нахожу своего блога среди результата. Мой robots.txt: User-agent: Mediapartners-Google ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2015, 16:47
Привет! Вот еще темы с ответами:

Не выполняется поиск Google - Удаление вирусов
Добрый день всем форумчанам! Сегодня произошла странная история. С утра интернет стал работать медленно, потом еще медленнее, потом стал...

Оптимизация PHP кода,есть скрипт который обрабатывает текст,аналоги работают за секунды,мой выполняется шесть минут - PHP
Скрипт:нужно узнать какая из букв в тексте расположена первее всех,и вывести её номер в этом тексте, и делать это всё в цикле пока пока...

После входа в google console нажимаю на вкладку а открывается мой сайт - Удаление вирусов
Добрый день! Проблема наблюдается в гугл хром и файерфокс. В опере нет. Захожу в панель управления сайтами в гугл и нажимаю на вкладки со...

Не выполняется ajax-запрос в Google Chrome. В Opera и Firefox работает - jQuery
Здравствуйте! Хотел реализовать автоматическое сохранение настроек модуля. Накидал такую функцию: function...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru