[Alg] tooltje voor bepalen snelste expressie evaluatie

Pagina: 1
Acties:

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Topicstarter
Ik krijg nu uit mathematica twee dingen die ik wil berekenen, maar dat moet per-vertex in een vertex shader gebeuren, dus het is essentieel dat deze berekening zo efficient mogelijk gaat.

Om een idee te geven, de eerste berekening die moet gebeuren is:

code:
1
2
3
4
5
6
7
8
{{(-W14 + (TMI30 W11 + TMI00 u W11 + TMI31 W12 + TMI11 v W12 - W13) 
        depth[u, v]) / 
     (-W44 + (TMI30 W41 + TMI00 u W41 + TMI31 W42 + TMI11 v W42 - W43) 
        depth[u, v])}, {(-W24 + 
       (TMI30 W21 + TMI00 u W21 + TMI31 W22 + TMI11 v W22 - W23) 
        depth[u, v]) / 
     (-W44 + (TMI30 W41 + TMI00 u W41 + TMI31 W42 + TMI11 v W42 - W43) 
        depth[u, v])}}


en de tweede is
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{{(TMI00 depth[u, v] (W14 W41 - W11 W44 + 
          (-(TMI31 W12 W41) - TMI11 v W12 W41 + W13 W41 + 
             TMI31 W11 W42 + TMI11 v W11 W42 - W11 W43) depth[u, v]) + 
       (W14 (TMI30 W41 + TMI00 u W41 + TMI31 W42 + TMI11 v W42 - 
             W43) - (TMI30 W11 + TMI00 u W11 + TMI31 W12 + 
                                         (1,0)
            TMI11 v W12 - W13) W44) depth     [u, v]) / 
     Power[W44 - (TMI30 W41 + TMI00 u W41 + TMI31 W42 + TMI11 v W42 - 
          W43) depth[u, v], 2]}, 
   {(TMI00 depth[u, v] (W24 W41 - W21 W44 + 
          (-(TMI31 W22 W41) - TMI11 v W22 W41 + W23 W41 + 
             TMI31 W21 W42 + TMI11 v W21 W42 - W21 W43) depth[u, v]) + 
       (W24 (TMI30 W41 + TMI00 u W41 + TMI31 W42 + TMI11 v W42 - 
             W43) - (TMI30 W21 + TMI00 u W21 + TMI31 W22 + 
                                          (1,0)
            TMI11 v W22 - W23) W44) depth     [u, v]) / 
     Power[W44 - (TMI30 W41 + TMI00 u W41 + TMI31 W42 + TMI11 v W42 - 
          W43) depth[u, v], 2]}}


Bestaat er een manier, of tool oid, om dit om te zetten in verschillende sub-expressies? Ik zie namelijk zo al dat beide expressies een aantal gelijke delen bevatten, die dan dus maar 1x uitgerekend hoeven te worden.

Het algemene probleem zal wel NPC zijn, verwacht ik, maar is er desalnietemin niet iets dat door een boom zoekt ofzo? Net zoiets als een optimizing compiler (BURS)? Zou het meteen goed gaan als ik het gewoon zo dump in de source?