cn6: add clock sync experiment
This commit is contained in:
		
							parent
							
								
									f9581cfb59
								
							
						
					
					
						commit
						1a9b8470bb
					
				
							
								
								
									
										170
									
								
								garlic/exp/cn6/timediff.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								garlic/exp/cn6/timediff.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,170 @@ | |||||||
|  | { | ||||||
|  |   stdenv | ||||||
|  | , stdexp | ||||||
|  | , bsc | ||||||
|  | , pkgs | ||||||
|  | , targetMachine | ||||||
|  | , stages | ||||||
|  | , garlicTools | ||||||
|  | , writeText | ||||||
|  | , enableHWC ? false | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with stdenv.lib; | ||||||
|  | with garlicTools; | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   # Initial variable configuration | ||||||
|  |   varConf = { | ||||||
|  |     nodes = [ 1 2 4 8 ]; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   machineConfig = targetMachine.config; | ||||||
|  | 
 | ||||||
|  |   genConf = c: targetMachine.config // rec { | ||||||
|  |     expName = "timediff"; | ||||||
|  |     unitName = expName + "-nodes${toString nodes}"; | ||||||
|  | 
 | ||||||
|  |     inherit (machineConfig) hw; | ||||||
|  | 
 | ||||||
|  |     loops = 1; | ||||||
|  | 
 | ||||||
|  |     # Resources | ||||||
|  |     cpusPerTask = hw.cpusPerSocket; | ||||||
|  |     ntasksPerNode = hw.socketsPerNode; | ||||||
|  |     nodes = c.nodes; | ||||||
|  | 
 | ||||||
|  |     qos = "debug"; | ||||||
|  |     time = "02:00:00"; | ||||||
|  | 
 | ||||||
|  |     jobName = unitName; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   configs = stdexp.buildConfigs { | ||||||
|  |     inherit varConf genConf; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Custom BSC packages | ||||||
|  |   bsc' = bsc.extend (self: super: { | ||||||
|  | 
 | ||||||
|  |     # For nanos6 we use my fork for distributed instrumentation at the | ||||||
|  |     # latest commit | ||||||
|  |     nanos6 = (super.nanos6Git.override { | ||||||
|  |       enableJemalloc = true; | ||||||
|  |     }).overrideAttrs (old: rec { | ||||||
|  | 
 | ||||||
|  |       src = builtins.fetchGit { | ||||||
|  |         url = "git@bscpm03.bsc.es:rarias/nanos6.git"; | ||||||
|  |         ref = "rodrigo"; | ||||||
|  |         rev = "5cbeabb4e0446c2c293cc3005f76e6139465caee"; | ||||||
|  |       }; | ||||||
|  |        | ||||||
|  |       dontStrip = false; | ||||||
|  |       version = src.shortRev; | ||||||
|  | 
 | ||||||
|  |       # Disable all unused instrumentations for faster builds | ||||||
|  |       configureFlags = old.configureFlags ++ [ | ||||||
|  |         "--disable-extrae-instrumentation" | ||||||
|  |         "--disable-lint-instrumentation" | ||||||
|  |         "--disable-graph-instrumentation" | ||||||
|  |         "--disable-stats-instrumentation" | ||||||
|  |       ]; | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     # Use clang from master | ||||||
|  |     clangOmpss2Unwrapped = super.clangOmpss2Unwrapped.overrideAttrs (old: rec { | ||||||
|  |       version = src.shortRev; | ||||||
|  |       src = builtins.fetchGit { | ||||||
|  |         url = "ssh://git@bscpm03.bsc.es/llvm-ompss/llvm-mono.git"; | ||||||
|  |         ref = "master"; | ||||||
|  |         rev = "ce47d99d2b2b968c87187cc7818cc5040b082d6c"; | ||||||
|  |       }; | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     # Use mcxx from master | ||||||
|  |     mcxx = super.mcxxGit; | ||||||
|  | 
 | ||||||
|  |     # We also need the instrumented version of TAMPI | ||||||
|  |     tampi = super.tampiGit.overrideAttrs (old: rec { | ||||||
|  |       version = src.shortRev; | ||||||
|  |       dontStrip = true; | ||||||
|  |       NIX_CFLAGS = "-O0 -g"; | ||||||
|  |       src = builtins.fetchGit { | ||||||
|  |         url = "ssh://git@bscpm03.bsc.es/rarias/tampi.git"; | ||||||
|  |         ref = "instrument"; | ||||||
|  |         rev = "6e4294299bf761a1cc31f4181d9479cefa1c7f3e"; | ||||||
|  |       }; | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     # We use the latest commit in master as src for cn6 | ||||||
|  |     cn6Git = ((super.cn6.overrideAttrs (old: rec { | ||||||
|  |       version = src.shortRev; | ||||||
|  |       src = builtins.fetchGit { | ||||||
|  |         url = "ssh://git@bscpm03.bsc.es/rarias/cn6.git"; | ||||||
|  |         ref = "master"; | ||||||
|  |         rev = "1d23d01d60164b8641746d5a204128a9d31b9650"; | ||||||
|  |       }; | ||||||
|  |     })).override { enableTest = true; }); | ||||||
|  | 
 | ||||||
|  |     cn6 = self.cn6Git; | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   ctf = {nextStage, conf, ...}: let | ||||||
|  |     # Create the nanos6 configuration file | ||||||
|  |     nanos6ConfigFile = writeText "nanos6.toml" '' | ||||||
|  |       version.instrument = "ctf" | ||||||
|  |       turbo.enabled = false | ||||||
|  |       instrument.ctf.converter.enabled = false | ||||||
|  |     '' + optionalString (enableHWC) '' | ||||||
|  |       hardware_counters.papi.enabled = true | ||||||
|  |       hardware_counters.papi.counters = [ | ||||||
|  |         "PAPI_TOT_INS", "PAPI_TOT_CYC", | ||||||
|  |         "PAPI_L1_TCM", "PAPI_L2_TCM", "PAPI_L3_TCM" | ||||||
|  |       ] | ||||||
|  |     ''; | ||||||
|  | 
 | ||||||
|  |   in stages.exec { | ||||||
|  |     inherit nextStage; | ||||||
|  | 
 | ||||||
|  |     # And use it | ||||||
|  |     env = '' | ||||||
|  |       export NANOS6_CONFIG=${nanos6ConfigFile} | ||||||
|  |     ''; | ||||||
|  | 
 | ||||||
|  |     post = '' | ||||||
|  |       rank=$SLURM_PROCID | ||||||
|  |       tracedir=trace_timediff_mpi | ||||||
|  | 
 | ||||||
|  |       # Convert CTF trace to PRV | ||||||
|  |       ${bsc'.cn6}/bin/cn6 $tracedir/$rank | ||||||
|  | 
 | ||||||
|  |       # Merge on rank 0 only | ||||||
|  |       if [ $rank != 0 ]; then | ||||||
|  |         exit 0; | ||||||
|  |       fi | ||||||
|  | 
 | ||||||
|  |       # Wait a bit for all ranks to finish the conversion | ||||||
|  |       sleep 5 | ||||||
|  | 
 | ||||||
|  |       # Run the merger | ||||||
|  |       ${bsc'.cn6}/bin/merge-prv $tracedir | ||||||
|  | 
 | ||||||
|  |       # We need some tools the path | ||||||
|  |       export PATH="$PATH:${bsc'.babeltrace2}/bin:${pkgs.ministat}/bin" | ||||||
|  | 
 | ||||||
|  |       ${bsc'.cn6}/bin/sync-err.sh $tracedir | ||||||
|  |     ''; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   exec = {nextStage, conf, ...}: stages.exec { | ||||||
|  |     inherit nextStage; | ||||||
|  |     program = "${bsc'.cn6}/bin/timediff_mpi"; | ||||||
|  |     argv = [ conf.cpusPerTask ]; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   pipeline = stdexp.stdPipeline ++ [ ctf exec ]; | ||||||
|  | 
 | ||||||
|  | in | ||||||
|  |   | ||||||
|  |   stdexp.genExperiment { inherit configs pipeline; } | ||||||
| @ -100,4 +100,8 @@ | |||||||
|   examples = { |   examples = { | ||||||
|     granularity = callPackage ./examples/granularity.nix { }; |     granularity = callPackage ./examples/granularity.nix { }; | ||||||
|   }; |   }; | ||||||
|  | 
 | ||||||
|  |   cn6 = { | ||||||
|  |     timediff = callPackage ./cn6/timediff.nix { }; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user