User Tools

Site Tools


profiling-driven_multi-cycling

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
profiling-driven_multi-cycling [2014/10/10 01:35]
stefan [Turning on Multi-Cycling]
profiling-driven_multi-cycling [2016/04/23 03:56]
stefan [Introduction]
Line 2: Line 2:
  
 LegUp supports multi-cycling,​ which replaces pipelined computations with multi-cycled computations. Additionally,​ software profiling (llvm-prof) can be run to obtain execution information for each basic block and add more multi-cycling for infrequently executed basic blocks. LegUp supports multi-cycling,​ which replaces pipelined computations with multi-cycled computations. Additionally,​ software profiling (llvm-prof) can be run to obtain execution information for each basic block and add more multi-cycling for infrequently executed basic blocks.
 +
 +LegUp 4.0 uses a new version of llvm which does not support llvm-prof, the profiling tool used for this work. To reproduce the Multicycle results therefore, follow these steps:
 +
 +  - clone legup.git
 +  - git checkout aa959fd9d1099b7f7b4545726511ff63ce26513d
  
 ====== Turning on Multi-Cycling ====== ====== Turning on Multi-Cycling ======
Line 25: Line 30:
  
   * MULTI_CYCLE_REMOVE_REG will de-pipeline data paths, and instead write the multi-cycle constraints to a file. This is done by ''​make''​. The constraints are then added to the project'​s .sdc file by ''​make p'',​ if MULTICYCLE_CONSTRAINTS was enabled in Makefile.config. This is the only one of the 4 variables which needs to be set.    * MULTI_CYCLE_REMOVE_REG will de-pipeline data paths, and instead write the multi-cycle constraints to a file. This is done by ''​make''​. The constraints are then added to the project'​s .sdc file by ''​make p'',​ if MULTICYCLE_CONSTRAINTS was enabled in Makefile.config. This is the only one of the 4 variables which needs to be set. 
-  * MULTI_CYCLE_DUPLICATE_LOAD_REG will force each load from memory (local and global) to have a unique load register, so that it can hold the loaded value are feed multi-cycle paths. See [[Multi-Cycle Enhancements]] for for information. While this is not necessary for multi-cycling,​ not setting this will reduce the opportunities for multi-cycling and I have not recently tested without it.+  * MULTI_CYCLE_DUPLICATE_LOAD_REG will force each load from memory (local and global) to have a unique load register, so that it can hold the loaded value are feed multi-cycle paths. See [[Multi-Cycle Enhancements]] for for information. While this is not necessary for multi-cycling,​ not setting this will reduce the opportunities for multi-cycling and I have not recently tested without it. Note that it may give an error if ram latency is set to < 2 (e.g. if it's set to 1 for local rams), so make sure to set latencies to 2 instead of 1 (this will improve fmax but make latency worse)
   * MULTI_CYCLE_DISABLE_REG_MERGING was added because once I noticed that a register with a multi-cycle .sdc constraint was merged with another register by synthesis, and the constraint was lost. I recently did an experiment where this was turned off however and it had no negative side effects (one or two circuits saved ~50 registers, but mostly the same)   * MULTI_CYCLE_DISABLE_REG_MERGING was added because once I noticed that a register with a multi-cycle .sdc constraint was merged with another register by synthesis, and the constraint was lost. I recently did an experiment where this was turned off however and it had no negative side effects (one or two circuits saved ~50 registers, but mostly the same)
   * MULTI_CYCLE_REMOVE_CMP_REG was added to remove registers from icmp instructions during de-pipelining. The de-pipelining is usually handled without any "​hacks"​ for every instruction but I couldn'​t figure out how to do it for compare instructions,​ so this is kind of a hack. I then also did the same thing for function arguments to remove drivers for their registers, so MULTI_CYCLE_REMOVE_CMP_REG now controls both these cases.   * MULTI_CYCLE_REMOVE_CMP_REG was added to remove registers from icmp instructions during de-pipelining. The de-pipelining is usually handled without any "​hacks"​ for every instruction but I couldn'​t figure out how to do it for compare instructions,​ so this is kind of a hack. I then also did the same thing for function arguments to remove drivers for their registers, so MULTI_CYCLE_REMOVE_CMP_REG now controls both these cases.
profiling-driven_multi-cycling.txt ยท Last modified: 2016/04/23 03:56 by stefan