Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Fortran & ARM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
klen
очередной эксперемент по глумлению (над чем сами для себя решайте)

имеем : GNU GCC, контроллер lpc2148 и функцию f(a,x)=sqrt( fabs(cos( exp(a) + sin(log(x)))))

код на С

float func_c (float a , float x)
{
return sqrt( fabs(cos( exp(a) + sin(log(x)))));
}

код на фортране

REAL FUNCTION FF(A,X)
REAL A,X
FF=SQRT(ABS(COS( EXP(A) + SIN(LOG(X)))));
END FUNCTION FF


все это компиляется ( -Os )в один проект, заливается и запускается

выполняется кусок
FIO1DIR |= _BV(24) ;
while(1)
{
FIO1CLR |= _BV(24) ;
res=ff_(&x,&y);
FIO1SET |= _BV(24) ;
res = func_c (x,y);
}

на 24 пине мерятся импулсы осцилом
итого на фртране 136 микросекунд
на С 252 микросекунд
результаты расчета верны для обоих вызовов. разница по скорости в 2 раза

ОДНАКО ЗАБАВНО!

вот думаю вычисления в циклах на фортране написать. почему нет?
инструмент есть - нада пользоватся!
aaarrr
Просто библиотеки быстрее, но забавно, да.
klen
Цитата(aaarrr @ May 25 2008, 01:08) *
Просто библиотеки быстрее, но забавно, да.

тем не мене факт на рыло, и его ничто не мешает юзать
DRUID3
Цитата(klen @ May 25 2008, 00:31) *
тем не мене факт на рыло, и его ничто не мешает юзать

было бы неплохо прочесть об остальных матфункциях - не у всех руки дойдут проверять. А еще проверить FFT с табличной тригонометрией (ну не вычисляя вский раз). Если и оно будет работать быстрее...
SSerge
Чисто вычислительные алгоритмы на Фортране могут быть немного быстрее чем на С, но не в два же раза!
Тут скорее другое - Фортран всё считает с одинарной точностью, а С по стандарту обязан использовать double в промежуточных выражениях.
klen
согласен что странно .
из кода скомпиленного на фортране вызываются теже cos sin abs из libm
вобщем ниче непонятно, нада разбираться и понять когда есть смысл этот огород городить
Andrew2000
Цитата(klen @ May 25 2008, 12:22) *
...из кода скомпиленного на фортране вызываются теже cos sin abs из libm ...

а не передача-ли параметров тут играет (по ссылке/по значению) - дизасм нада смотреть - там все одинаково?
klen
Цитата(Andrew2000 @ May 26 2008, 00:53) *
а не передача-ли параметров тут играет (по ссылке/по значению) - дизасм нада смотреть - там все одинаково?

неодинаково.
это не может быть существенно, потому что время трассы мат - функций на порядки больше чем время кода функции их вызывающих
DRUID3
А функции фортрана могут быть рекурсивными? 05.gif
Nitrotoluol
а ассемблер еще быстрее....
чтож поделать если не могут нормальный компилятор для С сделать... остается только ждать...
DRUID3
Цитата(Nitrotoluol @ Jun 2 2008, 21:11) *
а ассемблер еще быстрее....
чтож поделать если не могут нормальный компилятор для С сделать... остается только ждать...

Да причем там нормальный-не нормальный. Я вопрос к тому задал, что вот если понаделывать inline функций то прога на C тоже быстрее работать начнет. А когда-то читал, что в фортране нет рекурсии (так же как и в инлайне - где идет подстановка, а не загрузка-выгрузка в стек всей трахомудии связанной с вызовом настоящих C-шных функций). Да и о легендарных матбиблиотеках которые так и не захотели переписывать на C думаю слышали многие. Их даже сейчас в играх используют в одной киевской конторе. smile.gif Видимо там все дело в организации размещения данных и работе с ними. Нужно найти более глубоких спецов по фортрану или теории компиляторов и уточнить.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.