此示例显示了如何生成代码,该代码同步到FFTW库的FFTW账户中的FFTW规划过程中的代码中的呼叫MATLAB函数块。
当所有这些条件都为真时,代码生成器会生成FFTW库调用:
如果您将包含FFTW调用的代码与运行在多个线程上的外部代码集成在一起,那么您必须防止对FFTW规划过程的并发访问。在你的FFT库回调类中,实现锁
和解锁
方法。您还必须提供管理锁或互斥锁的C代码。许多库,如OpenMP、pthreads和c++标准库(c++ 11及更高版本),都提供锁。这个例子展示了如何实现锁
和解锁
方法并提供支持的C代码。金宝app为了管理锁,本例使用OpenMP库。
在您开始之前,对于生成FFTW库的基本工作流调用快速傅里叶变换MATLAB函数块,看在MATLAB函数块生成的代码中加速快速傅里叶变换(金宝app仿真软件编码器)。
你必须有:
访问已安装的FFTW库。
支持OpenMP库的编译器。金宝app要使用不同的库,如pthreads,请相应地修改支持C代码。金宝app
创建一个simul金宝appink.®模型,并添加MATLAB作用块。
将此代码添加到MATLAB函数块。
功能y = mycustomfft()t = 0:1/50:10-1 / 50;X = SIN(2 * PI * 15 * T)+ SIN(2 * PI * 20 * T);y = fft(x);为k = 1:100 y = y + Ifft(x + k);结束
添加一个外港
将它连接到MATLAB函数块。
编写C函数来初始化、设置和取消设置锁。这个例子使用OpenMP库来管理锁。对于不同的库,相应地修改代码。
创建文件mylock.c
包含以下C代码:
#include "mylock.h" #include "omp.h" static omp_nest_lock_t lockVar;void mylock_initialize(void) {omp_init_nest_lock(&lockVar);} void mylock(void) {omp_set_nest_lock(&lockVar);} void myunlock(void) {omp_unset_nest_lock(&lockVar);}
创建头文件mylock.h.
包含:
#ifndef mylock_h #define mylock_h void mylock_initialize(void);void mylock(空白);void myunlock(空白);#万一
写一个FFT回调类myfftcb
那:
指定FFTW库。
实施锁
和解锁
方法调用支持的C代码来控制对FFTW计划的访金宝app问。
使用这个类作为模板。取代fftwLocation
您的FFTW库安装的位置。
classdefmyfftcb方法(静止的)功能th = getnumthreads编码器.inline(“总是”);th = int32(编码器.const(1));结束功能锁()coder.cinclude (“mylock.h”,“InAllSourceFiles”,真正的);coder.inline (“总是”);coder.ceval ('inclock');结束功能解锁()coder.cinclude (“mylock.h”,“InAllSourceFiles”,真正的);coder.inline (“总是”);coder.ceval (“myunlock”);结束功能UpdateBuildInfo(BuildInfo,CTX)fftwlocation ='\ usr \ lib \ fftw';includePath = fullfile (fftwLocation,“包括”);buildInfo.addIncludePaths (includePath);libPath = fullfile (fftwLocation,“自由”);%双倍的libName1 =“libfftw3-3”;[~, libExt] = ctx.getStdLibInfo();libname1 = [libname1 libext];AddLinkObjects(BuildInfo,libname1,libpath,1000,true,true);%的单libName2 =“libfftw3f-3”;[~, libExt] = ctx.getStdLibInfo();libName2 = [libName2 libExt];addLinkObjects(buildInfo, libName2, libPath, 1000, true, true);结束结束结束
配置代码生成以使用FFTW回调类和C代码调用锁
和解锁
方法。配置代码生成以生成对的调用mylock_initialize
在初始化代码中。
在“配置参数”对话框中:
集自定义FFT库回调来myfftcb
.
在代码生成>自定义代码下,额外的构建信息,设置源文件来mylock.c
.
在代码生成>自定义代码下,在生成的代码中插入定制的C代码,设置初始化函数来mylock_initialize ();
.
构建模型。
coder.fftw.StandaloneFFTW3Interface