История изменений
Исправление
dave,
(текущая версия)
:
Судя по всему, для библиотеки ndarray индексы кладутся на стек, а потом передается адрес памяти из стека, потому что срезка массива (или даже сам массив, короче нужен непрерывный кусок памяти, где лежат индексы). Эффективнее было бы написать специализированную версию матрицы, где индексы по возможности передавались бы через регистры, будь эти индексы явными аргументами методов. Ну, и здесь оправданы небезопасные вызовы типа uget без проверки выхода за пределы границ, поскольку кусок кода хорошо локализован. Короче, глянул мельком исходники библиотеки ndarray. Мне показалось, что вводя обобщенные трейты для индексов, они здесь пожертвовали немного производительностью.
Исправление
dave,
:
Судя по всему, для библиотеки ndarray индексы кладутся на стек, а потом передается адрес памяти из стека, потому что срезка массива. Эффективнее было бы написать специализированную версию матрицы, где индексы по возможности передавались бы через регистры, будь эти индексы явными аргументами методов. Ну, и здесь оправданы небезопасные вызовы типа uget без проверки выхода за пределы границ, поскольку кусок кода хорошо локализован. Короче, глянул мельком исходники библиотеки ndarray. Мне показалось, что вводя обобщенные трейты для индексов, они здесь пожертвовали немного производительностью.
Исходная версия
dave,
:
Судя по всему, для библиотеки ndarray индексы кладутся на стек, а потом передается адрес памяти из стека, потому что срезка массива. Эффективнее было бы написать специализированную версию матрицы, где индексы по возможности передавались бы через регистры, будь они явными аргументами методов. Ну, и здесь оправданы небезопасные вызовы типа uget без проверки выхода за пределы границ, поскольку кусок кода хорошо локализован. Короче, глянул мельком исходники библиотеки ndarray. Мне показалось, что вводя обобщенные трейты для индексов, они здесь пожертвовали немного производительностью.