|
Отключение плавучки и KGP |
|
|
|
 |
Ответов
|
Nov 10 2012, 16:56
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 12-05-11
Пользователь №: 64 958

|
math.h на месте. вот так ругается: Код (.text+OxleO): undefined reference to "_floatsisf' main.о: In function 'rs_transmit_digit': (.text+Oxlf8): undefined reference to "_floatsisf' main, о: In function 'rs_transmit_digit' : (.text+0x204): undefined reference to '_mulsf3' main.о: In function 'rs_transmit_digit1: (.text+0x224): undefined reference to '_fixsfsi' main, о : In function rs_transmit_digit' : (.text+0x808): undefined reference to "_subsf31 main.o: In function 'cycle_2_datchika': (.text+0xac8): undefined reference to "_addsf31 main.o: In function "cycle_2_datchika1: (.text+0xb2c): undefined reference to "_extendsfdf2' main.o: In function ''cycle_2_datchika' : (.text+0xb58): undefined reference to "_divdf31 main.o: In function 'cycle_2_datchika1: (.text+Oxcdc): undefined reference to "_truncdfsf2' main.o: In function "cycle_2_datchika1: ( . text+0xce4) : undefined reference to _truncdf sf 2 1 main.o: In function vcycle_2_datchika1: (.text+0xe48): undefined reference to "_subdf3' main.o: In function "cycle_2_datchika1: (.text+0xe68): undefined reference to "_truncdfsf21 с:\kgp_mips_elf\mips-kgp-elf\lib\libm.a(lib_a-w_sqrt.o): In function "sqrf: (.text.sgrt+0x54): undefined reference to -_ltdf21 с:\kgp_mips_elf\mips-kgp-elf\lib\libm.a(lib_a-w_sqrt.o): In function "sqrt": (.text.sqrt+0xa8): undefined reference to "_divdf3' c:\kgp_mips_elf\mips-kgp-elf\lib\libm.adib_a-e_sqrt.o): In function "_ieee754__sqrt' : (.text._ieee754_sqrt+0x34): undefined reference to "_muldf3' с:\kgp_mips_elf\mips-kgp-elf\lib\libm.a(lib_a-e_sqrt.o): In function _ieee754_sqrt1 : (.text._ieee754_sqrt+0x48): undefined reference to "_adddf3' с:\kgp_mips_elf\mips-kgp-elf\lib\libm.a(lib_a-e_sqrt.o): In function "_ieee754_sqrt1: (.text._ieee754_sqrt+0x84): undefined reference to *_subdf3' с:\kgp_mips_elf\mips-kgp-elf\lib\libm.a(lib_a-e_sqrt.o): In function "_ieee754_sqrt1: (.text._ieee754_sqrt+0x98): undefined reference to "_divdf31 cs-make: *** [main.elf] Error 1 Прям и не знаю что делать... Цитата(klen @ Nov 9 2012, 04:03)  я думаю решим вопрос, только зачем надевать штаны через голову если есть FPU, сдается что Вы не пытаетесь решить задачу а пытаетесь решить задачу так как Вам хочется.
рас уж поднялась тема про мипсы то можно по ходу и преесобрать все. какое ядро? Ядро многострадального R3000 (комдив, вестимо  ). Дело даже не в том - как решить задачу. Это попытка научиться и попробовать работать без плавучки, а также выяснить разницу в производительности. Вот только не понимаю, что можно пересобрать? у нас есть сборка под наш проц и lib.m как с плавучкой так и без, с плавучкой работает, а вот без - нет. Чувствую где-то пробел в моих знаниях
|
|
|
|
|
Nov 12 2012, 04:29
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Ash_snz @ Nov 10 2012, 21:56)  math.h на месте. вот так ругается: Код (.text+OxleO): undefined reference to "_floatsisf' main.о: In function 'rs_transmit_digit': Так это у Вас вовсе не компилятор ругается, а линкер! Следовательно, разбираться надо не с инклудами, а с библиотеками. Судя по именам символов, у Вас не подключена библиотека libgcc.
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Nov 12 2012, 15:37
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 12-05-11
Пользователь №: 64 958

|
Цитата(alx2 @ Nov 12 2012, 10:29)  Так это у Вас вовсе не компилятор ругается, а линкер! Следовательно, разбираться надо не с инклудами, а с библиотеками. Судя по именам символов, у Вас не подключена библиотека libgcc. блин, как догадался?  пойду проверю. и почему я так не могу догадаться?!
|
|
|
|
|
Nov 13 2012, 11:02
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Ash_snz @ Nov 12 2012, 20:37)  блин, как догадался?  пойду проверю. Вы будете смеяться.  Я тупо погрепал имя символа по своим библиотекам. Сначала тут: Код alx% grep -rl _floatsisf /usr/local/arm-elf/lib /usr/local/arm-elf/lib/thumb/libm.a /usr/local/arm-elf/lib/libm.a Но здесь этот символ оказался Undefined: Код alx% arm-elf-nm /usr/local/arm-elf/lib/libm.a|grep _floatsisf U __floatsisf U __floatsisf U __floatsisf U __floatsisf U __floatsisf U __floatsisf U __floatsisf U __floatsisf U __floatsisf U __floatsisf U __floatsisf U __floatsisf U __floatsisf U __floatsisf U __floatsisf U __floatsisf U __floatsisf А вот тут он нашелся: Код alx% grep -rl _floatsisf /usr/local/lib/gcc/arm-elf /usr/local/lib/gcc/arm-elf/4.5.2/plugin/include/insn-flags.h /usr/local/lib/gcc/arm-elf/4.5.2/libgcc.a /usr/local/lib/gcc/arm-elf/4.5.2/thumb/libgcc.a /usr/local/lib/gcc/arm-elf/4.5.2/fpu/libgcc.a alx% arm-elf-nm /usr/local/lib/gcc/arm-elf/4.5.2/libgcc.a |grep _floatsisf 000001d0 T __floatsisf
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Nov 13 2012, 16:18
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 12-05-11
Пользователь №: 64 958

