C++ CPU Temperature Sensors and Computational Mathematics

profileski_doosh41
directions.docx

These three sets of data show CPU temperature data every 30 seconds. (included in Input.zip)

· sensors-2018.12.26.txt

· sensors-2019.01.26.txt

· sensors-2019.02.09.txt

· sensors-2018.12.26-no-labels.txt

· sensors-2019.01.26-no-labels.txt

· sensors-2019.02.09-no-labels.txt

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.0°C +63.0°C +50.0°C +58.0°C

+80.0°C +81.0°C +68.0°C +77.0°C

+62.0°C +63.0°C +52.0°C +60.0°C

+83.0°C +82.0°C +70.0°C +79.0°C

+68.0°C +69.0°C +58.0°C +65.0°C

Example 2: Sample Input without Labels

61.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 0

Core 1

Core 2

Core 3

0

61.0

63.0

50.0

58.0

30

80.0

81.0

68.0

77.0

60

62.0

63.0

52.0

60.0

120

83.0

82.0

70.0

79.0

180

68.0

69.0

58.0

65.0

2.2 Import Input Libraries

 

You may opt to #include or import C++ input libraries

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:

· n−1n−1 interpolation lines for each core

· exactly one least squares approximation line for each core

For the example data in described in  Section 2.1 (Input Format)  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.1 Input Data

The  Overview  listed three input files.

3.2 Sample Output

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

(see sampleoutput.txt)

4 Programming Requirements & Constraints

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;