MICA: Microarchitecture-Independent Characterization of Applications
What is MICA?
MICA is short for Microarchitecture-Independent
Characterization of Applications.
MICA is a Pin
tool which allows the user to collect a number of program characteristics to
quantify runtime program behavior.
These program characteristics are totally independent of the
microarchitecture (cache configuration, branch predictor, ...) on which the
measurements are done, in contrast to other workload characterization
techniques using simulation or hardware performance counters.
(Feb. 27th 2011)
I am no longer actively working in the field of computer architecture research.
Nevertheless, I will try and support MICA in the coming years.
If you notice that the last release of MICA isn't working for you, e.g. with the latest Pin kit, please contact me (email@example.com)
March 26th 2012
Release of MICA v0.40
- contributions by Hamid Fadishei:
- add support for multi-process binaries, see append_pid entry for config file
- resolve some warning messages
Aug. 29th 2011
Release of MICA v0.32
- significant code cleanup by Petr Tuma
- cleaned up some redundant NULL pointer casts
- cleaned up names of LRU stack entry references
- systematic testing of malloc return value in most of the tool code
- added warning on presence of multiple threads
- replaced sprintf with string streams
- added branch prediction hints using __builtin_expect where appropriate
- guard tracking progress in mica_progress.txt with a preprocessor flag (-DVERBOSE)
- test MICA built using the Intel C++ compiler, and document how to build it using
icpc in the README (TODO: benchmark the performance difference)
Feb. 28th 2011
Release of MICA v0.31
- improved config file parsing, i.e. remove dependency on order of entries
- updated README file
- describe some details regarding instruction mix
Feb. 27th 2011
Release of MICA v0.3
- increased flexibility of itypes analysis significantly
- instruction groups used in itypes analysis can be specified by the user now,
using a itypes.spec file; specify the filename in mica.conf using an entry like:
- by default, the old instruction groups are used
(except for SYSCALL, which was added to the group formely known as 'other')
- made block size in ilp, memfootprint and memreusedist flexible
- size can be set by specifying 'block_size: <power of 2>' in the mica.conf file
- default block size is 2^6 (64) bytes, which is a change compared to MICA v0.23 for ilp
- made page size in memfootprint flexible
- size can be set by specifying 'page_size: <power of 2>' in the mica.conf file
- default page size is 4096 (2^12) bytes
- possibly expensive assert statements and other sanity checks were removed
- bug fixes:
- memory read size wasn't being used 100% correctly
in ilp, memfootprint, memreusedist and stride analysis,
the size was being added to the start address of the read,
while (size-1) should be added;
otherwise, e.g. for memfootprint,
we count an extra block being touched if the access is near a block boundary
- a small problem with an assert statement was fixed in memfootprint (>= 0 instead of >)
- fprintf statements were fixed for 64-bit systems
Sep. 22th 2009
Release of MICA v0.23:
- bug fixes w.r.t. changes in Pin kit:
- adjusted makefile and README to reflect changed Pin kit directory tree
- adjusted mica_itypes.cpp to recognize both NOP and WIDENOP categories
Jun. 13th 2008
Release of MICA v0.22, including:
- bug fixes in itypes:
fixed issue with instructions in MISC category being counted double (both in 'control flow' and 'other' buckets)
(thanks to Ahmed S. Al-Zawawi for bringing my attention to this issue)
- added NOP instructions category
- adjusted README file to make meaning of different buckets in memreusedist more clear
(thanks to Kshitij Sudan for reporting this)
May 20th 2008
Release of MICA v0.21, including:
- removed -static from makefile, to avoid issues when linking MICA
(thanks to J. K. Rai and Ahmed S. Al-Zawawi for reporting this)
Mar. 26th 2008
Fixed some faulty hyperlinks in the publication section, and added a new paper on phase-level workload characterization, to be presented at ISPASS-2008 (Austin (TX), April 2008). This is the first paper that actually uses MICA...
Dec. 3rd 2007
Release of MICA v0.2, which includes some important bug fixes and added features:
The new release is available here.
- bugs fixed: reg (not including non-full-width registers), ilp (stop including after first non-valid register), stride (faulty use of readIndex/writeIndex in readMem/writeMem), not resetting interval_ins_count for all characteristics
- added features: taking size of memory reads/writes into account in ilp, stride and memfootprint, added memreusedist characteristics (for characterizing cache behavior)
- adjustments: using 64-byte cache blocks for memfootprint (instead of 32-byte), configuring MICA is done using a mica.conf configuration file instead of using command line parameters
- speed: used InsertIfCall/InsertThenCall to make more analysis routines inlineable, used buffering for ilp, which leads to a ~10% speedup
Sept. 29th 2007
Official introduction of MICA at the Pin tutorial at IISWC-2007. Slides for the presentation are available here, full code examples used in the tutorial are available here (gzipped tarball here).
Sept. 26th 2007
A sneak preview of MICA was shown as part of an presentation I was giving at Intel Hudson (near Boston (MA), US). The Pin development team gave a lot of great feedback on how MICA could be improved and extended, and they were interested in using part of the code for their ongoing research.
You can download MICA below. The Pin tool is released under a BSD license, which basically means "do what you want with it, just don't pretend it's yours".
If you are using MICA for a paper, please refer to the IEEE Micro article below for the microarchitecture-independent characterization methodology.
Download MICA v0.40
How do I ...?
learn more about it?
A README-file containing information about using the tool and the outputs it produces is available in the release.
A good place to start is the IISWC-2007 Pin tutorial presentation, available here.
For further questions about the use and implementation of MICA, please mail Kenneth Hoste (firstname.lastname@example.org).
MICA is very easy to use, just like any other Pin tool. To analyze the /bin/ls program in Linux, measuring all available characteristics for the full run of the program, execute:
pin -t mica.so -- ls
using a MICA config file that contains:
get support for it?
For now, please contact Kenneth Hoste (email@example.com) if you experience any problems using MICA. A MICA mailinglist will probably be set up some time soon.
contribute to it?
If you have improved MICA (fixed bugs, added features, ...), and want to contribute your efforts, please contact Kenneth Hoste (firstname.lastname@example.org).
Performance Prediction based on Inherent Program Similarity
Lizy K. John and
Koen De Bosschere
[abstract; paper: PDF, PS; presentation]
PACT-2006, Sept. 2006; Seattle, WA (US)
Comparing Benchmarks Using Key Microarchitecture-Independent Characteristics
Kenneth Hoste and
[abstract; paper: PDF; presentation ]
IISWC2006, Oct. 2006; San Jose, CA (US)
Analyzing Commercial Processor Performance Numbers for Predicting Performance of Applications of Interest
Kenneth Hoste, Lieven Eeckhout and
[abstract; paper: PDF; poster ]
SIGMETRICS'07, June 2007; San Diego, CA (US)
Characterizing the Unique and Diverse Behaviors in Existing and Emerging General-Purpose and Domain-Specific Benchmark Suites
by Kenneth Hoste and Lieven Eeckhout
ISPASS-2008, April. 2008; Austin, TX (US)
Scheduling on Heterogeneous Multicore Processors Using Architectural Signatures
by Daniel Shelepov and Alexandra Fedorova (Simon Fraser University, Vancouver, Canada)
WIOSCA-2008 (ISCA workshop), June 2008; Beijing, China
HASS: A Scheduler for Heterogeneous Multicore Systems
by Daniel Shelepov, Juan Carlos Saez", Stacey Jeffery°, Alexandra Fedorova,
Nestor Perez, Zhi Feng Huang, Sergey Blagodurov and Viren Kumar
(Simon Fraser University, Vancouver, Canada)
(° University of Waterloo, Ontario, Canada)
(" University of Madrid, Spain)
Operating Systems Review, vol. 43, issue 2, pp. 66-75, April 2009
(Special Issue on the Interaction among the OS, Compilers and Multicore processors)
Analysis, Estimation and Optimization of Computer System Performance Using Machine Learning
Kenneth Hoste, PhD dissertation
Ghent University (Belgium), September 2010