How do I generate code with OpenBLAS routines in MATLAB Coder on Linux?

I am running MATLAB on Linux, and I have a MATLAB function, simplefn, shown below:
function [outputArg1] = simplefn(inputArg1,inputArg2)
outputArg1 = inputArg1 * inputArg2;
end
When I generate code for this function, I see code as follows in simplefn.c:
void simplefn(const double inputArg1[1000000], const double inputArg2[1000000],
       double outputArg1[1000000])
{
 double d;
 int i;
 int i1;
 int i2;
 for (i = 0; i < 1000; i++) {
  for (i1 = 0; i1 < 1000; i1++) {
   d = 0.0;
   for (i2 = 0; i2 < 1000; i2++) {
    d += inputArg1[i + 1000 * i2] * inputArg2[i2 + 1000 * i1];
   }
   outputArg1[i + 1000 * i1] = d;
  }
 }
}
However, I want the generated code to use OpenBLAS routines. How do I accomplish this?

 採用された回答

MathWorks Support Team
MathWorks Support Team 2026 年 1 月 29 日
編集済み: MathWorks Support Team 約14時間 前
To generate code for 'simplefn' using OpenBLAS routines, first define a MATLAB class openblascallback.m as shown below. This example is adapted from the documentation. Note that the library shared object and header locations, as well as the header name, depend on the Operating System and the specific BLAS library or package installed. For detailed instructions, you can access the release-specific documentation by executing the following command in the MATLAB R2020b command window:
>> web(fullfile(docroot, 'coder/ref/coder.blascallback-class.html'))
classdef openblascallback < coder.BLASCallback
methods (Static)
function updateBuildInfo(buildInfo, buildctx)
libPriority = '';
libPreCompiled = true;
libLinkOnly = true;
libName = 'libopenblas.so';
libPath = fullfile('/usr/lib/x86_64-linux-gnu');
incPath = fullfile('/usr/include/x86_64-linux-gnu');
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
Then create the following Code Generation script simplefn_script.m:
% SIMPLEFN_SCRIPT Generate static library simplefn from simplefn.
%
% Script generated from project 'simplefn.prj' on 04-Dec-2020.
%
% See also CODER, CODER.CONFIG, CODER.TYPEOF, CODEGEN.
%% Create configuration object of class 'coder.EmbeddedCodeConfig'.
cfg = coder.config('lib', 'ecoder', false);
cfg.GenerateReport = true;
cfg.Toolchain = 'GNU gcc/g++ | gmake (64-bit Linux)';
cfg.CustomBLASCallback = 'openblascallback';
%% Invoke MATLAB Coder.
codegen -config cfg simplefn -args {zeros(1000),zeros(1000)} -report
Running simplefn_script.m should successfully generate code with OpenBLAS routines. The simplefn.c now contains:
void simplefn(const double inputArg1[1000000], const double inputArg2[1000000],
double outputArg1[1000000])
{
cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, (blasint)1000, (blasint)
1000, (blasint)1000, 1.0, &inputArg1[0], (blasint)1000,
&inputArg2[0], (blasint)1000, 0.0, &outputArg1[0], (blasint)1000);
}
Please follow the link below to search for the required information regarding the current release:
Starting from MATLAB R2025b, MathWorks provides official callback classes for popular BLAS and LAPACK libraries. These ready-to-use callbacks simplify integration with libraries such as OpenBLAS and MKL, making it easier to enhance performance in standalone code generation.
Refer to the repository MATLAB-Coder-integration-for-BLAS-LAPACK for up-to-date instructions and ready-made callback classes for the platform and BLAS/LAPACK library of choice.

3 件のコメント

Mikhail
Mikhail 2021 年 1 月 6 日
Does it require Embedded Coder in addition to MATLAB Coder?
Ryan Livingston
Ryan Livingston 2021 年 1 月 10 日
編集済み: Ryan Livingston 2021 年 1 月 10 日
Using BLAS via the CustomBLASCallback property does not require Embedded Coder. You can change the script to accommodate that:
cfg = coder.config('lib','ecoder',false);
cfg.GenerateReport = true;
cfg.Toolchain = 'GNU gcc/g++ | gmake (64-bit Linux)';
cfg.CustomBLASCallback = 'openblascallback';
A simple way to see if a Coder config setting requires Embedded Coder is to see if it present in the coder.CodeConfig class
or only in the coder.EmbeddedCodeConfig class
CustomBLASCallback is in the former, so it does not require Embedded Coder.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeExecution Speed についてさらに検索

製品

リリース

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by