C++ CPU Temperature Sensors and Computational Mathematics

 

Your task is to take the temperature readings and generate for each core:

  1. A piecewise linear interpolation.
  2. A global linear least squares approximation.
  3. (Optional) A cubic spline (or other non-linear) interpolation.

2 Program Arguments & Execution

Your program must accept an input filename as the first command line argument. Your program must NOT prompt the user for a filename.

2.1 Input Format

Data takes the form of temperatures in a txt file. All data points are whitespace delimited. For example, if I had 5 temperature readings:

Example 1: Sample Input with Labels+61.0C +63.0C +50.0C +58.0C +80.0C +81.0C +68.0C +77.0C +62.0C +63.0C +52.0C +60.0C +83.0C +82.0C +70.0C +79.0C +68.0C +69.0C +58.0C +65.0C 

Example 2: Sample Input without Labels61.0 63.0 50.0 58.0 80.0 81.0 68.0 77.0 62.0 63.0 52.0 60.0 83.0 82.0 70.0 79.0 68.0 69.0 58.0 65.0 

would be a possible input files. Each line represents temperature readings from 4 processor cores. Process each temperature column independently. Readings are taken every 30 seconds. In this example:

  • line 1 is 0 sec
  • line 2 is 30 sec,
  • line 3 is 60 sec.
  • line 4 is 90 sec.
  • line 5 is 120 sec.
  • line 6 is 150 sec.
  • line 7 is 180 sec.

Your first step should be to pre-process this data into a usable form. Conceptually, you need the data in the following format:

This table is a conceptual visualization of the data. You may select any combination data structures, e.g., ADTS (classes or structs), arrays, lists, vectors, or maps.

Time (sec)Core 0Core 1Core 2Core 3061.063.050.058.03080.081.068.077.06062.063.052.060.012083.082.070.079.018068.069.058.065.0

2.3 Output Format

All output must be written to text files (one file pre core). Each line must take the form:

xk<=x<xk+1xk<=x<xk+1; yi=c0+c1xyi=c0+c1x ; type

where

  • xkxk and xk+1xk+1 are the domain in which ykyk is applicable
  • ykyk is the kthkth function
  • type is either least-squares or interpolation

You will have:

  • n1n1 interpolation lines for each core
  • exactly one least squares approximation line for each core

For the example data in described in you would generate 4 output files.

  • {basename}-core-0.{txt}
  • {basename}-core-1.{txt}
  • {basename}-core-2.{txt}
  • {basename}-core-3.{txt}

3 Sample Execution & Output

3.2 Sample Output

The following is an example of piecewise linear interpolation output for a single core.

 

4.1 Documentation Requirements

All code must be properly and fully documented using a language appropriate comment style. All functions (including parameters and return types) must be documented.

  1. Doxygen can be used for C++, Java, or JavaScript. Consider the following Doxygen Example:
    Example 3: C++ Doxygen Documentation/**  * Retrieve the value stored in three selected Cells  *  * @param cell1Id numeric id representing the 1st desired cell  * @param cell2Id numeric id representing the 2nd desired cell  * @param cell3Id numeric id representing the 3rd desired cell  *  * @return value stored in the Cell  *  * @pre (cell1Id > 0 && cell1Id < 10) &&  *      (cell2Id > 0 && cell2Id < 10) &&  *      (cell3Id > 0 && cell3Id < 10)  */ CellTriple get3Cells(int cell1Id, int cell2Id, int cell3Id) const;