Boolean: ReLoad

Русскоязычное сообщество создателей игр.
Текущее время: 26-10, 23:30

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: PowerBasic повзрослел?
СообщениеДобавлено: 04-03, 07:40 
Не в сети

Зарегистрирован: 04-03, 07:35
Сообщения: 5
Здравствуйте. Наткнулся недавно на PowerBasic 7, а делать было нечего и решил посмотреть что нового (последний раз я смотрел с 3ю версию под DOS)
Поискал по сайтам небольшие тесты на оптимизацию (вроде циклов с условиями и мат. операциями) и сравнил с PureBasic, т.к. другого языка под рукой не оказалось.
Я так и не понял, то-ли оптимизация настолько кривая, то-ли она настолько хороша, т.к. PowerBasic приведеный ниже код выполняет меньше чем за миллисекунду, в то время как PureBasic 6-7 секунд.

исходник на PowerBasic
Код:
#COMPILE EXE
#INCLUDE "WIN32API.INC"

FUNCTION PBMAIN()
    LOCAL i AS INTEGER
    LOCAL a AS INTEGER
    LOCAL b AS INTEGER
    LOCAL c AS INTEGER
    LOCAL d AS SINGLE
    LOCAL e AS SINGLE
    LOCAL f AS SINGLE
    '-----------------------------------------------------------------------
    LOCAL time1 AS QUAD
    LOCAL time2 AS QUAD
    LOCAL ticks AS QUAD
    LOCAL etime AS DOUBLE
    QueryPerformanceCounter(time1)
    '-----------------------------------------------------------------------
    a = 56
    b = 100
    d = 150.1765
    FOR i = 0 TO 100000000
        b = b + i
        IF ((b = 1000) OR (b = 10000)) THEN
            c = i / b * a
        ELSE
            c = b * i / a
        END IF
        IF ((b = 100000) OR (b = 1000000)) THEN
            c = i / b * a
        ELSE
            c = b * i / a
        END IF
        c = 56 * (i - b) / (i + b)
        e = 567.8765
        f = (d * e) - 6746.56768
        IF ((i > 100) AND (i < 100000)) THEN
            f = b / e
        ELSE
            f = d * e
        END IF
        IF ((i > 1000) AND (i < 1000000)) THEN
            f = b / e
        ELSE
            f = d * e
        END IF
        f = f * 567 / (d * 65 - f) * d
    NEXT
    '-----------------------------------------------------------------------
    QueryPerformanceCounter(time2)
    QueryPerformanceFrequency(ticks)
    etime = ((time2 - time1) / ticks) * 1000.0
    MessageBox(0, STR$(etime, 9), "Time in ms", 0)
    '-----------------------------------------------------------------------
END FUNCTION


исходник на PureBasic
Код:
    Define.l i, a, b, c
    Define.f d, e, f
    ;-----------------------------------------------------------------------
    Define.q time1, time2, ticks
    Define.d etime
    QueryPerformanceCounter_(@time1)
    ;-----------------------------------------------------------------------
    a = 56
    b = 100
    d = 150.1765
    For i = 0 To 100000000
        b = b + i
        If ((b = 1000) Or (b = 10000))
            c = i / b * a
        Else
            c = b * i / a
        EndIf
        If ((b = 100000) Or (b = 1000000))
            c = i / b * a
        Else
            c = b * i / a
        EndIf
        c = 56 * (i - b) / (i + b)
        e = 567.8765
        f = (d * e) - 6746.56768
        If ((i > 100) And (i < 100000))
            f = b / e
        Else
            f = d * e
        EndIf
        If ((i > 1000) And (i < 1000000))
            f = b / e
        Else
            f = d * e
        EndIf
        f = f * 567 / (d * 65 - f) * d
    Next
    ;-----------------------------------------------------------------------
    QueryPerformanceCounter_(@time2)
    QueryPerformanceFrequency_(@ticks)
    etime = ((time2 - time1) / ticks) * 1000.0
    MessageBox_(0, StrD(etime, 9), "Time in ms", 0)
    ;-----------------------------------------------------------------------
    End


У кого есть PowerBasic попрошу проверить так ли это или же у меня галлюцинации. Хотелось бы сравнить так-же с другими языками.
Было бы вообще замечательно, если бы кто-нибудь привел исходник нормального теста, который бы в полной мере отразил качество оптимизации языков, самому придумывать честно говоря лень, может есть готовые?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15-03, 14:15 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 17-01, 18:26
Сообщения: 23
Хм... Это, а PowerBASIC предусмативает возможность генерации ASM-листинга ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17-03, 14:34 
Не в сети

Зарегистрирован: 04-03, 07:35
Сообщения: 5
Цитата:
Хм... Это, а PowerBASIC предусмативает возможность генерации ASM-листинга ?

7.1 версия, на которйо я тестил, вроде не позволяет, но пройдясь дизассемблером и сравнив листинг с PureBasic могу смело заявить что у PowerBasic оптимизация намного лучше чем у PureBasic ^_^


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 31-03, 11:25 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 17-01, 18:26
Сообщения: 23
А привести здесь этот листинг можно) ?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by Forumenko © 2006–2014
Русская поддержка phpBB