Hello Alexandre, You are right. The following line apache_4cpu_40cl2 baseline 0-7:5-24 $flexus_commands_timing(common) tells you that flexpoints 5-24 will be used for measurements. The first four flexpoints are skipped to account for the warm-up period experienced when the flexpoints for each phase are created. Be careful when choosing the number and the distance of flexpoints within a phase. The flexpoints should uniformly cover the whole phase.
You should have some knowledge about the workload you want to run in order to perfectly select the sampling parameters. This paper will give you the main directions: SMARTS: Accelerating microarchitecture simulation via rigorous statistical sampling, ISCA 2003. Here is the link: http://infoscience.epfl.ch/record/135578/files/isca03_smarts.pdf Regarding the spec workloads and the line you pointed to spec2k_art baseline x:x $flexus_commands_timing(common) you again guessed correctly. We left these parameters undefined "x:x". Running it will raise an error. This is because we have not figured out the sampling parameters for SPEC workloads because we don't use them. Regards, Djordje ________________________________________ From: aledaglis [[email protected]] Sent: Tuesday, January 31, 2012 9:03 PM To: Simflex Subject: RE: Flexpoint Creation & Reusability Dear Djordje, Thank you for your answer! You have given me a better point of view on the flexpoints' reusability. As for the flexpoint creation, I had figured out that the number of flexpoints taken (during the trace simulation) as much as the range of flexpoints used for timing simulation are a matter of experience. I was mostly referring to the workloads that are used by the Flexus development team though. Isn't there a proposed number of flexpoints for each one? For example, in the run_job.rc.tcl file one can see: apache_4cpu_40cl2 baseline 0-7:5-24 $flexus_commands_timing(common) If I am not mistaken, this means that when using this workload in a timing simulation, flexpoints 5-24 from phases 0-7 will be used, right? So, it would be sufficient if I asked Flexus to create 24 flexpoints for each phase during the trace simulation (preceding the timing simulation, of course)? And one last remark, on the same issue. Do lines such as this spec2k_art baseline x:x $flexus_commands_timing(common) in the .tcl file mean that there is no proposed range of flexpoints that should be taken into account during the timing simulation? In that case, will I have to follow the trial-and-error method you proposed until I get some reliable results while still being practical in terms of simulation duration? Cheers, Alexandros On Tue, 31 Jan 2012 17:22:49 +0000, Djordje Jevdjic wrote: > Dear Alexandro, > > 1. Flexpoints are used only for timing simulations, so you don’t use > them for any trace simulation. > If you look again at the .tcl file, in the section named “rungen > trace” you will find the pointers to > the definitions containing running parameters. These parameters tell > you the number of instructions > each core in your system should run. > > However, you need to specify the number of flexpoints you will create > when you want to generate > flexpoints, and the generation is done with a trace simulator. You > decide on the number of phases/flexpoints > while you are creating your workload. The number of flexpoints > affects the reliability of your results. > The more flexpoints (measurements) you have, and the longer the > measurements are, the more > reliable your results will be. This is not always straightforward, > and depends on the workload behavior. > So, sometimes, you need to repeat this process a couple of times > until you get results that are reliable enough, > while still being practical for simulations. > > > 2. Flexpoints are highly reusable. This means that there is no need > to regenerate them if and only if the > parameters you plan to change affect only the timing behavior of your > components. If your changes > affect the functionality of the components (for example, you need to > vary cache sizes), you cannot > reuse the flexpoints. A flexpoint should keep the state that is > independent of your timing parameters. > Ideally, your flexpoint should have the state of the system > equivalent to the state that you would have > if you were running the workload in the timing mode from the > beginning until that point. However, this > is not always possible, but also not necessary. That’s why when > running a flexpoint we always have a > detailed 100-200K cycles warm-up period to warm up the > microarchitectural state that is not simulated > with a trace simulator. > > Whether you need to recreate the flexpoints or not depends on what > functionality you want to introduce. > For example, if you plan study the effect of small optimizations in > the replacement policy of 2-way > associative 32KB L1 caches, you can reuse the flexpoints created with > the LRU policy. When executing > each flexpoint, before taking the actual measurement, you will warm > up your system for let’s say 200K > cycles, so the small difference coming from the policy change will > vanish. However, you might need to > reconsider this if you are studying some changes in a 64MB L3 cache, > for example. It’s up to you to do > the math and see if flexpoint regeneration is needed or not and what > the required warm-up time is > (100K is typically ok if you are not changing the functionality > recorded by the trace simulator). If you are > changing the data placement policy in the last-level cache, there > WILL be a need to recreate your flexpoints, > because the content of your cache recorded in the flexpoints is not > valid anymore. > > Hope this helps, > > Regards, > Djordje > > ________________________________________ > From: aledaglis [[email protected]] > Sent: Saturday, January 28, 2012 12:04 PM > To: Simflex > Subject: Flexpoint Creation & Reusability > > Hello everybody, > > I have two questions about flexpoint generation and reusability. > > 1. How can I decide how many flexpoints I should create for each > different workload? I have noticed that in run_job.rc.tcl there are > definitions for each workload, like the number of cycles before each > breakpoint and flexpoint generation. What I am not sure about is the > number of flexpoints I should request when running the trace > simulation. > Would it be fine if I just checked which flexpoints are used for > timing > and only create as many flexpoints? e.g. as seen in run_job.rc.tcl: > "db2v8_tpcc_nort_16cpu_64cl baseline 0-1:1-24 > $flexus_commands_timing(common)", would it be enough to create 24 > flexpoints? > > 2. Another matter that concerns me is the range of a flexpoint's > reusability. I guess that if I change my user-postload.simics file > used > for the trace simulation, I should probably create new flexpoints. > What > if I change a component's behaviour? For instance, if I make a > change in > CMPCache, like changing the mapping function or implementing some > simple > migration mechanism, would it be necessary to make new flexpoints? > It > would seem logical to me to do so. In that case, under what > conditions > can a flexpoint set be reused? I understand that there is no short > answer to this question, but any explanation would be really > helpful. > > Thank you in advance > Alexandros Daglis
