文档

coder.fftw.StandaloneFFTW3Interface.lock

类:coder.fftw.StandaloneFFTW3Interface
包:coder.fftw

锁访问FFTW规划

语法

coder.fftw.StandaloneFFTW3Interface.lock ()

描述

coder.fftw.StandaloneFFTW3Interface.lock ()锁访问FFTW库调用的规划过程生成独立的代码。

当多个线程调用一个FFTW图书馆,在图书馆一个FFT实现这个方法来源于回调类coder.fftw.StandaloneFFTW3Interface

例子

全部展开

在一个来源于类coder.fft.StandaloneFFTW3Interface、实现解锁方法调用C代码来管理一个锁。

编写C函数,初始化、设置和设置一个锁。管理锁,这个示例使用OpenMP图书馆。不同的图书馆,相应地修改代码。

  • 创建一个文件mylock.c包含这个C代码:

    # include“mylock。h omp # include。h”静态omp_nest_lock_t lockVar;空白mylock_initialize (void) {omp_init_nest_lock (&lockVar);}无效mylock (void) {omp_set_nest_lock (&lockVar);}无效myunlock (void) {omp_unset_nest_lock (&lockVar);}

  • 创建一个头文件mylock.h包含:

    的ifndef MYLOCK_H # define MYLOCK_H空白mylock_initialize(无效);空白mylock(无效);空白myunlock(无效);# endif

写一个FFT回调类myfftcb:

  • 指定FFTW图书馆。

  • 实现了解锁方法调用支持C代码来控制访问FFTW规划。金宝app

使用这个类作为一个模板。取代fftwLocationFFTW库安装的位置。

classdefmyfftcb < coder.fftw.StandaloneFFTW3Interface方法(静态)函数th = getNumThreads coder.inline (“总是”);th = int32 (coder.const (1));结束函数锁()coder.cinclude (“mylock.h”,“InAllSourceFiles”,真正的);coder.inline (“总是”);coder.ceval (“mylock”);结束函数解锁()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,真的,真的);%的单libName2 =“libfftw3f-3”;[~,libExt] = ctx.getStdLibInfo ();libName2 = [libName2 libExt];addLinkObjects (buildInfo libName2 libPath 1000,真的,真的);结束结束结束

设置代码生成配置参数。

  • 代码生成的MATLAB®编码器™codegen命令,设置:

    • CustomFFTCallback“myfftcb”

    • CustomSource“mylock.c”

    • CustomInitializer“mylock_initialize ();”

  • 代码生成的MATLAB编码器应用程序设置:

    • 定制FFT库调myfftcb

    • 额外的源文件mylock.c

    • 初始化函数mylock_initialize ();

  • 从一个代码生成MATLAB函数块用金宝app®编码器设置这些参数:

    • 定制FFT库调myfftcb

    • 代码生成>自定义代码下,额外的构建信息,设置源文件mylock.c

    • 代码生成>自定义代码下,插入自定义生成C代码,设置初始化函数mylock_initialize ();

生成的代码。

介绍了R2017b