SP5FCS
Adam
Liczba postów: 1,072
Dołączył: 02-02-2009
|
RE: Porównanie języków programowania
Pawle, dziękuję za szybką odpowiedź i udział w testach. Widać wyraźnie, że wyniki na zmiennych typu float są porównywalne dla C CodeVision oraz Bascoma. Drobne różnice wynikają z innej składni języka, sposobu przekazywania parametrów czy organizację stosu danych.
Być może problem ze zmiennymi typu float w Bascomie jest związany z normalizację i denormalizacją danych. Tak mam napisaną bibliotekę na zmienny przecinek na procesory 8051. Aby zainicjować zmienną float dowolną wartością stałą muszą ją najpierw doprowadzić do formatu zapisu liczby zmiennoprzecinkowej (normalizacja). Aby po obliczeniach mieć ponownie format dwójkowy musimy ponownie dokonać konwesji formatu zmiennoprzecinkowego na jawną postać bajtową. Wykonywanie obliczeń na danych bez normalizacji daje oczywiście błędny wynik. Celowo normalizacja, denormalizacja to oddzielne funkcje aby nie robić ich za każdym razem a tylko wtedy gdy jest to potrzebne. Przy wielokrotnych obliczeniach robimy to tylko na wejściu na nowych danych oraz na końcowym wyniku obliczeń. Stałe mogą być znormalizowane na etapie kompilacji i tak przechowywane w kodzie co oszczędza czas procesora. Być może tak samo jest w Bascomie.
Nie ukrywam rozczarowania efektami uzyskanymi pod WinAVR, może ktoś z Kolegów posługujący się tym kompilatorem spróbuje "wycisnąć" coś więcej w ramach tego testu. Kończę wersję w ASM, wyniku po powrocie ze spotkania na PW.
Zapraszam do wykonania testu na innych procesorach Bascom51, ASM51, C_51, PIC, ARM.
-------------------------------------------------------------------------------------
Wstępne wyniki dla assebmlera AVR przy obliczeniach na 64 bitach są takie:
Kod: 162 bajt (8+154)
Cykle: 1774 (4+1770)
RAM: 12 bajt
Zapewne Koledzy zastanawiają się czy to możliwe, czy raczej żart "prima aprilis-owy" ?
73 Adam
|
|
01-04-2012 12:25 |
|