表达树:替代或替代评估方法

时间:2013-05-23 03:46:24

标签: cuda parallel-processing expression-trees expression-evaluation

我甚至不确定这是否是提出这样问题的合适地点。

作为我的硕士论文的一部分,我正在做一些并行算法的东西。简单地说,我正在做的事情就是并行评估数千个表达式树(像sin(exp (x + y) * cos (z))这样的表达式)。我现在正在做的是将这些表达式树转换为Prefix / Postfix表达式,并使用传统方法(堆栈,递归等)对它们进行评估。这些是我们在数据结构和基础计算机科学课程中所教授的基本内容。

我想知道是否还有其他东西可以代替表达式树来处理表达式。我知道编译器大量使用表达式树来解析阶段,因此我假设没有表达式树的替代品(或者有人会在编译器中使用它)。 是否有任何替代评估方法用于此类表达式(而不是堆栈和递归)。更多" parallel" 友好?用堆栈解析这样的表达式是顺序的,并且将在并行系统中产生瓶颈。 (异国/奇怪/理论方法 - 如果我的工作也可以接受)

1 个答案:

答案 0 :(得分:2)

我认为评估表达式树可并行化的,你只是不要将它们转换为前缀或后缀形式。

例如,您提供的表达式的树将如下所示:

   sin
    |
    *
   / \
 exp cos
  |   |
  +   z
 / \
x   y

当您遇到*时,您可以评估一个线程上的exp子表达式和另一个线程上的cos子表达式。 (假设您的编程语言支持它们,您可以在此处使用future使代码更简单。)


虽然如果你的表达式真的像这个一样简单并且你有几千个表达式,那么我就没有看到你需要并行评估单个表达式的任何理由。并行化表达式本身应该足够了(例如,使用1000个表达式和2个核心,在一个核心上评估500,在其他核心上评估其余核心)。