FunctionCompile

FunctionCompile[f]

純関数からコンパイルされたコード関数を生成する.

FunctionCompile[{f1,f2,}]

純関数リストからコンパイルされたコード関数のリストを生成する.

FunctionCompile[k1f1,k2f2,]

Wolfram言語関数の連想からコンパイルされたコード関数の連想を生成する.

FunctionCompile[defs,fspec]

ローカルの補助定義 defs を使う.

詳細とオプション

  • 関数 f は純関数Functionとして指定されることが多い.Functionオブジェクトの変数はTypedの注釈が付いていることが多い.
  • FunctionCompileによって作成されたCompiledCodeFunctionオブジェクトは,コンパイルされていない関数と同じように適切な引数に適用できる.
  • f 内でKernelFunctionを使って,低レベルコードにコンパイルせずにWolfram Engineを直接使う関数を指定することができる.
  • DownValuesFunctionf の中でシンボルに添付された定義のコンパイルに使われる.
  • 関数 f はコンパイラ環境の宣言として存在する関数の名前として純粋に指定できる.
  • FunctionCompile[defs,fspec]fspec からローカルの補助定義 defs を呼び出すことができる.これらの定義はFunctionCompileへのこの呼出しのみに使用される.
  • fspec 内で使われる補助定義は,CompilerEnvironmentオプションを与えることでも与えられる.
  • CompiledCodeFunctionオブジェクト内のコードは,FunctionCompileExportLibraryおよび関連関数を使って,外部目的のために出力することができる.
  • TargetSystemオプションを使って追加のアーキテクチャを指定すると,コンパイルを再度実行しなくても出力が異なるプラットフォーム間で移動できる.
  • 次は,使用可能なオプションである.
  • CompilerEnvironment Automaticコンパイルに使用する定義の環境
    CompilerOptionsAutomaticコンパイルパイプラインのさまざまな部分の詳細オプション
    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は正しいタイプの引数で評価する:

予期せぬ引数が与えられると,結果としてエラーが出る:

コンパイルされたコードでは多くの一般的な操作がサポートされている:

InformationCompiledCodeFunctionの署名が抽出できる:

いくつかの関数はFunctionCompileでコンパイルできる:

関数をホールドするために連想を使うと便利なことがある:

FunctionDeclarationで補助定義が与えられる:

TypeDeclarationで新たな型が加えられる:

製品型をインスタンス化しフィールドを抽出する関数をコンパイルする:

FunctionCompileはコンパイラ環境の宣言の名前から関数を作成する:

スコープ  (11)

幅広いネイティブタイプがサポートされている:

複合タイプもサポートされている:

関数タイプもサポートされている:

関数と整数の引数を渡すと必要な計算が行われる:

Wolfram EngineはKernelFunctionを使って呼び出すことができる.以下はWolfram Engine内の関数を定義する:

KernelFunctionを使ってコンパイルされたコードからユーザ定義の関数を呼び出す:

関数をデータとして渡すことができる:

第1引数が,どのネストした関数を使うかを選択する:

ネストした関数は,外側のスコープの変数が参照できる:

外側のスコープにある変数を参照するネストとした関数は,関数の引数として使うことができる:

Printを使って計算の内側を見る:

CompiledCodeFunctionを他のCompiledCodeFunction式に引数として渡すことができる.

関数を定義する:

この関数は引数として関数を取る:

以下は,2番目の関数の引数として最初の関数を渡す:

:=を使う関数を操作して宣言のためにDownValuesを設定する:

FunctionDeclarationは関数に名前と型を与え実装がDownValuesから来ることを示す:

これで宣言を使う関数がコンパイルされた:

CompiledCodeFunctionには,同じアーキテクチャのマシン上で直列化と非直列化を可能にする低レベルのコードが含まれている:

オプション  (6)

CompilerEnvironment  (1)

コンパイラ環境を作って関数定義を加える:

コンパイルの際にコンパイラ環境を使う:

CompilerRuntimeErrorAction  (1)

低レベルコードの実行中のエラー動作はCompilerRuntimeErrorActionによって支配される:

エラーがない場合は,評価器で関数が再実行される:

関数がコンパイラに特有のコードを含む場合,関数は評価器で再実行はされない:

"Evaluate"の設定は常に評価器で再実行される:

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年に更新).

テキスト

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

BibTeX

@misc{reference.wolfram_2024_functioncompile, author="Wolfram Research", title="{FunctionCompile}", year="2021", howpublished="\url{https://reference.wolfram.com/language/ref/FunctionCompile.html}", note=[Accessed: 20-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_functioncompile, organization={Wolfram Research}, title={FunctionCompile}, year={2021}, url={https://reference.wolfram.com/language/ref/FunctionCompile.html}, note=[Accessed: 20-November-2024 ]}