green_fr: (Default)
[personal profile] green_fr
Пытаемся причесать немного нашу программу на MatLab’е, группируем написанные разными людьми скрипты в классы.
И вдруг замечаю, что функция, оформленная в виде метода, исполняется в разы медленнее... Один и тот же код (copy-paste), только данные не в глобальных переменных, а члены класса.

Позвонил в support, они мне говорят, что это не баг, это фича: доступ к переменным объекта занимает слегка больше времени, чем доступ к простым переменным. Пообещали передать разработчикам, но, судя по внутренней базе, разработчики не считают это поведение анормальным.

Оказалось, MatLab не помнит результатов проверок, которые он проводил только что. Например, в методе класса есть цикл, в цикле мы обращаемся к переменной класса (мой случай — к статической константе!). Так вот, он на каждой итерации будет проверять, существует ли такая переменная, не переопределена ли она дочерними классами, и какой у неё уровень доступа.

Написал «патч»: в начале каждого метода считываю константы в локальные переменные.
Одна из функций разогналась с 42 секунд до полутора.
Послал предложение усовершенствования в MathWorks, может премию вышлют :-)

Date: 2011-10-04 03:14 pm (UTC)
From: [identity profile] kalvado.livejournal.com
Ой, я бы не рассчитывал - МЛ по-моему глюкозавр еще тот.
Мою прошлую пороблему вылечили исключением соответствующего куска из следующих версий =)

Date: 2011-10-04 07:43 pm (UTC)
From: [identity profile] green-fr.livejournal.com
Майк, ты не заметил таблички "сарказм" :-/

Date: 2011-10-04 07:45 pm (UTC)
From: [identity profile] kalvado.livejournal.com
Ну скажем так - я видел как баги фиксили, я видел как на них забивали - но чтобы небольшой баг лечился удалением БОЛЬШОЙ фичи из продукта...

Date: 2011-10-04 07:47 pm (UTC)
From: [identity profile] green-fr.livejournal.com
Это да. Я по поводу твоего «я бы не рассчитывал» — нет, блин, я на эту премию уже заложился!
А что у тебя за фича была?

Date: 2011-10-05 07:19 am (UTC)
From: [identity profile] green-fr.livejournal.com
Да уж, я в это время пешком под стол ходил, и про MatLab даже не подозревал.
С тех пор я прикрутил в MatLab собственный сервер через c++ sockets - могу исходники подкинуть :-Р

Date: 2011-10-05 04:42 pm (UTC)
From: [identity profile] kalvado.livejournal.com
да я тогда сделал, через примочку в дельфях - си я так до сих пор и не знаю
И неактуально уже..

Date: 2011-10-04 04:03 pm (UTC)
From: [identity profile] birdwatcher.livejournal.com
(стук падающего тела)

Date: 2011-10-04 07:45 pm (UTC)
From: [identity profile] green-fr.livejournal.com
Ты знаешь, я вообще-то не люблю вот так вот сразу людей идиотами считать, я всегда пытаюсь найти какое-то логичное обоснование. Ну мало ли, вдруг в процессе исполнения программы параллельный поток подгрузит новые классы? Или переопределит класс, исполняющийся в твоём потоке? Никогда и ни в чём нельзя быть уверенным!

Date: 2011-10-04 08:11 pm (UTC)
From: [identity profile] birdwatcher.livejournal.com
В S в какой-то момент циклы тоже были официально в миллиард раз медленнее эквивалентных векторных операций, но в R этот кусок, вроде, переписали.

Date: 2011-10-04 08:15 pm (UTC)
From: [identity profile] och.livejournal.com
параллельный поток подгрузит новые классы? Или переопределит класс, исполняющийся в твоём потоке?
константа-то небось еще и final была? :)

Date: 2011-10-04 08:19 pm (UTC)
From: [identity profile] green-fr.livejournal.com
Не сыпь мне соль на рану, в MatLab'е вообще нет просто static, есть только Constant (аналог static final). Представляешь, да, сколько граблей с оригинальными методами их обхода...

Date: 2011-10-04 05:01 pm (UTC)
From: [identity profile] winnaloushe.livejournal.com
(говорят по-китайски)

Date: 2011-10-04 07:47 pm (UTC)
From: [identity profile] green-fr.livejournal.com
Коничева, Лала-тян?

Date: 2011-10-04 08:18 pm (UTC)
From: [identity profile] och.livejournal.com
По-моему вам с такими актуариями программисты нафиг не нужны. Так что прав был товарищ Каррон.

Profile

green_fr: (Default)
green_fr

May 2025

S M T W T F S
    1 23
4 5 678910
11 12 1314 15 1617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 23rd, 2025 05:06 pm
Powered by Dreamwidth Studios