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

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

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

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

03.02.2015, 16:47. Просмотров 241. Ответов 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;
        }
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2015, 16:47     Мой упрощенный алгоритм выполняется дольше алгоритма Google
Посмотрите здесь:

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

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

Регистрацией в Google AdSense (для последующей регистрации в Google Play) - Программирование Android
Помогите с регистрацией в Google AdSense: завел свой блог на blogger.com (blogspot). И регистрируюсь в AdSense (для продажи платных...

Не видит мой смартфон - Программирование Android
В visual studio не видит мой смартфон explay five. Включил рижем откладки по usb на телефоне но все равно не работает. При установке...

Где мой файл? - Программирование Android
Работаю на java+android studio. создаю файл таким образом void writeFile() { try { // отрываем поток для...

Зацените мой HelloWorld пожалуйста - Программирование Android
https://play.google.com/store/search?q=%D0%B1%D0%BB%D0%BE%D0%BA%D0%BD%D0%BE%D1%82&amp;c=apps :)

Не выполняется условие if - Программирование Android
Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь? В результате &quot;сложных&quot; логических исследований ошибок кода, я пришел...

Не выполняется поиск в ListView - Программирование Android
Вопрос таков имею базу данных с данными вывод имён в костомный ListView но поиска не выполняется. Брал пример всё работает в моём случае...

Не выполняется задание таймера - Программирование Android
Запускаю сервис, в нем в отдельном потоке запускаю класс наследованный от Runnable и убиваю сервис, а в Runnable запускаю Timer с...

Не выполняется сервис android - Программирование Android
Приветствую. Пытаюсь запустить сервис. Делаю так package com.qwe.threadService; import android.content.Intent; import...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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