Безопасные функции кластера
Область применения: Excel 2013 | Office 2013 | Visual Studio
В Excel 2013 Excel может разгрузить вызовы функции User-Defined (UDF) в высокопроизводительный вычислительный кластер с помощью выделенного интерфейса соединителя кластера. Поставщики вычислительных кластеров предоставляют соединители кластера. Авторы определяемых пользователем функций могут объявить свои определяемые пользователем функции как безопасные для кластера, а затем при наличии соединителя кластера Excel отправляет вызовы этих определяемых пользователем функций соединителю кластера для разгрузки.
Когда Excel обнаруживает кластерную безопасную определяемую пользователем функцию во время пересчета, он передает в соединитель кластера имя текущего запущенного XLL, имя защищенной в кластере пользовательской функции и все параметры. Соединитель удаленно запускает вызов UDF и возвращает результаты в Excel. Независимое вычисление продолжается, и когда соединитель кластера завершит выполнение UDF, он передает результаты в Excel и зависимые вычисления продолжаются. Механизм этого асинхронного поведения имитирует механизм, используемый асинхронными пользовательскими функциями, за исключением того, что соединитель кластера управляет асинхронными аспектами, а не автором UDF. Как правило, соединитель кластера реализует оболочку XLL для загрузки XLLs и запуска определяемых пользователем функций на вычислительных узлах кластера.
Механизм объявления определяемых пользователем функций как кластеробезопасных напоминает механизм объявления определяемых пользователем функций как безопасных для многопоточного пересчета. Тем не менее, поскольку определяемая пользователем функция не обязательно работает на том же компьютере, что и другие определяемые пользователем функции из одного сеанса Excel, при написании безопасных в кластере определяемых пользователем функций существуют различные рекомендации.
Чтобы зарегистрировать определяемую пользователем функцию обратного вызова xlfRegister (форма 1) в качестве кластеробезопасной, необходимо вызвать через интерфейс Excel12 или Excel12v . Дополнительные сведения об этих интерфейсах см. в excel4/Excel12 и Excel4v/Excel12v. Регистрация определяемой пользователем функции в качестве безопасной в кластере через интерфейс Excel4 или Excel4v не поддерживается.
Если вы регистрируете функцию как безопасную для кластера, необходимо убедиться, что функция работает кластеробезопасно. Хотя точное поведение соединителя кластера зависит от реализации, следует спроектировать определяемую пользователем функцию для работы в распределенной компьютерной системе и иметь следующие характеристики:
Определяемая пользователем функция не должна полагаться на состояние памяти. Например, определяемая пользователем функция не должна полагаться на существующий кэш в памяти.
Определяемая пользователем функция не должна выполнять обратные вызовы Excel, которые поставщик соединителя кластера не поддерживает.
В дополнение к безопасному поведению кластера существуют следующие технические ограничения на кластерные определяемые пользователем функции.
Аргументы XLOPER отсутствуют (типы "P", "R").
Нет аргументов XLOPER12, поддерживающих ссылки на диапазон (тип U).
Не может быть эквивалентной функцией листа макросов ("#" и "&" не могут быть объединены).
Для определяемых пользователем функций с более коротким временем выполнения затраты на разгрузку могут быть больше, чем время, затрачиваемое на выполнение определяемой пользователем функции, что сводит на нет многие преимущества использования этой инфраструктуры.
Примечание.
Вы не можете объявить кластерную безопасную определяемую пользователем функцию как асинхронную определяемую пользователем функцию.
Определяемая пользователем функция может определить, выполняется ли она с помощью соединителя кластера, вызвав функцию обратного вызова xlRunningOnCluster .