Бинарное одноэлементное расширение функционирует для gpuArray
Функциональный arrayfun
предложения улучшили функциональность по сравнению с bsxfun
arrayfun
рекомендуется.
Эта функция ведет себя так же к функции MATLAB® bsxfun
, за исключением того, что оценка функции происходит на графическом процессоре, не на центральном процессоре. Любые необходимые данные не уже на графическом процессоре перемещены в память графического процессора. Функция MATLAB передала в для оценки, скомпилирован и затем выполнен на графическом процессоре. Все выходные аргументы возвращены как gpuArray объекты. Можно получить gpuArray данные с помощью gather
функция.
применяет поэлементно бинарную операцию, заданную C
= bsxfun(FUN
,A,B
)FUN
к массивам A
и B
, с одноэлементным включенным расширением.
В первый раз вы вызываете bsxfun
чтобы запустить конкретную функцию на графическом процессоре, существует некоторое служебное время, чтобы настроить функцию для выполнения графического процессора. Последующие вызовы bsxfun
с той же функцией может запуститься быстрее.
Неодноэлементные размерности входных массивов должны совпадать друг с другом. Другими словами, соответствующие размерности аргументов A
B
, и т.д., должно быть равно друг другу или равен одному. Каждый раз, когда размерность входного массива является одиночным элементом (равный 1), bsxfun
одноэлементное расширение использования. Массив реплицирован по одноэлементному измерению, чтобы совпадать с самым большим из других массивов в той размерности. Когда размерность входного массива является одиночным элементом, и соответствующая размерность в другом массиве аргументов является нулем, bsxfun
фактически уменьшает одноэлементную размерность к 0.
Каждая размерность выходного массива C
одного размера с самым большим из входных массивов в той размерности для ненулевого размера или нулем в противном случае. Следующий код показывает, как размерности размера 1 увеличены или вниз совпадать с размером соответствующей размерности в других аргументах.
R1 = rand(2,5,4,'gpuArray'); R2 = rand(2,1,4,3,'gpuArray'); R = bsxfun(@plus,R1,R2); size(R)
2 5 4 3
R1 = rand(2,2,0,4,'gpuArray'); R2 = rand(2,1,1,4,'gpuArray'); R = bsxfun(@plus,R1,R2); size(R)
2 2 0 4
Поскольку операции поддержаны bsxfun
строго поэлементны, и каждый расчет каждого элемента выполняется независимо от других, определенные ограничения вводятся:
Массивы ввода и вывода не могут изменить форму или размер.
Функционирует, такие как rand
не поддерживайте спецификации размера. Массивы случайных чисел имеют независимые потоки для каждого элемента.
Как bsxfun
в MATLAB, матричной экспоненциальной степени, умножении и делении (^
, *
, /
, \
) выполните поэлементные вычисления только.
Операции, которые изменяют размер или форму массивов ввода или вывода (cat
изменение
, и так далее), не поддержаны.
Индексация только для чтения (subsref
) и доступ к переменным родительской (внешней) функциональной рабочей области из вложенных функций поддерживается. Вы можете индексные переменные, которые существуют в функции перед оценкой на графическом процессоре. Присвоение или subsasgn
индексация этих переменных из вложенной функции не поддержана. Для примера поддерживаемого использования смотрите Операции Шаблона на графическом процессоре
Анонимные функции не имеют доступа к своей родительской функциональной рабочей области.
Перегрузка поддерживаемых функций не позволена.
Код не может вызвать скрипты.
Нет никакого ans
переменная, чтобы содержать неприсвоенные результаты расчета. Убедитесь, что явным образом присвоили переменным результаты всех вычислений.
Следующие функции языка не поддерживаются: персистентные или глобальные переменные, parfor
SPMD
, switch
, и try
/catch
.
Pcode-файлы не могут содержать вызов bsxfun
с gpuArray данными.