coder.BLASCallback class

Пакет: coder

Абстрактный класс для определения библиотеки BLAS, заголовка CBLAS и информации о типе данных для вызовов BLAS в сгенерированном коде

Описание

coder.BLASCallback является абстрактным классом для определения класса коллбэка BLAS. Класс коллбэка BLAS задает библиотеку BLAS, заголовок CBLAS и информацию о типах данных для вызовов BLAS в коде, сгенерированном из MATLAB® код. Если вы используете MATLAB Coder™, чтобы сгенерировать автономный код или сгенерировать код для блока MATLAB Function, для определенных векторов и матричных функций, можно сгенерировать вызовы BLAS. Для генерации вызовов BLAS установите соответствующий параметр конфигурации на имя класса коллбэка BLAS.

  • Для генерации кода при помощи MATLAB Coder codegen команда, задать CustomBLASCallback.

  • Для генерации кода при помощи приложения MATLAB Coder установите Custom BLAS library callback.

  • Для генерации кода для блока MATLAB Function при помощи Simulink® Кодер, установите Custom BLAS library callback.

Для определения класса коллбэка BLAS с именем useMyBLAS, сделайте следующую линию первой линией файла определения класса.

classdef useMyBLAS < coder.BLASCallback
Вы должны определить updateBuildInfo, getHeaderFileName, и getBLASIntTypeName методы. Другие методы, getBLASDoubleComplexTypeName, getBLASSingleComplexTypeName, и useEnumNameRatherThanTypedef, уже реализованы в coder.BLASCallback. В определенных ситуациях необходимо переопределить эти методы собственными определениями, когда вы задаете свой класс коллбэка. Все методы являются статическими и не компилируются.

Атрибуты класса

Abstract
true

Для получения информации об атрибутах класса см. раздел «Атрибуты класса».

Методы

расширить все

Примеры

свернуть все

Этот пример является реализацией класса коллбэка BLAS mklcallback для ссылки на библиотеку Intel MKL BLAS в Windows® платформы. mklcallback не включает явные реализации getBLASDoubleComplexTypeName, getBLASSingleComplexTypeName, и useEnumNameRatherThanTypedef. Он наследует эти методы от coder.BLASCallback.

classdef mklcallback < coder.BLASCallback
    methods (Static)
        function updateBuildInfo(buildInfo, ~)
            libPath = fullfile(pwd,'mkl','WIN','lib','intel64');
            libPriority = '';
            libPreCompiled = true;
            libLinkOnly = true;
            libs = {'mkl_intel_ilp64.lib' 'mkl_intel_thread.lib' 'mkl_core.lib'};
            buildInfo.addLinkObjects(libs, libPath, libPriority, libPreCompiled, libLinkOnly);
            buildInfo.addLinkObjects('libiomp5md.lib',fullfile(matlabroot,'bin','win64'), ...
                libPriority, libPreCompiled, libLinkOnly);
            buildInfo.addIncludePaths(fullfile(pwd,'mkl','WIN','include'));
            buildInfo.addDefines('-DMKL_ILP64');
        end
        function headerName = getHeaderFilename()
            headerName = 'mkl_cblas.h';
        end
        function intTypeName = getBLASIntTypeName()
            intTypeName = 'MKL_INT';
        end
    end
end

Используйте этот пример класса в качестве шаблона для записи собственного класса коллбэка BLAS.

Если вы используете другую библиотеку BLAS, замените 'mkl_cblas.h' с именем файла заголовка CBLAS.

Если вы используете другую библиотеку BLAS, замените 'MKL_INT' с именем целочисленного типа данных CBLAS.

Как обновить сведения о сборке в updateBuildInfo с именем и местоположением библиотеки BLAS используйте информацию о сборке addLinkObjects способ. Если вы используете библиотеку Intel MKL BLAS, используйте ссылку линии advisor, чтобы увидеть, какие библиотеки и опции компилятора рекомендованы для использования.

Как обновить сведения о сборке в updateBuildInfo с указанием местоположения файлов заголовков CBLAS используйте информацию о сборке addIncludePaths способ.

Чтобы добавить определения макросов препроцессора к информации о сборке в updateBuildInfo, используйте информацию о сборке addDefines способ.

Чтобы задать опции компилятора в updateBuildInfo, используйте информацию о сборке addCompileFlags способ.

Чтобы задать опции линкера в updateBuildInfo, используйте информацию о сборке addLinkFlags способ.

The getBLASDoubleComplexTypeName метод возвращает тип, используемый для комплексных переменных двойной точности в сгенерированном коде. Если библиотека BLAS принимает тип, отличный от double* и void* для аргументов комплексного массива двойной точности включите этот метод в определение класса коллбэка.

function doubleComplexTypeName = getBLASDoubleComplexTypeName()
doubleComplexTypeName = 'my_double_complex_type';
end

Замените my_double_complex_type с типом, который библиотека BLAS принимает для аргументов комплексного массива двойной точности.

The getBLASSingleComplexTypeName метод возвращает тип, используемый для комплексных переменных с одной точностью в сгенерированном коде. Если библиотека BLAS принимает тип, отличный от float* и void* для аргументов комплексного массива с одной точностью включите этот метод в определение класса коллбэка.

function singleComplexTypeName = getBLASSingleComplexTypeName()
doubleComplexTypeName = 'my_single_complex_type';
end

Замените my_single_complex_type с типом, который библиотека BLAS принимает для аргументов комплексного массива с одной точностью.

The useEnumNameRatherThanTypedef метод возвращает false по умолчанию. Если типы для перечислений в библиотеке BLAS, включают enum ключевое слово, переопределите этот метод, чтобы вернуться true в определении класса коллбэка.

function p = useEnumNameRatherThanTypedef()
p = true;
end

Этот пример является реализацией класса коллбэка BLAS openblascallback для ссылки на библиотеку OpenBLAS на Linux® платформы. openblascallback не имеет явных реализаций getBLASDoubleComplexTypeName, getBLASSingleComplexTypeName, и useEnumNameRatherThanTypedef. Он наследует эти методы от coder.BLASCallback.

classdef openblascallback < coder.BLASCallback
    methods (Static)
        function updateBuildInfo(buildInfo, buildctx)
            libPriority = '';
            libPreCompiled = true;
            libLinkOnly = true;
            libName = 'libopenblas.a';          
            libPath = fullfile(pwd,'openblas');
            incPath = fullfile(pwd,'openblas');
            buildInfo.addLinkFlags('-lpthread');
            buildInfo.addLinkObjects(libName, libPath, ...
                libPriority, libPreCompiled, libLinkOnly);
            buildInfo.addIncludePaths(incPath);
        end
        function headerName = getHeaderFilename()
            headerName = 'cblas.h';
        end
        function intTypeName = getBLASIntTypeName()
            intTypeName = 'blasint';
        end
    end
end

Если вы генерируете код С++, который включает вызовы функций библиотеки OpenBLAS, компилируйте его с -pedantic опция выдает предупреждения. Чтобы отключить -pedantic опция компилятора, в updateBuildInfo метод, включите эти линии:

if buildctx.getTargetLang() == 'C++'
    buildInfo.addCompileFlags('-Wno-pedantic');
end

OpenBLAS не поддерживает стандарт C89/C90.

Введенный в R2018b