All Projects → dcascaval → Impala

dcascaval / Impala

Licence: MIT License
Parallel High-Performance Components for Rhino/Grasshopper

Programming Languages

C#
18002 projects
F#
602 projects

Projects that are alternatives of or similar to Impala

RobotComponents
A Grasshopper plugin for intuitive robot programming
Stars: ✭ 30 (-6.25%)
Mutual labels:  grasshopper3d, rhino3d
dendro
volumetric modeling for grasshopper built on top of openvdb
Stars: ✭ 47 (+46.88%)
Mutual labels:  grasshopper3d, rhino3d
compas fab
Robotic fabrication package for the COMPAS Framework.
Stars: ✭ 75 (+134.38%)
Mutual labels:  grasshopper3d, rhino3d
geometrycommands
Commandline application for manipulating geometry.
Stars: ✭ 24 (-25%)
Mutual labels:  geometry
tripbot9000
Procedural generation of geometric patterns and fractals.
Stars: ✭ 22 (-31.25%)
Mutual labels:  geometry
artic
The AlteRnaTive Impala Compiler
Stars: ✭ 16 (-50%)
Mutual labels:  parallel-computing
pymadcad
Simple yet powerful CAD (Computer Aided Design) library, written with Python.
Stars: ✭ 63 (+96.88%)
Mutual labels:  geometry
geoh
Transform a geoJSON into a list of geohashes that intersect with it
Stars: ✭ 26 (-18.75%)
Mutual labels:  geometry
galileo
Scala Math - Numerical (Matlab-like) and Symbolic (Mathematica-like) tool
Stars: ✭ 62 (+93.75%)
Mutual labels:  geometry
libROM
Model reduction library with an emphasis on large scale parallelism and linear subspace methods
Stars: ✭ 66 (+106.25%)
Mutual labels:  parallel-computing
d3.geometer
[NOT MAINTAINED] A D3js library for drawing polytopes, angles, coordinates, geometries and more.
Stars: ✭ 18 (-43.75%)
Mutual labels:  geometry
hero-sdk
⛔ DEPRECATED ⛔ HERO Software Development Kit
Stars: ✭ 21 (-34.37%)
Mutual labels:  parallel-computing
PGS
Processing Geometry Suite
Stars: ✭ 39 (+21.88%)
Mutual labels:  geometry
geom
Algorithms for geometric operations
Stars: ✭ 48 (+50%)
Mutual labels:  geometry
bitpit
Open source library for scientific HPC
Stars: ✭ 80 (+150%)
Mutual labels:  parallel-computing
framework
The Arcane Framework for HPC codes
Stars: ✭ 15 (-53.12%)
Mutual labels:  parallel-computing
birkhoff
Euclidean plane and its relatives; a minimalist introduction.
Stars: ✭ 15 (-53.12%)
Mutual labels:  geometry
Corium
Corium is a modern scripting language which combines simple, safe and efficient programming.
Stars: ✭ 18 (-43.75%)
Mutual labels:  parallel-computing
delayed
🕟 💻 Dependent Delayed Computation
Stars: ✭ 14 (-56.25%)
Mutual labels:  parallel-computing
jenn3d
A Toy for Visualizing Coxeter Polytopes
Stars: ✭ 39 (+21.88%)
Mutual labels:  geometry

Impala

Multithreaded library of performative C# components for Grasshopper

"Icon Banner"

Looking for in-depth documentation and discussion, or how to get started using Impala? Check out the Wiki for a living document.


Overview

Grasshopper provides a software environment for rapid scripting and design computation. This environment offers an extremely flexible, visual approach to programming. Impala replicates common bottleneck Grasshopper operations with a focus on efficiency, allowing complex scripts and static simulations embedded within Grasshopper to make use of all available computational capacity. This is primarily evident in scripts that deal with thousands of objects or rely heavily on physically-based information and computation.

The primary target audience is experienced design computation practitioners and Grasshopper users who are running into the upper bounds of the tool's native, single-core performance, and are willing to take a finer approach to boosting performance at key points. Impala focuses primarily on replicating existing Grasshopper functionality and developing an environment suitable to seamless integration of performant or multithreaded computation within GH. To this end it currently contains three types of components:

  • Components that perform identical (or nearly identical) operations to existing Grasshopper components, but do so using a parallel strategy or a better algorithmic complexity (ex: Closest Point, Halton)
  • Components that condense expensive Grasshopper patterns and use imperative methods to significantly reduce the time and space needed to obtain a result (ex: Closest Curve Closest Point, MeshFlow)
  • Components that limit Grasshopper's type-casting system in exchange for performance gains on larger inputs (ex: the QuickMath components)

Impala 1.0 has been released! Grab it on Food4Rhino


Compatibility

  • Impala is compatible with Rhinoceros 5 (SR 14), Grasshopper 0.9.0076 and later. Current tests using Rhino 6 and GH 1 indicate no break in functionality.
  • Impala uses the latest point-release of C# (7.3 at the time of writing) and is compiled with Visual Studio 2017 on Windows only.

Benchmarks

  • Current benchmarks are available in /bench, and are generated primarily using bencher.gh. Standalone benchmark files are also used to test for correctness - a typical benchmark will verify correctness and measure performance against the equivalent native implementation to the Impala functionality. For example, a section of the QuickMath benchmark might look like this:
Flat Input Random input
Flat Input Random Input

And in Grasshopper:

"QuickMath speedtest benchmark, Arithmetic components"

  • Preliminary benchmarks indicate that Impala components are as fast as native GH for all input sizes, and significantly faster for any larger input size. Additionally, Impala components are as fast or faster than the multithreaded GH components in GH1. Unlike those components, however, Impala components are optimised against adversarial input patterns, and can significantly outperform the multithreaded GH1 components in many cases:
Against Curve-Curve SingleThreaded Against Curve-Curve Multithreaded
ST Input Flat Input

A particularly egregious input pattern result:

"Parallel BLX component benchmark"


Development Milestones (v1.0)

Impala v1 is complete! Check out notes.md for progress.


Propsed Extensions (v2.0)

  • ZUI options & FlatMerge
  • Dynamic lambda components and branch-matching
  • Test Span<T> and ImpalaStructure<T> : IGH_Structure for memory-efficient copy output
  • Profile sub-portions and cache repeat expensive computation
  • Implement granularity control across the board, dynamically tune to system
  • Offsetting, Booleans (and reductions), Meshfilling algorithms

Moving Forward

Additional goals for future development include:

  • Composition of other expensive operations (occlusion, graph traversals, large scale collisions)
  • Automated integration of several Impala components in the form of a macro that searches for locations in a script where Impala could improve GH functionality and substituting the analogous component
  • Allowing inter-component parallelism within a group. By maintaining constant inputs and outputs in a group of components, their operation set can be run in parallel, making use of Grasshopper's already visually-explicit dependency graph to structure the computation. This can speed up definitions that don't have a large-operation bottleneck, but may have to perform multiple disjoint sets of computations.

"Example Screenshot"

License

Impala is licensed under the MIT license. Copyright 2019 Dan Cascaval.

Icons

While most Impala component icons were done by hand, some of the math icons used base files from the wonderful Math Symbols Icon Pack by FreePik from FlatIcon.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].