1

我用 C 语言编写了一个程序来使用公式生成分形,但是速度很慢。基本上,您向渲染函数传递一堆无符号字符数,这些数字指示函数将值推入堆栈或将其弹出并执行算术运算并将结果推回堆栈(有点像反向波兰符号)。问题是,程序正在读取这些函数编号,通过 if...else if...else if...else if...elseif... 找到要执行的正确操作,并推送和弹出每个像素中每次迭代的一堆值。通常只有一个公式(如 Mandelbrot)硬编码到渲染函数中,但这个程序是一个 DLL,我正在编写一个通用分形渲染器。有什么办法可以编写一个小型迷你编译器,在渲染开始之前读取公式并即时编译一个函数,然后渲染例程可以有效地重用该函数?毕竟,冯诺依曼架构的全部意义在于计算机可以修改自己的代码。

提前致谢!

4

2 回答 2

3

如果使用 C++ 是一个选项,我建议您尝试使用 LLVM - 使用他们的 IRBuilder 将函数转换为 LLVM IR,运行优化传递,然后使用 LLVM JIT 在运行时编译函数

http://llvm.org/docs/tutorial/LangImpl4.html

于 2012-07-15T00:48:51.227 回答
1

C 中没有自修改代码的概念。任何将控制权传递给“数据”内存中的数据块的尝试,例如,通过将数据指针转换为函数指针,都是未定义的行为。该模型可让您使用 C 语言为非 vov-neuman 计算机编程。

这就是说,您可以通过用函数指针或 switch 语句替换 if-then-else 语句序列来优化 RPN 代码以更快地运行。您还可以将目标函数编程到动态库中,在运行时读取它,然后在渲染中使用它。

于 2012-07-04T23:51:37.880 回答