Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Flujo de trabajo de generación de código general

El flujo de trabajo de generación de código general para las funciones que no son las funciones de objeto de los modelos de aprendizaje automático es el mismo que el flujo de trabajo descrito enStatistics and Machine Learning Toolbox™ MATLAB®Coder™. Para obtener más información, consulte.Getting Started with MATLAB Coder (MATLAB Coder) Para obtener información sobre cómo generar código para las funciones de objeto de los modelos de aprendizaje automático, consulte.Introducción a la generación de código

Este ejemplo explica brevemente el flujo de trabajo de generación de código general como se resume en este diagrama de flujo:

Definir función de punto de entrada

Una función, también conocida como la o función, es una función que se define para la generación de código.entry-pointtop-levelprimary Dado que no se puede llamar a ninguna función en el nivel superior mediante, debe definir una función de punto de entrada que llama a las funciones habilitadas para generación de código y generar código de C/C++ para la función de punto de entrada mediante.codegencodegen Todas las funciones dentro de la función de punto de entrada deben admitir la generación de código.

Agregue la Directiva del compilador (o pragma) a la función de punto de entrada después de la firma de función para indicar que va a generar código para el algoritmo.%#codegenMATLAB Al agregar esta Directiva se indica al analizador de código que le ayudará a diagnosticar y corregir infracciones que provocarán errores durante la generación de código.MATLAB Ver.Check Code with the Code Analyzer (MATLAB Coder)

Por ejemplo, para generar código que estime el intervalo intercuartil de un conjunto de datos mediante, defina esta función. Puede permitir argumentos de entrada opcionales especificando como un argumento de entrada.iqr

function r = iqrCodeGen(x) %#codegen %IQRCODEGEN Estimate interquartile range  %   iqrCodeGen returns the interquartile range of the data x,  %   a single- or double-precision vector. r = iqr(x); end
varargin Para obtener más información, consulte y.Code Generation for Variable Length Argument Lists (MATLAB Coder)Especifique argumentos de tamaño variable para la generación de código

Generar código

Configure el compilador

Para generar código de C/C++, debe tener acceso a un compilador que esté configurado correctamente. MATLABCoder localiza y utiliza un compilador compatible instalado. Para ver y cambiar el compilador de C predeterminado, escriba: para obtener más información, consulte.

mex -setup
Cambiar el compilador predeterminado (MATLAB)

Generar código mediantecodegen

Después de configurar el compilador, genere código para la función de punto de entrada mediante o elcodegen MATLABCoder Aplicación. Para obtener información sobre cómo generar código mediante el MATLABCoder aplicación, vea.Generate MEX Functions by Using the MATLAB Coder App (MATLAB Coder)

