exponenta event banner

coder.BLASCallback класс

Пакет: кодер

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

Описание

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

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

  • Для создания кода с помощью приложения MATLAB Coder установите обратный вызов пользовательской библиотеки BLAS.

  • Для создания кода для функционального блока MATLAB с помощью Simulink ® Coder установите обратный вызов пользовательской библиотеки BLAS.

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

Чтобы обновить сведения о построении в 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

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

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

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

Представлен в R2018b