diff --git a/README.md b/README.md index d163378fb57ffb6e0213eb1b280b197d666005cf..2a9ff74b20921c100bf7d6a5894ba21036620e33 100644 --- a/README.md +++ b/README.md @@ -5,20 +5,29 @@ ## Description -Repository for DICE design tools explorations. - -Topics include: -- Programming strategies for spacial computing - - Data flow programming and [Distributed Deep Neural Networks](https://gitlab.cba.mit.edu/amiraa/ddnn) - - Physics Simulation - - Trusted Systems -- Reconfiguration strategies for DICE pieces - - CAM tools and path planing: - - Desktop (external) assembler - - Swarm assembly and manipulation + +The Physical Computing Design tool is an integrated design tool for the design, simulation, optimization and fabrication of reconfigurable computing systems. + +Traditional electronics design workflows follow a three stage sequential linear process that starts with the design of the system, then the analysis and simulation, and finally the fabrication and testing of these systems. Very often these stages are executed independently from each other, using different tools and sometimes different teams, making it very hard to translate the feedback from the simulation or testing stages into viable design amendments. This results in the design workflow, which is an inherently iterative process, being be a very tedious and inefficient process. + +Therefore, we present an integrated, closed loop physical computing design tool where one can design, simulate, optimize and fabricate reconfigurable computing systems. + +The following steps explain in detail the proposed design workflow: + +1. **Design**: The first step is to place the DICE nodes and visualize the 3D assembly of the computing system. +2. **Programming**: Next, one should select each node and specify the node details (code/program, processor, connected neighbors, starting state.. etc). +3. **Analysis**: While placing multiple parts (an assembly), an analysis of the whole computation graph is automatically generated in realtime (average computation per frame, communication bottlenecks, connectivity graph, hierarchal graph), and custom code for application specific analysis could be added. Based this analysis, design recommendation are generated and displayed. For example, using another type of processor, adding extra nodes to divide the computation of overloaded nodes into two, finding more efficient routing for data transfer. +4. **Optimization**: If one wants to further optimize the reconfigurable computing system, the performance projection graph tool visualizes how each hardware and software decision/variable is affecting the projected performance (energy use, speed, cost). There, one describes each input variable as a distribution (normal, categorical..) and a probabilistic programming model is used to infer what is the optimal hardware configuration for the given software workflow. +5. **Simulation**: The simulation window has a visualization of the state and output of the DICE computation. This is either the output of the simulation of DICE computation on the computer before assembling and building the system or later visualizing the data sent back from the DICE system. +6. **Fabrication**: In parallel to the previous steps, the assembly realtime control window makes it very easily to control the assembler and fabricate, program, test the designed systems in realtime and to get feedback and amend the system accordingly. + + +This novel integrated design workflow paves the way for the design of discrete integrated circuits but also reconfigurable computing systems that can change and evolve while execution as needed. ---- -## Demo Links +## Progress + +### Demo Links - **"Physical Computing Interface"** - [Assembler Control Demo](https://amiraa.pages.cba.mit.edu/physical-computing-design-tools/01_Code/physical_computing_interface/index.html) @@ -28,31 +37,11 @@ Topics include: - [Distributed Deep Neural Networks](https://gitlab.cba.mit.edu/amiraa/ddnn) - UR10 voxel Assembly [demo.](https://amiraa.pages.cba.mit.edu/physical-computing-design-tools/01_Code/physical_computing_interface/assembly/standAloneAssembly.html) ----- -## Progress - ### Demo Videos   ---- - -### Applications -- The most effieceint applications for dice are those who need reconfiguration white running, examples: - - probabilistic programming (Gamalon) - - more computing power while assembling voxels - - Neural Networks? - -#### Voxel Simulation - - - -#### Convolutional Neural Networks - - - ----- ### Capabilities and Updates - Design @@ -68,14 +57,37 @@ Topics include: - Asynchronous code propagation (distributed max example) - Simple test case find max value distributed - Min cut max flow concept study neighborhood +- Hardware optimization + - see section below. - Improved UI and integration - Radial menu - Json propagation - Highlight selected node + - switch windows + - Applications + - voxel design tools + - Convolutional neural networks + +--- + +## Applications +- The most efficient applications for dice are those who need reconfiguration white running, examples: + - probabilistic programming (Gamalon) + - more computing power while assembling voxels + - Neural Networks? +### 1- Voxel Simulation + + + +### 2- Convolutional Neural Networks + + + + --- -### Hardware Architecture Inference +## Hardware Architecture Inference #### Probabilistic Programming @@ -151,53 +163,74 @@ expectation(dist) ``` Until now I have a dummy computation model. Next steps would be to get a complex computational graph and for each part infer the best hardware architecture for it. Moreover, if the computation graph changes through time one can also alter the hardware architecture to respond to these changes. ---- - -## Desired Milestones - -- [ ] Assembly - - [ ] Swarm construction -- [ ] Computation - - [ ] Morphing code - - [ ] Real simulation/message passing analysis - - [ ] Computation Optimization - - [ ] Restructuring code and automatically divide into distributed - - [ ] show alternatives and bottlenecks -- [ ] Auto compilation/export to dice modules -- [ ] Simulation portal -- [ ] Case Studies - - [ ] Neural networks - - [ ] Bayesian optimization - - [ ] Distributed optimization - - [ ] Voxel design -- [ ] Scaling - - [ ] stress testing scaling - --- -## TODOS: -- [x] Grid Systems -- [ ] Documentation +## TODO and Next Steps: +- [ ] **Documentation**: - [ ] in depth documentation of how to do everything -- [ ] Reset Grid/button -- [ ] Assembly - - [ ] fix errors -- [ ] Add real Dice info - - [ ] computation delay and communaction cost - - [ ] CAD? -- [ ] Select - - [ ] improve selected visualization - - [ ] when selecting group show bounding box -- [ ] Hierarchy - - [ ] place multiple voxels - - [ ] change code of mutiple voxels - - [ ] select multiple dice pieces - - [ ] create groups -- [ ] Bugs: - - [ ] change grid like Jiri's - - [ ] fix assembler - - [ ] when remove node pix pickup list - - [ ] get the pickup list from occupancy + - [ ] readme page: + - [ ] change make it multiple pages +- [ ] **General workflow/UI**: + - [ ] closure and prototypes for everything + - [ ] Switch windows + - [ ] modularize current windows + - [ ] programmatically call and add windows to UI + - [ ] add destroy function for each closure + - [ ] Global selection + - [ ] expose global variables + - [ ] when none of the nodes is selected you can edit the globals + - [ ] grids (destroy all three js and create a new one) + - [ ] voxel size + - [ ] history of add and remove? + - [ ] Hierarchy + - [ ] place multiple voxels + - [ ] change code of multiple voxels + - [ ] select multiple dice pieces + - [ ] create groups + - [ ] Scaling + - [ ] stress testing scaling + +- [ ] **Assembly**: + - [ ] general + - [ ] fix errors + - [ ] UR arm + - [ ] real life connection + - [ ] code (from python? or just call python scripts??) + - [ ] meso dice + - [ ] work with zach on it + - [ ] swarm assembly + - [ ] bill-e assembly of the computation elements + - [ ] structural robotics + - [ ] Jiri assembler + - [ ] cad? visualize + - [ ] fix grid +- [ ] **Computation and optimization**: + - [ ] load c++ or other code + - [ ] automatically computation delay and communication cost + - [ ] Optimization strategy + - [ ] simple show bottlenecks in computation or communication + - [ ] alternatives and suggestions + - [ ] local suggestions to divide the computation into two nodes? + - [ ] shape discovery + - [ ] add window of probabilistic search parameters + - [ ] Restructuring code and automatically divide into distributed +- [ ] **Applications/Demonstrations**: + - [ ] AI + - [ ] Convolutional Neural networks + - [ ] highlight bottleneck and communication delay + - [ ] Probabilistic Programming + - [ ] add window optimization + - [ ] Distributed optimization/belief propagation + - [ ] Bayesian optimization + - [ ] Voxel Design + - [ ] add a walking robot + - [ ] Morphing computing systems examples + - [ ] Voxel land + - [ ] a big structure getting assembled assembled while getting bigger + - [ ] computation getting bigger + - [ ] dynamic physics simulation + - [ ] when from one part to another so does the placement of the computing systems +