Therminator is a compact thermal modeling-based component-level thermal simulator that targets small form-factor mobile devices (such as smartphones). It produces temperature maps for all components, including the application processor, battery, display, and other key device components, as well as the skin of the device itself, with high accuracy and short runtime.

Therminator takes two input files as explained next. The specs.xml file describes the smartphone design, including components of interest and their geometric dimensions (length, width, and thickness) and relative positions. Therminator has a built-in library storing properties (i.e., thermal conductivity, density, and specific heat) of common materials that are used to manufacture smartphones. In addition, users can override these properties or specify new materials through the specs.xml file. The power.trace file provides the usage information (power consumption) of those components that consume power and generate heat, e.g., ICs, battery, and display. The power.trace can be obtained through real measurements or other power estimation tools/methods. power.trace is a separate file so that one can easily interface a performance-power simulator with Therminator. The syntax of input files is explained below.


You may download Therminator from here or from my github.

Change Log
  • 1.00: Initial release.
  • 1.01: A few bug fixes.
Directories & Files Structure

  1. GNU build utilities (GCC 4+ and Make): You are recommended to use Linux. In case you want to use Windows, make sure to install MinGW or Cygwin.
  2. Install CULA Dense library and NVIDIA GPU with CUDA support (optional): Therminator allows a parallel computing feature that uses NVIDIA’s GPUs to perform matrix computations. It is highly recommended to enable this feature as it can significantly reduce the runtime. To utilize this feature, you need to download the CULA Dense library from here and install it on your machine. Next, open the Makefile in the Therminator package and change lines 7 and 8, so that INCLUDE and LIBRARIES variables point to the directory where CULA is installed.


  1. Extract the downloaded terminator package.
  2. Go to the Therminator installation directory    cd therminator
  3. Build Therminator with either of the following options:
    • If you have CULA Dense library, you may enable the parallel computing feature by using the following command:
    • If you don’t have CULA Dense library installed, use this command:
  4. To remove all of the built files, type:
Input files syntax
        1. Design specification file
          1. Two example files (package_GS4.xml and package_MDP.xml) have been provided along with the package of Therminator. You can basically follow them to specify
            a design specification.
          2. The outer hierarchy is the device level description, where you can specify the overall dimensions of the device and the ambient temperature. Three sub-hierarchies are material, floorplan, and component.
          3. The material hierarchy specifies the material properties that are used to build the device. The current version of Therminator is concerned with steady-state temperature maps, and thereby, only the thermal conductivity information matters. The feature that captures transient temperatures will be developed later.
          4. The floorplan hierarchy is an optional input that specifies the floorplan of some selected components. For example, in package_GS4.xml file, a floor plan is specified for the Snapdragon_600 processor. The purpose of this is to provide higher accuracy of temperature maps, given more detailed information about processors, or other IC components. Note that the coordinates in the floorplan hierarchy is re-normalized such that the left-bottom corner of the component is set to be (0,0).
          5. The component hierarchy specifies the components of interest. The properties of each component include:
            1. coordinates – numerical values. The coordinates (x, y, and z) are relative to the left-bottom corner of the device.
            2.  dimensions –  numerical values. Length, width, and height of the component.
            3. materials – The type of material shall be specified in the material hierarchy.
            4. power gen – yes/no. This property indicates whether this component consumes power and generates heat. If it is specified as yes, the power consumption shall be provided in the power trace file.
            5. fill – some IC chips have a thermal pad pasted on it. If the value is set as yes, Therminator will automatically calculates the free space above this component, and fills the free space with material specified in filling_material.
            6. lateral_connectivity – Many materials are orthotropic (i.e., having different thermal conductivity along x, y, and z directions.) This tells Therminator whether this component is orthotropic.
            7. resolution – How many sub-components will Therminator divide this component to. You can specify resolution in x, y, and z directions. An automated approach for determining the resolution will be developed later.
            8. Note that, currently, users need to identify major free space manually and specify them as air blocks (ab). This will prevent singularity issue when reversing the conduction matrix. Automatic gap-fill will be developed in next release.
        2. Power trace file: This file specifies the power consumption of each component that is declared as ‘yes’ in its power gen property in the design specification file.
          1. If you did not enable the floorplan feature, then the number power
            consumptions you provide here is the same as those components that consume
            power in design specification file.
          2. If you enable the floorplan feature and the component consumes power,
            you need to provide the power consumption for each component in the
            floorplan. You can add column with name of ‘floorplanname-componentname’.
Running Therminator

Example Outputs

Therminator outputs the temperature (in Celsius) of each sub-component in the output results file. In case of multiple layers specified in the z-direction, results on the top have the highest z value.
For example, the provided design for Snapdragon_600 in the package_GS4.xml has the resolution of 6x6x3 (a total of 108 subcomponents). Running

gives this output:


Mohammad Javad Dousti, Qing Xie, and Massoud Pedram

Questions or Bugs?

If you have any question, find any bug, or encounter any problem when using Therminator, please contact Mohammad Javad Dousti or Qing Xie.


Note: The 3rd-party library files included in src/libs have their own respective licenses.