Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606
#1

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

03.02.2015, 16:47. Просмотров 276. Ответов 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 API в мой проект?
Сейчас пытаюсь сделать что-то с AdSense API, пока только запустил примеры с...

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

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

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

Google не индексирует мой блог blogspot
Ввожу прямым текстом заголовки моих статей и не нахожу своего блога среди...

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

Google Adsense не одобряет мой сайт
Всем привет! Хотел поставить рекламу от Google Adsense на свой сайт но они не...

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

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


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

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

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