Я люблю Lua. I love Lua.

Вопросы производительности — 3

Posted in Uncategorized by ilovelua on Сентябрь 17, 2012

Рассмотрим скорость доступа модуля к локальной переменной и к полю, объявленному внутри модуля. Код модуля:

module('TestModule', package.seeall)

local localTable = {}
testTable = {}

-- добавляем в модуль полей, чтобы поиск осуществлялся не в совсем пустой таблице
for i = 1, 100 do
    _M['testTable' .. i] = i
end

function getTestTable()
    return testTable
end

function getLocalTable()
    return localTable
end

Код теста:

local TestModule = require('TestModule')

local count = 1000000

function test()
    local t = os.clock ()

    for i = 1, count do
        TestModule.getTestTable()[i] = i
    end

    local t1 = os.clock () - t

    t = os.clock ()

    for i = 1, count do
        TestModule.getLocalTable()[i] = i
    end

    local t2 = os.clock () - t

    return t1, t2
end

local percents = {}

for i = 1, 100 do
    local t1, t2 = test()
    local delta = string.format('%.6f', t1 - t2)
    local p = string.format('%.6f', ((t1 - t2) / t1) * 100)

    print(i, 'delta:', delta, '%', p)

    table.insert(percents, p)
end

local totalPercents = 0

for i, percent in ipairs(percents) do
    totalPercents = totalPercents + percent
end

print('average percents is:', totalPercents / #percents)

Результаты:

1 delta: 0.028000 % 9.395973
2 delta: 0.015000 % 5.514706
3 delta: 0.013000 % 4.779412
4 delta: 0.015000 % 5.494505
5 delta: 0.011000 % 4.044118
6 delta: 0.015000 % 5.494505
7 delta: 0.014000 % 5.128205
8 delta: 0.015000 % 5.474453
9 delta: 0.014000 % 5.147059
10 delta: 0.014000 % 5.147059
11 delta: 0.011000 % 4.044118
12 delta: 0.014000 % 5.147059
13 delta: 0.012000 % 4.411765
14 delta: 0.011000 % 4.074074
15 delta: 0.012000 % 4.411765
16 delta: 0.015000 % 5.494505
17 delta: 0.014000 % 5.128205
18 delta: 0.013000 % 4.779412
19 delta: 0.013000 % 4.761905
20 delta: 0.013000 % 4.797048
21 delta: 0.013000 % 4.779412
22 delta: 0.015000 % 5.494505
23 delta: 0.015000 % 5.494505
24 delta: 0.013000 % 4.779412
25 delta: 0.011000 % 4.059041
26 delta: 0.013000 % 4.779412
27 delta: 0.013000 % 4.761905
28 delta: 0.013000 % 4.779412
29 delta: 0.013000 % 4.797048
30 delta: 0.014000 % 5.147059
31 delta: 0.015000 % 5.494505
32 delta: 0.014000 % 5.147059
33 delta: 0.014000 % 5.128205
34 delta: 0.014000 % 5.147059
35 delta: 0.014000 % 5.147059
36 delta: 0.014000 % 5.147059
37 delta: 0.015000 % 5.494505
38 delta: 0.015000 % 5.494505
39 delta: 0.014000 % 5.147059
40 delta: 0.014000 % 5.147059
41 delta: 0.014000 % 5.128205
42 delta: 0.016000 % 5.860806
43 delta: 0.014000 % 5.147059
44 delta: 0.014000 % 5.147059
45 delta: 0.014000 % 5.147059
46 delta: 0.012000 % 4.411765
47 delta: 0.013000 % 4.779412
48 delta: 0.015000 % 5.514706
49 delta: 0.013000 % 4.779412
50 delta: 0.013000 % 4.779412
51 delta: 0.014000 % 5.128205
52 delta: 0.012000 % 4.411765
53 delta: 0.015000 % 5.494505
54 delta: 0.016000 % 5.860806
55 delta: 0.015000 % 5.494505
56 delta: 0.014000 % 5.147059
57 delta: 0.015000 % 5.514706
58 delta: 0.014000 % 5.147059
59 delta: 0.014000 % 5.147059
60 delta: 0.013000 % 4.779412
61 delta: 0.014000 % 5.147059
62 delta: 0.013000 % 4.779412
63 delta: 0.013000 % 4.761905
64 delta: 0.014000 % 5.147059
65 delta: 0.013000 % 4.779412
66 delta: 0.012000 % 4.411765
67 delta: 0.013000 % 4.797048
68 delta: 0.013000 % 4.779412
69 delta: 0.015000 % 5.494505
70 delta: 0.011000 % 4.044118
71 delta: 0.014000 % 5.147059
72 delta: 0.015000 % 5.494505
73 delta: 0.013000 % 4.779412
74 delta: 0.015000 % 5.494505
75 delta: 0.013000 % 4.779412
76 delta: 0.016000 % 5.860806
77 delta: 0.015000 % 5.514706
78 delta: 0.014000 % 5.147059
79 delta: 0.013000 % 4.779412
80 delta: 0.015000 % 5.494505
81 delta: 0.016000 % 5.818182
82 delta: 0.013000 % 4.761905
83 delta: 0.013000 % 4.779412
84 delta: 0.016000 % 5.860806
85 delta: 0.012000 % 4.411765
86 delta: 0.013000 % 4.779412
87 delta: 0.014000 % 5.128205
88 delta: 0.015000 % 5.514706
89 delta: 0.012000 % 4.411765
90 delta: 0.014000 % 5.147059
91 delta: 0.015000 % 5.494505
92 delta: 0.014000 % 5.147059
93 delta: 0.016000 % 5.860806
94 delta: 0.017000 % 6.204380
95 delta: 0.014000 % 5.147059
96 delta: 0.014000 % 5.147059
97 delta: 0.013000 % 4.779412
98 delta: 0.012000 % 4.411765
99 delta: 0.012000 % 4.411765
100 delta: 0.015000 % 5.494505
average percents is: 5.1020022

Здесь результаты не столь впечатляющие, как в предыдущем тесте, но тем не менее разница в ~5% есть.
Вывод: локальные переменные — наши друзья.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: