Почему julia дает пизды вашим любимым* язычкам программирования.
https://julialang.org/blog/2017/01/moredots
Используя dot call как здесь:
X .= f.(2 .* X.^2 .+ 6 .* X.^3 .- sqrt.(X))
или
@. X = f(2X^2 + 6X^3 - sqrt(X))
Вы эксплицитно требуете от компилятора сгенерировать объединить циклы и сгенерить векторизированый код, который не будет делать промежуточных аллокаций массивов.
Данный подход можно заставить работать и для своих контейнеров, для этого нужно будет реализовать функцию, которая будет работать селектором для данных из вашего контейнера.
Кроме того, есть возможность при помощи библиотеки GPUArrays обсчитывать массивы на opencl/cuda, используя тот же самый код, как и для обычного кода, но используя специальные типы. Все благодаря multiple dispatch и макросистеме.
[*] кроме, пожалуй, хаскеля, если ghc сделает loop fusion и вы не обосретесь с ленивостью
@anonymous Привел.
https://juliacomputing.com/press/2016/11/28/celeste.html
The code used for this analysis is called Celeste. It was developed at Berkeley Lab and uses statistical inference to mathematically locate and characterize light sources in the sky. When it was first released in 2015, Celeste was limited to single-node execution on at most hundreds of megabytes of astronomical images. In the case of the Sloan Digital Sky Survey, which is the dataset used for this research, this analysis is conducted by identifying points of light in nearly 5 million images of approximately 12 megabytes each – a dataset of 55 terabytes.
Using the new parallel implementation, the research team dramatically increased the speed of its analysis by an estimated 225x. This enabled the processing of more than 20 thousand images, or 250 gigabytes – an increase of more than 3 orders of magnitude compared with previous iterations.
@l29ah 1. Умеет, но это ОПТИМИЗАЦИЯ автовекторизации, то есть она может и не включиться, если gcc не хватит информации для того чтобы доказать, что оптимизация не изменит результат.
@anonymous чувствуются слова не мальчика, но инженера
@queet5ee трансдьюсеры магически код за тебя не векторизуют, будешь вручную костылять и смотреть как прекрасная абстракция подтекает
@anonymous Ты missing the point поста, написать вручную можно, но зачем когда можно не писать.
@anonymous > На любом* языке с достаточным уровнем метапрограммирования можно написать шаблон/макрос
на любом языке с достаточным уровнем метапрограммирования можно написать любой другой язык программирования, но далеко не факт что он будет эффективно компилироваться(инлайниться) в векторизованый машинный код.
ну вот захочешь ты там новую векторизированую функцию и придется ебаться в сишку, отсос.