coder.fftw.StandaloneFFTW3Interface.unlock
クラス: coder.fftw.StandaloneFFTW3Interface
パッケージ: coder.fftw
FFTW 計画へのアクセスをロック解除する
構文
coder.fftw.StandaloneFFTW3Interface.unlock()
説明
coder.fftw.StandaloneFFTW3Interface.unlock()
は、生成されたスタンドアロン コード内で、FFTW ライブラリ呼び出しの計画へのアクセスをロック解除します。
複数のスレッドが FFTW ライブラリを呼び出す場合、coder.fftw.StandaloneFFTW3Interface
から派生する FFT ライブラリ コールバック クラスでこのメソッドを実装します。
例
生成されたコード内での FFTW 計画へのマルチスレッド アクセスの同期
coder.fft.StandaloneFFTW3Interface
から派生するクラスで、C コードを呼び出してロックを管理する lock
メソッドと unlock
メソッドを実装します。
ロックを初期化、設定、設定解除する C 関数を記述します。ロックを管理するために、次の例では OpenMP ライブラリを使用します。ライブラリが異なる場合は、それに応じてコードを変更してください。
次の C コードを含むファイル
mylock.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); void myunlock(void); #endif
次のような FFT コールバック クラス myfftcb
を記述します。
FFTW ライブラリを指定する。
サポートする C コードを呼び出して FFTW 計画へのアクセスを制御する
lock
メソッドとunlock
メソッドを実装する。
このクラスをテンプレートとして使用します。fftwLocation
を FFTW ライブラリのインストール場所で置き換えます。
classdef myfftcb < coder.fftw.StandaloneFFTW3Interface methods (Static) function th = getNumThreads coder.inline('always'); th = int32(coder.const(1)); end function lock() coder.cinclude('mylock.h', 'InAllSourceFiles', true); coder.inline('always'); coder.ceval('mylock'); end function unlock() coder.cinclude('mylock.h', 'InAllSourceFiles', true); coder.inline('always'); coder.ceval('myunlock'); end function updateBuildInfo(buildInfo, ctx) fftwLocation = '\usr\lib\fftw'; includePath = fullfile(fftwLocation, 'include'); buildInfo.addIncludePaths(includePath); libPath = fullfile(fftwLocation, 'lib'); %Double libName1 = 'libfftw3-3'; [~, libExt] = ctx.getStdLibInfo(); libName1 = [libName1 libExt]; addLinkObjects(buildInfo, libName1, libPath, 1000, true, true); %Single libName2 = 'libfftw3f-3'; [~, libExt] = ctx.getStdLibInfo(); libName2 = [libName2 libExt]; addLinkObjects(buildInfo, libName2, libPath, 1000, true, true); end end end
コード生成コンフィギュレーション パラメーターを設定します。
MATLAB® Coder™ の
codegen
コマンドを使用したコード生成の場合、次のように設定します。CustomFFTCallback
を'myfftcb'
に。CustomSource
を'mylock.c'
に。CustomInitializer
を'mylock_initialize();'
に。
MATLAB Coder アプリを使用したコード生成の場合、次のように設定します。
[カスタム FFT ライブラリのコールバック] を
myfftcb
に。[追加ソース ファイル] を
mylock.c
に。[初期化関数] を
mylock_initialize();
に。
Simulink® Coder を使用して MATLAB Function ブロックからコードを生成する場合、次のパラメーターを設定します。
[カスタム FFT ライブラリのコールバック] を
myfftcb
に。[コード生成]、[カスタム コード] の [追加のビルド情報] で、[ソース ファイル] を
mylock.c
に設定する。[コード生成]、[カスタム コード] の [生成時に挿入するカスタム C コード] で、[初期化関数] を
mylock_initialize();
に設定する。
コードを生成します。
バージョン履歴
R2017b で導入
参考
トピック
外部の Web サイト
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)