Para generar código en la línea de comandos, utilice.codegen Dado que C y C++ son lenguajes con tipos estáticos, debe determinar las propiedades de todas las variables en la función de punto de entrada en tiempo de compilación. Especifique los tipos de datos y los tamaños de todas las entradas de la función de punto de entrada cuando llame mediante la opción.codegen-args

  • Para especificar el tipo de datos y el tamaño exacto de la matriz de entrada, pase una expresión que represente el conjunto de valores con un determinado tipo de datos y tamaño de matriz.MATLAB Por ejemplo, para especificar que el código generado debe aceptar un vector de columna numérica de doble precisión con 100 elementos, escriba:iqrCodeGen.m

    testX = randn(100,1); codegen iqrCodeGen -args {testX} -report

    El indicador genera un informe de generación de código.-report Ver.Code Generation Reports (MATLAB Coder)

  • Para especificar que al menos una de las cotas puede tener cualquier longitud, utilice la opción de la siguiente manera.-argscoder.typeof

    -args {coder.typeof(example_value, size_vector, variable_dims)}
    Los valores de example_value, size_vectorY variable_dims especificar las propiedades de la matriz de entrada que el código generado puede aceptar.

    • Una matriz de entrada tiene el mismo tipo de datos que los valores de ejemplo en example_value.

    • size_vector es el tamaño de la matriz de una matriz de entrada si el correspondiente variable_dims valor es.false

    • size_vector es el límite superior del tamaño de la matriz si el correspondiente variable_dims valor es.true

    • variable_dims Especifica si cada dimensión de la matriz tiene un tamaño de variable o un tamaño fijo. Un valor de (lógico 1) significa que la dimensión correspondiente tiene un tamaño variable; un valor de (lógico 0) significa que la cota correspondiente tiene un tamaño fijo.truefalse

    Especificar una entrada de tamaño variable es conveniente cuando tiene datos con un número desconocido de observaciones en tiempo de compilación. Por ejemplo, para especificar que el código generado puede aceptar un vector de columna numérica de precisión doble de cualquier longitud, escriba:iqrCodeGen.m

    testX = coder.typeof(0,[Inf,1],[1,0]); codegen iqrCodeGen -args {testX} -report

    para la0 example_value valor implica que el tipo de datos es porque es el tipo de datos numérico predeterminado de. para ladoubledoubleMATLAB[Inf,1] size_vector valor y para el[1,0] variable_dims valor implican que el tamaño de la primera dimensión es variable y sin delimitar, y el tamaño de la segunda dimensión se fija para ser 1.

  • Para especificar una matriz de caracteres, como los argumentos de par nombre-valor admitidos, especifique la matriz de caracteres como una constante mediante.coder.Constant Por ejemplo, suponga que es un argumento de par nombre-valor válido para, y el valor correspondiente es numérico.'Name'iqrCodeGen.mvalue A continuación, introduzca:

    codegen iqrCodeGen -args {testX,coder.Constant('Name'),value} -report

Para obtener más información, consulte y.Generate C Code at the Command Line (MATLAB Coder)Specify Properties of Entry-Point Function Inputs (MATLAB Coder)

Tipo de compilación

MATLABCoder puede generar código para estos tipos:

  • Función MEX (ejecutable)MATLAB

  • Código de C/C++ independiente

  • Código de C/C++ independiente compilado en una biblioteca estática

  • Código de C/C++ independiente compilado en una biblioteca vinculada dinámicamente

  • Código de C/C++ independiente compilado en un ejecutable

Puede especificar el tipo de compilación con la opción de.-configcodegen Para obtener más información sobre la configuración de opciones de generación de código, consulte.Configure Build Settings (MATLAB Coder)

De forma predeterminada, genera una función MEX.codegen Una función MEX es un programa de C/C++ que es ejecutable desde.MATLAB Puede usar una función MEX para acelerar los algoritmos y probar el código generado para la funcionalidad y los problemas de tiempo de ejecución.MATLAB Para obtener más información, consulte y.MATLAB Algorithm Acceleration (MATLAB Coder)Why Test MEX Functions in MATLAB? (MATLAB Coder)

Informe de generación de código

Puede usar la marca para generar un informe de generación de código.-report Este informe le ayuda a depurar problemas de generación de código y ver el código de C/C++ generado. Para obtener más información, consulte.Code Generation Reports (MATLAB Coder)

Compruebe que el código generado

Pruebe una función MEX para comprobar que el código generado proporciona la misma funcionalidad que el código original.MATLAB Para realizar esta prueba, ejecute la función MEX con las mismas entradas que usó para ejecutar el código original y, a continuación, compare los resultados.MATLAB Ejecutar la función MEX en antes de generar código independiente también le permite detectar y corregir errores en tiempo de ejecución que son mucho más difíciles de diagnosticar en el código independiente generado.MATLAB Para obtener más información, consulte.Why Test MEX Functions in MATLAB? (MATLAB Coder)

Pasar algunos datos para comprobar si, y devolver el mismo rango intercuartil.iqriqrCodeGeniqrCodeGen_mex

testX = randn(100,1); r = iqr(testX); r_entrypoint = iqrCodeGen(testX); r_mex = iqrCodeGen_mex(testX);

Compare las salidas utilizando.isequal

isequal(r,r_entrypoint,r_mex)

Devuelve Logical 1 (true) si todas las entradas son iguales.isequal

También puede verificar la función MEX utilizando un archivo de prueba y.coder.runTest Para obtener más información, consulte.Testing Code Generated from MATLAB Code (MATLAB Coder)

Consulte también

Temas relacionados