|
Цитата(alx2 @ Nov 13 2012, 17:02)  Вы будете смеяться.  Я тупо погрепал имя символа по своим библиотекам. Благодарствую за подсказку! В итоге добавил libgcc и libg и все собралось. Скорость выполнения уменьшилась в 50 раз, точность (на удивление) осталась на том же уровне! /тестим дальше/ Остался последний и главный вопрос. Существуют ли способы реализации плавучки, а точнее даже дробных вычислений не с 32-мя разрядами, а с 16-ю? Понимаю, что для перехода придется изменять программу. вопрос в том как? Куда двигаться, кто знает? может кто реализовывал вычисления на 16-ти разрядных системах без сопроцессоров?
Сообщение отредактировал Ash_snz - Nov 13 2012, 16:18
|
|
|
|
|
Nov 13 2012, 17:14
|
Местный
  
Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023

|
Цитата(Ash_snz @ Nov 13 2012, 19:18)  Скорость выполнения уменьшилась в 50 раз, Ядро ARM тратит около 50 тактов на сложение или умножение с 32 битной плавающей точкой при отсутствии аппаратной поддержки. То есть у вас аппаратно операции за 1 такт выполняются. Цитата(Ash_snz @ Nov 13 2012, 19:18)  точность (на удивление) осталась на том же уровне! Если реализация аппаратного и программного вычисления соответствуют стандарту, то операциии + - * / дают чётко определённый результат. Поэтому так и должно быть. Цитата(Ash_snz @ Nov 13 2012, 19:18)  Существуют ли способы реализации плавучки, а точнее даже дробных вычислений не с 32-мя разрядами, а с 16-ю? Есть такое. Ищите в сети "half precision floating point". Есть даже процессоры с аппаратной поддержкой такого.
|
|
|
|
|
Nov 14 2012, 17:03
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 12-05-11
Пользователь №: 64 958

|
Цитата(maksimp @ Nov 13 2012, 23:14)  Ядро ARM тратит около 50 тактов на сложение или умножение с 32 битной плавающей точкой при отсутствии аппаратной поддержки. То есть у вас аппаратно операции за 1 такт выполняются. Наше ядро тратит до 16 тактов на деление, на умножение до 8 кажется тактов. Цитата(maksimp @ Nov 13 2012, 23:14)  Если реализация аппаратного и программного вычисления соответствуют стандарту, то операциии + - * / дают чётко определённый результат. Поэтому так и должно быть.
Есть такое. Ищите в сети "half precision floating point". Есть даже процессоры с аппаратной поддержкой такого. Спасибо, уже ищу. Цитата(cant @ Nov 14 2012, 00:06)  скорее увеличилась  . С точностью смотрите окуратно: у меня количество знаков после запятой было критично и вначале точность поплыла, увеличивал количество знаков после запятой, чтоб проходить по точности. Как меняли количество знаков? что за методы?
|
|
|
|
|
Nov 14 2012, 19:28
|
Местный
  
Группа: Участник
Сообщений: 216
Регистрация: 28-10-08
Из: Брест
Пользователь №: 41 243

|
Цитата(Ash_snz @ Nov 14 2012, 21:03)  Как меняли количество знаков? что за методы? В общем ничего особенного: вначале из лонг два байта было на дробь, т.е точность 1/65536. потом добавил пол байта за счет уменьшения целой части - дипозон чисел позволял. сделал это только там, где критична была погрешность, в остальном коде обычные числа.
|
|
|
|
Сообщений в этой теме
Ash_snz Отключение плавучки и KGP Nov 5 2012, 14:39 alx2 Цитата(Ash_snz @ Nov 5 2012, 19:39) Компи... Nov 8 2012, 03:17 Ash_snz Цитата(alx2 @ Nov 8 2012, 09:17) Если Вы ... Nov 8 2012, 14:37  klen я думаю решим вопрос, только зачем надевать штаны ... Nov 8 2012, 22:03       maksimp Цитата(Ash_snz @ Nov 14 2012, 20:03) Наше... Nov 14 2012, 18:14        Ash_snz Цитата(maksimp @ Nov 15 2012, 00:14) Вы н... Nov 15 2012, 16:38         maksimp Цитата(Ash_snz @ Nov 14 2012, 20:03) Наше... Nov 15 2012, 19:02          Ash_snz Цитата(maksimp @ Nov 16 2012, 01:02) Тогд... Nov 16 2012, 16:49         cant Цитата(Ash_snz @ Nov 15 2012, 19:38) Да, ... Nov 16 2012, 18:54          demiurg_spb Цитата(cant @ Nov 16 2012, 22:54) Да. сво... Nov 21 2012, 12:16           Ash_snz Цитата(demiurg_spb @ Nov 21 2012, 18:16) ... Nov 22 2012, 15:37     cant Цитата(Ash_snz @ Nov 13 2012, 20:18) Скор... Nov 13 2012, 18:06 cant если там ядро заточено для плавучки, то используйт... Nov 10 2012, 20:15 Ash_snz Цитата(cant @ Nov 11 2012, 02:15) если та... Nov 11 2012, 08:14
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|