LINUX.ORG.RU

Тестирование производительности встроенных функций Gambas.

 , , ,


0

1

Недавно перед мною стала задача вычисления битовых масок для определения симметрии составных частей юнита. Нужно это мне потому что я пишу движок для игры (RTS).

Многие вполне обоснованно считают что предварительная оптимизация это зло, я же задумался о том сколько я смогу выиграть производительности если вместо вызова встроенной функции использую простое выражение, но простое выражение не вышло, возникло несоответствие типов и пришлось вставить функцию конвертации типа. Код здесь. https://gist.github.com/anonymous/8122017

результаты показали:

время с использованием встроеных функций  4,21064499998465
время с использованием уравнения в коде   7,62681200006045

Оптимизация показала отрицательный эффект. Приблизительно в 2 раза.

  Dim a As Integer
  Dim a2 As Integer
  
  Dim TimeH As Float
  Dim TimeE As Float
  Dim r As Float
  
  Dim i As Integer
  Dim b As Boolean
  Dim i2 As Integer
  Dim f As Integer
  Dim f2 As Float
  
  
  TimeH = Timer ' время начала теста
  For a = 1 To 1000000
    For a2 = 1 To 15
      ' используем встроенную функцию Gambas runtime
      b = BTst(a, a2 - 1)
    Next  
  Next
  TimeE = Timer
  r = TimeE - TimeH ' вычисление разницы времени
  Print "время с использованием встроеных функций  " & Str(r)
  
  
  
  TimeH = Timer ' время начала теста
  For a = 1 To 1000000
    For f2 = 1 To 15
      'i2 = (2 ^ (a2 - 1)) ' необходимо из за ошибки несоответсвия типов
      b = a And CInteger(2 ^ (a2 - 1))
    Next  
  Next
  TimeE = Timer
  r = TimeE - TimeH ' вычисление разницы времени
  Print "время с использованием уравнения в коде   " & Str(r)

производительности ... Gambas

Эх, посоветуют тебе С или С++, причём вполне серьёзно.

Begemoth ★★★★★
()

Почему нужно приведение типов? Почему сразу не использовать однотипные переменные?

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Почему нужно приведение типов? Почему сразу не использовать однотипные переменные?

Пробовал. Но по ходу сам компилятор не может определить тип выражения правильно в логических операциях. Видимо такой баг.

rezedent12 ☆☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.