кодер. Класс 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 набора.

  • Для генерации кода для блока MATLAB function при помощи Simulink® Coder, обратного вызова библиотеки Custom BLAS набора.

Чтобы задать класс обратного вызова 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

Была ли эта тема полезной?