Compile

Compile[{x1,x2,},expr]

创建一个经过编译的函数,已知 xi 的数值对 expr 求值.

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

假定 xi 的类型与 ti 匹配.

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

假定 xi 是秩为 ni 的对象数组,每个对象的类型都与 ti 匹配.

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

假定 expr 中匹配 pi 的子表达式的类型与 pti 匹配.

更多信息和选项

  • Compile 处理的类型是:
  • _Integer机器整数
    _Real机器精度的近似实数(缺省)
    _Complex机器精度近似复数
    True | False逻辑变量
  • 作为经过编译的函数的输入给出的嵌套列表必须是全数值数组.
  • Compile 处理数值函数、矩阵运算、程序式编程结构、列表操作函数以及函数式编程结构等等.
  • Compile 生成 CompiledFunction 对象.
  • 经过编译的代码处理数值精度和局部变量的方式与普通的 Wolfram 语言代码不同.
  • 如果不能用经过编译的代码对有特殊参数的经过编译的函数求值,则使用普通的 Wolfram 语言代码代替.
  • 普通 Wolfram 语言代码可以从经过编译的代码内部调用. 由 Wolfram 语言代码获得的结果假设是近似实数除非特别指明,否则由 Compile 的第三个参数指定.
  • Compile 计算的对象的次数和次序可能和普通的 Wolfram 语言代码不同.
  • Compile 有属性 HoldAll,在默认情况下在编译前并不进行计算.
  • 可以使用 Compile[,Evaluate[expr]] 指定 expr 应当在编译前进行符号性计算.
  • 可以给出下列选项:
  • CompilationOptions Automatic编译过程的选项
    CompilationTarget $CompilationTarget代码产生的目标运行时间
    Parallelization Automatic经过编译的函数执行的并行控制
    RuntimeAttributes {}经过编译的函数的计算属性
    RuntimeOptions Automatic经过编译的函数的运行时间选项

范例

打开所有单元关闭所有单元

基本范例  (1)

对于机器实数 x,编译函数 Sin[x]+x^2-1/(1-x)

CompiledFunction 用机器数进行计算:

绘制经过编译的函数:

范围  (1)

编译函数对 进行牛顿迭代并且指出最近的根:

绘出三个根的吸引域:

选项  (9)

CompilationOptions  (1)

通过避免计算同样的结果超过一次,Automatic 的默认设置产生效率更高的代码:

当优化水平降低,生成效率较低的代码:

CompilationTarget  (2)

下面产生 C 代码并且链接回源代码以便执行:

下面是一个更大的例子,表示C代码生成的速度优势:

默认操作运行得更慢:

Parallelization  (2)

可列表的经过编译的函数使用线程并行执行:

以下显示依次运行操作:

通常,$ProcessorCount 用来确定要使用多少线程:

用户可以使用 C 代码生成和并行操作结合起来,以获得更快的操作:

RuntimeAttributes  (3)

以下创建一个可列表的(listable)经过编译的函数:

它以正常方式在单个输入上进行操作:

当变量包含与输入规范不匹配的列表,它线性作用于变量:

如果存在一个分支,可列表性(listability)需要定义一个函数,如下所示,使用 Function

可列表的经过编译的函数是等价的,但是执行得更加快速:

可列表的经过编译的函数可以并行运行,在多核机器上加速:

使用可列表属性通常比多次调用 CompiledFunction 更快:

利用并行化可以给出一个更大的加速:

结果是相同的:

对于 的牛顿方法的吸引盆的详细图示:

RuntimeOptions  (1)

通常,整数算术溢出被捕获,并且计算切换到使用 bignums:

关闭溢出检查使得执行更加快速,但是结果可能是不准确的:

可能存在的问题  (1)

RuntimeOptions 的默认设置下,可能会错过中间溢出:

设置 "Quality",对溢出测试中间项:

巧妙范例  (1)

Perlin 噪声是一种用于生成过程纹理的常见算法:

下面定义了 Perlin 噪声函数的参数,并且使用 Perlin 函数生成一个地形过程纹理:

这个噪声函数在具有不同的参数和颜色集合时可以模拟木纹效果:

用户可以把纹理应用到三维对象:

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 语言. 1991. "Compile." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2010. https://reference.wolfram.com/language/ref/Compile.html.

APA

Wolfram 语言. (1991). Compile. Wolfram 语言与系统参考资料中心. 追溯自 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: 18-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: 18-November-2024 ]}