coder.BLASCallback class

Пакет: кодер

Абстрактный класс для определения библиотеки 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® Coder, набор Custom BLAS library callback.

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

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

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

Abstract
true

Для получения информации об атрибутах класса см. Атрибуты класса (MATLAB).

Методы

развернуть все

Примеры

свернуть все

Этим примером является реализация класса коллбэка 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, используйте советника по вопросам линии ссылки, чтобы видеть, каким библиотекам и параметрам компилятора рекомендуют для вашего варианта использования.

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

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

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

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

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

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

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

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

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

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

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