green_fr (green_fr) wrote,
green_fr
green_fr

Category:

MatLab classes overhead

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

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

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

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

  • Линьяно 2021

    Этим летом устроили себе «День сурка» второго порядка: после года, проведённого как один нескончаемый день, решили провести летний отпуск в точности…

  • La Seyne-sur-Mer

    На школьных каникулах решили сменить обстановку, съездить на юг Франции. Потому что за границу всё ещё сложно / невозможно, а там как минимум больше…

  • Forum des métiers

    У Натана в школе проводили что-то типа дней профориентации. В пошлом году делали в игровой форме — дети типа строят «город будущего», они выбрали…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 15 comments

  • Линьяно 2021

    Этим летом устроили себе «День сурка» второго порядка: после года, проведённого как один нескончаемый день, решили провести летний отпуск в точности…

  • La Seyne-sur-Mer

    На школьных каникулах решили сменить обстановку, съездить на юг Франции. Потому что за границу всё ещё сложно / невозможно, а там как минимум больше…

  • Forum des métiers

    У Натана в школе проводили что-то типа дней профориентации. В пошлом году делали в игровой форме — дети типа строят «город будущего», они выбрали…