Wed, 18 Jul 2007 21:40:11 -0000

Related articles |
---|

Efficient Evaluation of Image Expressions hermann.rodrigues@gmail.com (Hermann) (2007-07-18) |

Re: Efficient Evaluation of Image Expressions torbenm@app-2.diku.dk (2007-07-19) |

Re: Efficient Evaluation of Image Expressions tmk@netvision.net.il (Michael Tiomkin) (2007-07-19) |

Re: Efficient Evaluation of Image Expressions Ibeam2000@gmail.com (Nick) (2007-07-22) |

Re: Efficient Evaluation of Image Expressions hermann.rodrigues@gmail.com (Hermann) (2007-07-23) |

Re: Efficient Evaluation of Image Expressions Ibeam2000@gmail.com (Nick) (2007-07-30) |

Re: Efficient Evaluation of Image Expressions Ibeam2000@gmail.com (Nick) (2007-08-01) |

From: | Hermann <hermann.rodrigues@gmail.com> |

Newsgroups: | comp.compilers |

Date: | Wed, 18 Jul 2007 21:40:11 -0000 |

Organization: | Compilers Central |

Keywords: | question, performance |

Posted-Date: | 18 Jul 2007 20:05:08 EDT |

Hi all,

I have a language used perform map/image algebra calculations using

expressions like the following:

------------------------------------------------------

if isNull(i1) or isNull(i2) or isNull(i3) or isNull(i4) or isNull(i5)

or isNull(i6) or

isNull(i7) or isNull(i8)

then null

else

(if (-4113.26 + 0.07*i7 - 5.08*i8/100 + 47.89*abs(i1) +

99.72*abs(i2) + 214.96*

(

-2.332 + 2.561*i4 + 0.55*i6

) +

1.57*i3) > 0 then

-4113.26 + 0.07*i7 - 5.08*i8/100 + 47.89*abs(i1) +

99.72*abs(i2) + 214.96*

(

-2.332 + 2.561*i4 + 0.55*i6

) +

1.57*i3

else 0

)/1000

-------------------------------------------------------

This language deals with sub expressions, much like a functional

language. In this example, i1, i2, i3... represent cells of images.

So, the expression above is calculating a new image using for eight

different images (i1 .. i8)

Basically, the expression is parsed and an intermediate structure is

constructed. Then, for each image coordinate, the corresponding cells

of the eight images are scanned, presented to expression, and the

expression evaluated, much like a pixel shader does.

The problem is how to represent the expression so that the execution

becomes more efficient.

Currently I have a base Expression class and subclasses representing

the possible operators (+, -, abs, if-then-else, isNull etc). This

expressions are linked forming a tree. The evaluation process walk on

this tree evaluating sub-expression by expression and passing the

resulting values to the dependent ones, until I get a final result

representing the overall expression value.

Simple expressions, like the one above, have good performance, but if

the expression gets more complicated, the evaluation process becomes

painfully slow. Any advice?

Thank you.

Hermann

Post a followup to this message

Return to the
comp.compilers page.

Search the
comp.compilers archives again.