Ну, Matlab Coder умеет конвертировать .m
файлы в mex
функционирует под некоторыми ограничениями.
Например, нельзя вызывать мекс-функции внутри .m
файл, который должен быть преобразован.
Но относится ли это ограничение только к тем мекс-функциям, у которых нет исходного кода?
То есть, если у нас есть исходный код функции в C mex, и функция вызывается внутри функции Matlab, например так:
function result = fun() %#codegen
a = ...; %complex large-scale matrix operations
result = cFun(a);
end
как описано выше, cFun()
может быть написано на C с использованием mex для повышения производительности, но может быть лучше написать матричные операции в Matlab вместо C.
Поэтому, если мы можем предоставить исходный код cFun()
и использовать Matlab Coder
преобразовать fun()
в mex
Мы бы выиграли как от удобства матричных операций в Matlab, так и от выполнения некоторых операций в C или даже OpenCL.
Но возможно ли это?
Спасибо!
Во-первых: вы можете перезвонить в MATLAB из вашего сгенерированного кода C или сгенерированного MEX-файла, используя coder.extrinsic
, Если по какой-либо причине у вас есть существующий MEX-файл без исходного кода, который вам нужно вызвать, вы можете сделать это так же, как и для любой другой команды MATLAB.
Во-вторых: если у вас есть какой-либо существующий исходный код C, который вы хотели бы вызвать из вашего сгенерированного кода C или сгенерированного файла MEX, вы можете сделать это с помощью вызова coder.ceval
,
Я не думаю, что есть причина, по которой вы не могли бы сделать это с помощью кода OpenCL, хотя, если вы хотите воспользоваться преимуществами кода GPU, я думаю, что встроенная функциональность GPU из Parallel Computing Toolbox будет более удобной.