Compile

Compile[{x1,x2,},expr]

xiが数値であるという前提で,式 expr を評価するためのコンパイルされた関数を作成する.

Compile[{{x1,t1},},expr]

xitiに適合するタイプであることを前提とする.

Compile[{{x1,t1,n1},},expr]

xini次元配列のオブジェクトであり,オブジェクトのそれぞれが tiに適合することを前提とする.

Compile[vars,expr,{{p1,pt1},}]

piに適合する式 expr の部分式が ptiに適合するタイプであることを前提とする.

詳細とオプション

  • Compileが取り扱うタイプ
  • _Integer機械サイズの整数
    _Real機械精度の近似実数(デフォルト値)
    _Complex機械精度の近似複素数
    True | False論理変数
  • コンパイルされる関数の入力として与えられるネストしたリストは,数値からなる完全配列でなければならない.
  • Compileは,数値関数,行列演算,手続き型プログラミング構文,リスト操作関数,関数型プログラミング構文等に使うことができる.
  • Compileは,CompiledFunctionオブジェクトを作成する.
  • コンパイルされたコードは,通常のWolfram言語のコードと同様の数値的な精度や局所変数の取扱いをするとは限らない.
  • コンパイルされたコードを使った特定の引数でコンパイルされた関数が評価できない場合,代りとして通常のWolfram言語のコードが使用される.
  • 通常のWolfram言語のコードを,コンパイルされたコードの中で使用することができる.このWolfram言語コードで得られた結果は,Compileの第3引数で特に指定されない限り近似実数であるとみなされる.
  • Compileによってオブジェクトが評価される回数やその順が通常のWolfram言語のコードと異なる場合がある.
  • Compileは属性HoldAllを持ち,デフォルトにより,コンパイルされる前に評価を行わない.
  • Compile[,Evaluate[expr]]の設定により,式 expr をコンパイルの前に,シンボル的に評価するように指定できる.
  • 使用可能なオプション
  • CompilationOptions Automaticコンパイルのプロセスに関するオプション
    CompilationTarget $CompilationTargetコード生成でターゲットとするランタイム
    Parallelization Automaticコンパイルされた関数の実行の際の並列制御
    RuntimeAttributes {}コンパイルされた関数の評価属性
    RuntimeOptions Automaticコンパイルされた関数のランタイムオプション

例題

すべて開くすべて閉じる

  (1)

関数Sin[x]+x^2-1/(1-x)を機械実数 x についてコンパイルする:

CompiledFunctionは機械数で評価する:

コンパイルされた関数をプロットする:

スコープ  (1)

のニュートン反復を取り,直近の根を見付けるように関数をコンパイルする:

3つの根について引力圏をプロットする:

オプション  (9)

CompilationOptions  (1)

デフォルト設定のAutomaticでは,同じ結果を複数回評価することを避けてより効率的なコードを生成する:

最適化レベルが下げられると効率の低いコードが生成される:

CompilationTarget  (2)

次でCコードを生成しこれを接続し直して実行する:

これはCコード生成によるスピードアップという利点を示しているより大きい例である:

デフォルト操作だと速度が落ちる:

Parallelization  (2)

コンパイルされたリスト可能な関数はスレッドを使って並列実行できる:

次は直列実行した場合を示している:

一般に,使用するスレッド数の決定には$ProcessorCountが使われる:

並列操作をCコードの生成と組み合せると結果がより高速になる:

RuntimeAttributes  (3)

以下でコンパイルされたリスト可能な関数を作成する:

入力が1つの場合は普通に動作する:

引数に入力指定にマッチしないリストが含まれていると,入力は引数に関数を縫い込む:

分岐がある場合,リスト可能性は下に示してあるようにFunctionを使って関数を定義する必要がある:

コンパイルされたリスト可能な関数は同じことをはるかに速く行う:

コンパイルされたリスト可能な関数は並列実行することで,マルチコアのマシンでさらに速く実行することができる:

リスト可能属性を使用すると一般にCompiledFunctionを何度も呼び出すよりも速くなる:

並列化を使うとさらに速くなる:

結果は等しい:

についてのニュートン法による引力圏の詳細なプロット:

RuntimeOptions  (1)

一般に,整数演算のオーバーフローが検知されると,計算は大数を使うように切り換えられる:

オーバーフローが検知されないようにすると,実行速度は上がるが結果は不正確である可能性がある:

考えられる問題  (1)

デフォルト設定のRuntimeOptionsでは途中のオーバーフローが見過ごされることがある:

"Quality"設定を使うと,途中の項についてもオーバーフローが確かめられる:

おもしろい例題  (1)

パーリンノイズは手続き型テクスチャを生成するためによく使われるアルゴリズムである:

以下でパーリンノイズ関数のパラメータを定義し,パーリン関数を使って横長の手続き型テクスチャを生成する:

パラメータと色集合が異なる同じノイズ関数を使って木目のシミュレーションを行うことができる:

テクスチャを三次元オブジェクトに適用することもできる:

Wolfram Research (1991), Compile, Wolfram言語関数, https://reference.wolfram.com/language/ref/Compile.html (2010年に更新).

テキスト

Wolfram Research (1991), Compile, Wolfram言語関数, https://reference.wolfram.com/language/ref/Compile.html (2010年に更新).

CMS

Wolfram Language. 1991. "Compile." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2010. https://reference.wolfram.com/language/ref/Compile.html.

APA

Wolfram Language. (1991). Compile. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Compile.html

BibTeX

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

BibLaTeX

@online{reference.wolfram_2024_compile, organization={Wolfram Research}, title={Compile}, year={2010}, url={https://reference.wolfram.com/language/ref/Compile.html}, note=[Accessed: 17-November-2024 ]}