Size: a a a

Язык программирования Julia / Julia programming language

2018 August 29

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
то code_warntype покажет, что всё ОКИ
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
единственное что приятно — действительно выделяется память только 1 раз на массив, т.е. можно связывать функции + массивы вместе
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
возможно массивы эти надо объявлять как const-тип
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
но если пишешь const, то он делает видимо прямо inline массивы все вставляет, в @code_warntype это конечно выглядит страшно
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
в общем вроде бы работает; ускорил вычисление fft для массива в 3 раза с помощью замыканий за счет того, что массив выделяется не в теле функции, а в блоке let
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
конечно с таким же успехом можно передавать массив для промежуточных вычислений напрямую в функцию, выделяя его в вызывающей функции; но это некрасиво — захламляет как-то вход
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Хм, вышеприведенный пример - это же вроде не про замыкания?
Вот github, в котором идёт обсуждение проблемы: https://github.com/JuliaLang/julia/issues/15276

Там в конце они кстати упоминают FastClosures, можно посмотреть
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
А нет, не прав, про замыкания, да.
Просто непривычно видеть объявления через global - это может свои нюансы вносить.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Если написать так
function f1()
   x = rand(1000)
   function foo()
       return sum(x)
   end
   return foo
end

g = f1()


то @code_warntype g() не показывает никаких Any.
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Андрей Оськин
Если написать так
function f1()
   x = rand(1000)
   function foo()
       return sum(x)
   end
   return foo
end

g = f1()


то @code_warntype g() не показывает никаких Any.
1. А как вы выделяете код так красиво? :)
2. А это какая версия Julia?
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
У меня просто на работе 0.6 стоит, может из-за этого. А мой код на 1.0 похоже вообще не заработает, потому что в let нельзя делать global
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
0. Можно на ты, все свои 😊
1. Обычный маркдаун, три обратных апострофа в начале и конца кода (над буквой ё которые)
2. Julia 1.0.0
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
А зачем вообще делать global? У меня сложилось впечатление, что global нужен только в том случае, когда все вычисления идут в Main.
Но внутри функций он вроде бы не нужен.
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
я хочу аллокировать массив только при первом вызове функции, чтобы по 100 раз это не делать
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
а функция у меня вызывается, скажем, сотню раз
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
А может быть сделать mutable который будет в себе хранить в частности этот массив?
Всё равно наверняка есть какой-то тип, который в себе параметры модели хранит.
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
ну да, я в итоге об этом и думаю. Просто получается, что тогда для простого вычисления (если я его хочу провести вдруг один раз вместо 100) я буду аллокировать огромную кучу памяти )
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
всякие вспомогательные массивы, ну хотя получается, что мне и так и сяк они понадобятся
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
просто так они как-то по очереди создаются, а тут всем скопом
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Ну, при данном подходе любой вызов функции больше одного раза (даже два 😊) потребует этой аллокации.
источник