C++ CPU Temperature Sensors and Computational Mathematics
These three sets of data show CPU temperature data every 30 seconds. (included in Input.zip)
· 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;