Джулия: функция, которая получает Dict в качестве входных и выходных данных Dict, стабильна? - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь перенести некоторый код Matlab на Julia, чтобы посмотреть, может ли оптимизированный код Julia работать быстрее, чем оптимизированный код Matlab. Код Matlab - это отдельная функция, описывающая модель с несколькими компонентами. В Matlab функция получает структуру, которая содержит множество параметров и конфигураций модели в качестве входных данных, и выводит структуру, которая хранит поведение всех компонентов.

Я совсем новичок в Джулии, но я знаю, что функции Джулии должны быть стабильными по типу, чтобы быть быстрыми. Мой вопрос: если я напишу функцию Julia, которая получает Dict (который похож на структуру Matlab) в качестве входных данных, и выдает Dict, функция по-прежнему стабильна по типу?

В коде Matlab структура содержит различные типы переменных, включая матрицы, символьные массивы и дескрипторы функций.

1 Ответ

2 голосов
/ 11 июля 2019

Dict {String, Any} должен, потому что его значения будут "упакованы" Джулией, технически медленнее, чем полностью типизированная структура. Однако ваша функция будет тратить большую часть своего времени на вычисление и только поместит результаты в значения Dict в штучной упаковке в конце своего запуска.

Чтобы быть уверенным, что внутренние функции функции стабильны, могут потребоваться подсказки типа с вводимым Dict, например ::

function f(d::Dict)
    width::Float64 = d["width"]  # now we work with width, not d["width"]

До тех пор, пока сами внутренние функции сохраняют стабильность типов, использование такого Dict или даже Dict {Any, Any}, просто ввод и вывод нескольких значений не должны влиять на общее время, достаточное для предотвращения функции Julia. работать быстрее, чем другая реализация (MATLAB), если это действительно более быстрая функция в противном случае.

...