Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Sign in
  • E elsa
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Locked Files
  • Issues 51
    • Issues 51
    • List
    • Boards
    • Service Desk
    • Milestones
    • Iterations
  • Merge requests 20
    • Merge requests 20
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
    • Test Cases
  • Deployments
    • Deployments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Code review
    • Insights
    • Issue
    • Repository
  • External wiki
    • External wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar

9.2.2023: Due to updates GitLab will be unavailable for some minutes between 9:00 and 11:00.

  • IPIP
  • elsa
  • Issues
  • #4
Closed
Open
Issue created Oct 07, 2019 by Ghost User@ghostContributor

Expression templates for evaluating algebraic terms

Currently within elsa, each operation, + for example, on DataContainers creates an intermediate result. Therefore, in algebraic terms like

DataContainer d = a + c * d

intermediate results for the individual terms like c*d will be calculated and stored in memory before the whole expression is evaluated. This can amount to multiple GBs of data for large DataContainers. Instead the element-wise result could be calculated directly for the whole term (here d[i] = a[i] + c[i] * d[i]).

Expression templates solve this problem by introducing delayed evaluation. Quoting wikipedia:

Expression templates implement delayed evaluation using expression trees that only exist at compile time. Each assignment to a Vec, such as Vec x = a + b + c, generates a new Vec constructor if needed by template instantiation. This constructor operates on three Vec; it allocates the necessary memory and then performs the computation. Thus only one memory allocation is performed.

For elsa context, replace Vec with DataContainer. The goal is to achieve a considerable reduction in memory usage as well as an increase in speed for longer algebraic terms.

Assignee
Assign to
Time tracking

LRZ Homepage | Datenschutz | Dokumentation und Betriebsbedingungen | Impressum