Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Just now, GenaSPB said: аппаратный double есть только в F767. но 3д библиотека прекрасно работает и на F746, каким бы в нем ни был FPU Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 203 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба 3 минуты назад, GenaSPB сказал: Неравильно поняли. ПРосто сравнить с 0 а не 0.0 Там и без сравнений полно другого г*. См. выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба --cpu=Cortex-M7.fp.sp наверное использует... Читайте описание ключей вашего компидятора 3 minutes ago, jcxz said: Там и без сравнений полно другого г*. См. выше. Выход за границы массивов и мне ненравится Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба 1 minute ago, GenaSPB said: наверное использует... Читайте описание ключей вашего компидятора Да..... та опция в ниспадающем меню, что я вам выкладывал выше, как раз этот ключ и включает. Получается, что работает у меня FPU Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба А как проверить, скажем так, не состояние FPU (включен/выключен), а эффективность? НУ к примеру, можно ли запустить некую стандартную функцию, которая при включенном FPU занимает определенное количество тактов, меньшее чем без оного? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan24190 0 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Только что, Salamander сказал: А как проверить, скажем так, не состояние FPU (включен/выключен), а эффективность? НУ к примеру, можно ли запустить некую стандартную функцию, которая при включенном FPU занимает определенное количество тактов, меньшее чем без оного? Помимо включения самого Single FPU, нужно и работать с переменными типа float, и математические операции делать с float (в частности добавлять в конце чисел букву 'f'), а не double. centerPoint[0] = (v1[3] + v2[3] + v3[3]) / 3.0f; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Just now, ivan24190 said: centerPoint А если она объявлена как float32_t centerPoint[3] ? разве это ничего не значит? Да и потом - библиотека не моя, автор ее запускал в том виде, в котором она выложена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan24190 0 10 января, 2021 Опубликовано 10 января, 2021 (изменено) · Жалоба 8 минут назад, Salamander сказал: А если она объявлена как float32_t centerPoint[3] ? разве это ничего не значит? Да и потом - библиотека не моя, автор ее запускал в том виде, в котором она выложена. Да пожалуйста, но у вас операция деления на 3.0, а это по умолчанию double. Поэтому компилятор сначала преобразует все числа в double, затем выполнит всю арифметику в double и только в конце перед присваиванием преобразует во float. Поэтому нужно писать 3.0f, тогда все операции будут выполняться с float. Либо, как советовали выше, искать флаг компилятора, чтобы все вычисления с числами с плавающей точкой проводились во float. Изменено 10 января, 2021 пользователем ivan24190 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба То есть, к примеру float32_t matrix_view[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; float32_t matrix_projection[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; float32_t matrix_rotation[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; float32_t matrix_translation[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; float32_t matrix_world[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; float32_t matrix_worldView[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; float32_t matrix_transform[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; float32_t matrix_transformhelper[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; везде нужно добавить f??? Мда... Я все же, с надеждой повторю мою нижайшую просьбу - владельцам какой-нить платы с STM32F746 запустить библиотеку у себя. Пока откликнулся только GenaSPB (спасибо ему), но у него STM32MP157. Подключается в два счета, инструкцию я выше давал. Не обязательно с дисплеем, можно просто посчитать, сколько тактов уходит на расчет одной точки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan24190 0 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Только что, Salamander сказал: То есть, к примеру float32_t matrix_view[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; float32_t matrix_projection[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; float32_t matrix_rotation[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; float32_t matrix_translation[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; float32_t matrix_world[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; float32_t matrix_worldView[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; float32_t matrix_transform[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; float32_t matrix_transformhelper[16] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; везде нужно добавить f??? Если float32_t здесь действительно float, то касательно этих массивов делать ничего не нужно, тут приведение типа произойдет автоматически. Но на места арифметики нужно обратить внимание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Я добавил, не везде конечно, но прироста никакого.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 203 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба 3 часа назад, Salamander сказал: Да..... та опция в ниспадающем меню, что я вам выкладывал выше, как раз этот ключ и включает. Получается, что работает у меня FPU Интересно - как он у вас может работать, если в вашем МК его нет? Я имею в виду - double precision FPU. 2 часа назад, ivan24190 сказал: Помимо включения самого Single FPU, нужно и работать с переменными типа float, и математические операции делать с float (в частности добавлять в конце чисел букву 'f'), а не double. centerPoint[0] = (v1[3] + v2[3] + v3[3]) / 3.0f; Уже говорили. И не раз. ТС похоже не догоняет. Да, и лучше писать: centerPoint[0] = (v1[3] + v2[3] + v3[3]) * (1.f/3); 2 часа назад, Salamander сказал: Я добавил, не везде конечно, но прироста никакого.... И колёса пинал и стекло протирал..... а в листинг так и не заглянул. Да уж, трудный случай.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrBearManul 0 11 января, 2021 Опубликовано 11 января, 2021 · Жалоба 3 часа назад, Salamander сказал: Я добавил, не везде конечно, но прироста никакого.... Можно пойти от обратного: поищите в листинге вызовы стандартных подпрограмм для софтовой работы с float и double (именно и для тех и для этих). Если вы всё сделали правильно, их быть не должно от слова совсем. Как называются эти подпрограммы смотрите в документации на свой компилятор. А везде, где используется ваша математика долны быть команды FPU. Список мнемоник можете посмотреть в документации на ядро. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 11 января, 2021 Опубликовано 11 января, 2021 · Жалоба 5 hours ago, jcxz said: ТС похоже не догоняет. 5 hours ago, jcxz said: Да уж, трудный случай... Давайте не будем переходить на подобие оскорблений? Вы меня тоже не слышите. Как например: 5 hours ago, jcxz said: как он у вас может работать, если в вашем МК его нет? Я имею в виду - double precision FPU. Сдался вам этот double precision? Я разве ставил целью получить максимальное быстродействие операция с плавающей точкой? В который раз сошлюсь на неоднократно выкладывавшееся мной видео, где на не имеющем double precision STM32F746 фигурка головы обезьяны вращается с вполне приличной скоростью. Вот эту скорость я и хочу повторить. Single precision у меня есть? Есть вот от него давайте и будем отталкисваться. 5 hours ago, jcxz said: математические операции делать с float (в частности добавлять в конце чисел букву 'f'), а не double. Автор библиотеки этого не делал и она у него нормально работала 5 hours ago, jcxz said: а в листинг так и не заглянул. заглянул Quote А везде, где используется ваша математика долны быть команды FPU. Список мнемоник можете посмотреть в документации на ядро. Это они? ниже аттач. файл с расширением lst. Это листинг? А по содержимому? Поиск в нем не дает положительного результата для вышеуказанных функций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Михась 2 11 января, 2021 Опубликовано 11 января, 2021 (изменено) · Жалоба Можете еще до кучи map файл выложить. Там все эти софтовые dmul и ddiv и всплывут. В общем, в любом случае есть смысл добиться чтобы все математика работала с float FPU. Просто надо внимательно весь код просмотреть и полностью убрать использование даблов. Изменено 11 января, 2021 пользователем Михась Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться