кодер. Класс BLASCallback

Пакет: кодер

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

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

Краткий обзор

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