НЕКОТОРЫЕ) ОТВЕТЫ: я нашел ответы на некоторые из этих вопросов, которые я задаю здесь
questions:
1. fusing kernels is such a huge advance I don't understand when I would ever not want to use @fuse. isn't it always better? When is it a bad idea?
Ответ: Предохранитель пока не поддерживает много полезных операций.Например, z = cupy.empy_like (x) не работает и не ссылается на глобальные переменные.следовательно, он просто не может быть применен повсеместно.
I'm wondering about it's composability
1. will @fuse inline the functions it finds within the decorated function?
Ответ: Глядя на тайминги и разметку nvvm, он выглядит так, как будто он тянет подпрограммы и объединяет их с ядром.Таким образом, деление вещей на подпрограммы, а не монолитный код, будет работать с предохранителем.
2. I see that a bug fix in the release notes says that it can now handle calling other functions decorated with @fuse. But this does not say if their kernels are fused or remain separate.
ОТВЕТ: Глядя на вывод NVVM, кажется, что они объединены.Трудно сказать, есть ли некоторые остаточные издержки, но время не показывает значительных накладных расходов, указывающих на два отдельных ядра.Главное, что теперь это работает.Начиная с Cupy 4.1, вы не могли вызывать слитую функцию из слитой функции, так как возвращаемые типы были неправильными.Но с 5.1 можно.Однако вам не нужно украшать эти функции.Это работает, независимо от того, работаете вы или нет.
4. Why isn't it documented?
ОТВЕТ: Похоже, что в нем есть некоторые ошибки и некоторые неполные функциональные возможности.Код также рекомендует API, поскольку он может быть изменен.
Однако это, по сути, чудодейственная функция, когда ее можно использовать, легко увеличивая скорость на порядок на массивах малого и среднего размера.Так что было бы неплохо, если бы даже эта альфа-версия была задокументирована.