FunctionCompile
純関数からコンパイルされたコード関数を生成する.
FunctionCompile[{f1,f2,…}]
純関数リストからコンパイルされたコード関数のリストを生成する.
FunctionCompile[k1f1,k2f2,…]
Wolfram言語関数の連想からコンパイルされたコード関数の連想を生成する.
FunctionCompile[defs,fspec]
ローカルの補助定義 defs を使う.
詳細とオプション
- 関数 f は純関数Functionとして指定されることが多い.Functionオブジェクトの変数はTypedの注釈が付いていることが多い.
- FunctionCompileによって作成されたCompiledCodeFunctionオブジェクトは,コンパイルされていない関数と同じように適切な引数に適用できる.
- f 内でKernelFunctionを使って,低レベルコードにコンパイルせずにWolfram Engineを直接使う関数を指定することができる.
- DownValuesFunctionは f の中でシンボルに添付された定義のコンパイルに使われる.
- 関数 f はコンパイラ環境の宣言として存在する関数の名前として純粋に指定できる.
- FunctionCompile[defs,fspec]で fspec からローカルの補助定義 defs を呼び出すことができる.これらの定義はFunctionCompileへのこの呼出しのみに使用される.
- fspec 内で使われる補助定義は,CompilerEnvironmentオプションを与えることでも与えられる.
- CompiledCodeFunctionオブジェクト内のコードは,FunctionCompileExportLibraryおよび関連関数を使って,外部目的のために出力することができる.
- TargetSystemオプションを使って追加のアーキテクチャを指定すると,コンパイルを再度実行しなくても出力が異なるプラットフォーム間で移動できる.
- 次は,使用可能なオプションである.
-
CompilerEnvironment Automatic コンパイルに使用する定義の環境 CompilerOptions Automatic コンパイルパイプラインのさまざまな部分の詳細オプション CompilerRuntimeErrorAction Automatic 低レベルコードの実行中に回復不可能なエラーが生じた際の動作 ProgressReporting Automatic コンパイルの進行をどのように報告するか TargetSystem Inherited コード生成用のマシンアーキテクチャ UseEmbeddedLibrary False この構造用の共有ライブラリを作成して埋め込む - 次は,TargetSystemの可能な設定である.
-
Automatic 主要なマシンアーキテクチャのための追加的なコードを生成する All 全マシンアーキテクチャのための追加的なコードを生成する trg マシンアーキテクチャ trg のための追加的なコードを生成する {trg1,trg2,…} マシンアーキテクチャ{trg1,trg2,…}のための追加的なコードを生成する - 次は,CompilerRuntimeErrorActionの可能な値である.
-
Automatic コンパイラ固有のコードを回避する場合はWolfram Engineで計算を再実行する "Evaluate" 常にWolfram Engineで計算を再実行する None エラーを表す失敗オブジェクトを返す fun 失敗オブジェクトに fun を適用してその結果を返す
例題
すべて開くすべて閉じる例 (5)
Functionをコンパイルされたコード関数にコンパイルする:
CompiledCodeFunctionは正しいタイプの引数で評価する:
コンパイルされたコードでは多くの一般的な操作がサポートされている:
InformationはCompiledCodeFunctionの署名が抽出できる:
いくつかの関数はFunctionCompileでコンパイルできる:
FunctionDeclarationで補助定義が与えられる:
TypeDeclarationで新たな型が加えられる:
製品型をインスタンス化しフィールドを抽出する関数をコンパイルする:
FunctionCompileはコンパイラ環境の宣言の名前から関数を作成する:
スコープ (11)
Wolfram EngineはKernelFunctionを使って呼び出すことができる.以下はWolfram Engine内の関数を定義する:
KernelFunctionを使ってコンパイルされたコードからユーザ定義の関数を呼び出す:
外側のスコープにある変数を参照するネストとした関数は,関数の引数として使うことができる:
Printを使って計算の内側を見る:
CompiledCodeFunctionを他のCompiledCodeFunction式に引数として渡すことができる.
:=を使う関数を操作して宣言のためにDownValuesを設定する:
FunctionDeclarationは関数に名前と型を与え実装がDownValuesから来ることを示す:
CompiledCodeFunctionには,同じアーキテクチャのマシン上で直列化と非直列化を可能にする低レベルのコードが含まれている:
オプション (6)
CompilerRuntimeErrorAction (1)
低レベルコードの実行中のエラー動作はCompilerRuntimeErrorActionによって支配される:
関数がコンパイラに特有のコードを含む場合,関数は評価器で再実行はされない:
Noneの設定は,決して評価器で再実行されない:
ProgressReporting (1)
ProgressReportingオプションをFalseにすると,これは表示されなくなる.
ProgressReportingのデフォルト値はAutomaticであるが,これは大域設定の$ProgressReportingが使われることを意味する.これがFalseに設定されていると,進捗状況は報告されない.
TargetSystem (2)
現行プラットフォームの追加のマシンアーキテクチャ上で実行できるコンパイルされたコード関数を作る:
可能なすべてのマシンアーキテクチャプラットフォーム上で実行できるコンパイルされたコード関数を作成する:
コンパイルされたコード関数は,これらの$SystemID設定を持つマシンに移動でき,もとのコードを再コンパイルしなくても実行できるようになる.
CreateCompilerEnvironmentを使って複数のターゲットシステムが生成できる点に注意のこと.こうすると,クロスコンパイルの時間が短縮できる.
UseEmbeddedLibrary (1)
現行プラットフォーム用の共有ライブラリを埋め込むCompiledCodeFunctionを作成する:
考えられる問題 (4)
エラー (3)
低レベルコードを含む関数の計算中にエラーが出てコンパイラ固有のコードを回避する場合,計算はWolfram Engineで実行される:
以下では関数の実行中にエラーになった.計算は中断され,メッセージが出され,結果の計算にはWolfram Engineが使われた:
Typedを使って特定の型を指定する:
CompiledCodeFunctionから関数を返すことはサポートされていない:
CompiledCodeFunctionの中にネストしている関数は関数を返すことができる:
関数の作成 (1)
FunctionCompileは宣言が複数ある場合は関数が作れない:
Typedが使われているならコンパイルできる:
多形の宣言がある場合,FunctionCompileは関数が作れない:
Typedが使われているならコンパイルできる:
おもしろい例題 (2)
シンボルの宣言を使う宣言は,宣言が複数回使われる際に便利である:
シンボルを参照するFunctionDeclaration:
テキスト
Wolfram Research (2019), FunctionCompile, Wolfram言語関数, https://reference.wolfram.com/language/ref/FunctionCompile.html (2021年に更新).
CMS
Wolfram Language. 2019. "FunctionCompile." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2021. https://reference.wolfram.com/language/ref/FunctionCompile.html.
APA
Wolfram Language. (2019). FunctionCompile. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/FunctionCompile.html