diff --git a/include/benchMark.hpp b/include/benchMark.hpp new file mode 100644 index 0000000000000000000000000000000000000000..6be7175b52b6546513bfbdda4f8cda008bcef17a --- /dev/null +++ b/include/benchMark.hpp @@ -0,0 +1,13 @@ +#ifndef _BENCHMARK +#define _BENCHMARK +#include +#include +#include + +using std::map; +using std::string; +using std::vector; + +map>> initalBenchMark(); + +#endif \ No newline at end of file diff --git a/intervalData.txt b/intervalData.txt index 18b18566445ef7090c09a444c36c32f596d1db49..8afd5ca72aa94bba21406c8a8f9c0a125f5f6d77 100644 --- a/intervalData.txt +++ b/intervalData.txt @@ -1 +1 @@ --30 50 -100 100 20 20000 \ No newline at end of file +1 2 3 4 5 6 \ No newline at end of file diff --git a/src/benchMark.cpp b/src/benchMark.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1737199e73875eab5b18de78b849cd9ca08c7184 --- /dev/null +++ b/src/benchMark.cpp @@ -0,0 +1,33 @@ +#include "benchMark.hpp" +#include +#include +#include +#include + +using std::ifstream; +using std::map; +using std::pair; +using std::string; +using std::vector; + +map>> initalBenchMark() +{ + map>> benchMarkData; + ifstream infile; + infile.open("benchMark.txt"); + string buf; + while (getline(infile, buf)) + { + int pos = buf.find(' '); + string name = buf.substr(0, pos); + string expr = buf.substr(pos + 1, buf.length() - pos - 1); + //区间信息暂不确定 + vector interval; + interval.push_back(1024); + map> m1; + m1.insert(pair>(expr, interval)); + benchMarkData.insert(pair>>(name, m1)); + } + + return benchMarkData; +} \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index f4010f5e14bc9d7d42adb7145ea4bc503022dad9..0dbd4e93a37401eaa55cc18770d03601d11880a3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,6 +6,7 @@ #include "color.hpp" #include "geneCode.hpp" #include "tools.hpp" +#include "benchMark.hpp" #include #include @@ -51,13 +52,20 @@ int main() // while (getline(infile, inputStr)) // read line from file's input while (getline(cin, inputStr)) // read line from keyboard input { + auto benchMarkData = initalBenchMark(); + auto pos = benchMarkData.find(inputStr); + if (pos != benchMarkData.end()) + { + inputStr = pos->second.begin()->first; + cout << inputStr << endl; + } // only rewrite getlineCount++; if (getlineCount == 35 || getlineCount == 36 || getlineCount < 0) continue; - auto timeStart = std::chrono::high_resolution_clock::now(); + auto start = std::chrono::high_resolution_clock::now(); if (inputStr == "exit;" || inputStr == "quit;" || inputStr == "exit" || inputStr == "quit") { @@ -78,45 +86,84 @@ int main() const char *split = " "; + auto originExpr1 = ParseExpressionFromString(inputStr); + vector vars1; + getVariablesFromExpr(originExpr1, vars1); + cout << vars1.size() << endl; + fprintf(stderr, GREEN "interval> " RESET); + string intervalStr; getline(cin, intervalStr); vector intervals = getIntervals(intervalStr, split); + ofstream ofs; + ofs.open("intervalData.txt", ios::out); + for (int i = 0; i < intervals.size(); i++) + { + if (i == intervals.size() - 1) + { + ofs << intervals.at(i); + } + else + { + ofs << intervals.at(i) << " "; + } + } + ofs.close(); - fprintf(stderr, GREEN "scale> " RESET); - string scaleStr; - getline(cin, scaleStr); - vector scales = getScales(scaleStr, split); + // fprintf(stderr, GREEN "scale> " RESET); + // string scaleStr; + // getline(cin, scaleStr); + // vector scales = getScales(scaleStr, split); + int sampleScale; + cout << vars1.size() << endl; + if (vars1.size() == 1) + { + sampleScale = 500000; + } + else if (vars1.size() == 2) + { + sampleScale = 1024; + } + else if (vars1.size() == 3) + { + sampleScale = 256; + } + else + { + sampleScale = 10; + } + vector scales; + for (int i = 0; i < vars1.size(); i++) + { + scales.push_back(sampleScale); + } bool runAllFlag = true; + std::chrono::_V2::system_clock::time_point tmp1, tmp2, tmp3; if (runAllFlag) { // the whole process auto uniqueLabel = getUniqueLabel(); cout << "uniqueLabel: " << uniqueLabel << endl; // get the information about the input expr - auto originExpr = ParseExpressionFromString(inputStr); - printExpr(originExpr, "\nmain: the originExpr = ", DOUBLE_PRECISION); - vector vars; - getVariablesFromExpr(originExpr, vars); + // auto originExpr = ParseExpressionFromString(inputStr); + // vector vars; + // getVariablesFromExpr(originExpr, vars); - auto funcNameOrigin = geneOriginCodeKernel(inputStr, vars, uniqueLabel, "origin"); + auto funcNameOrigin = geneOriginCodeKernel(inputStr, vars1, uniqueLabel, "origin"); // auto funcNameOrigin = geneOriginCode(inputStr, uniqueLabel, "origin"); // auto funcNameHerbie = geneHerbieCode(inputStr, uniqueLabel, "herbie"); // auto funcNameDaisy = geneDaisyCode(inputStr, uniqueLabel, "daisy"); - auto funcNameMpfr = geneMpfrCode(inputStr, uniqueLabel, vars); + auto funcNameMpfr = geneMpfrCode(inputStr, uniqueLabel, vars1); // TODO: pick the best from origin, herbie, daisy // pickTheBest(uniqueLabel, 0, 1, 100); - // auto timeTmp1 = std::chrono::high_resolution_clock::now(); + tmp1 = std::chrono::high_resolution_clock::now(); auto infoTmp = testError(uniqueLabel, "origin", intervals, scales); - // auto timeTmp2 = std::chrono::high_resolution_clock::now(); - // std::chrono::duration testError_seconds = timeTmp2 - timeTmp1; - // cout << BLUE << "testError time: " << testError_seconds.count() << "s" << RESET << endl; - // fprintf(stderr, GREEN "ready> " RESET); - // continue; + tmp2 = std::chrono::high_resolution_clock::now(); geneBoundaryData(uniqueLabel, "origin"); // matlab @@ -125,25 +172,14 @@ int main() geneIntervalData(uniqueLabel, intervalsTemp, threholdsTemp); cout << "=-=-=-=-=-=-=-=-=-=-=-=-= rewrite start =-=-=-=-=-=-=-=-=-=-=-=-=" << endl; - // auto timeTmp3 = std::chrono::high_resolution_clock::now(); auto exprInfoVector = rewrite(inputStr, uniqueLabel); - // auto timeTmp4 = std::chrono::high_resolution_clock::now(); - // std::chrono::duration rewrite_seconds = timeTmp4 - timeTmp3; - // cout << BLUE << "rewrite time: " << rewrite_seconds.count() << " s" << RESET << endl; - // fprintf(stderr, GREEN "ready> " RESET); - // continue; + tmp3 = std::chrono::high_resolution_clock::now(); cout << "=-=-=-=-=-=-=-=-=-=-=-=-= rewrite end =-=-=-=-=-=-=-=-=-=-=-=-=" << endl; - auto funcNameFinal = geneFinalCodeKernel(inputStr, uniqueLabel, exprInfoVector, vars); + auto funcNameFinal = geneFinalCodeKernel(inputStr, uniqueLabel, exprInfoVector, vars1); } // the whole process end else { // only rewrite - // auto timeTmp1 = std::chrono::high_resolution_clock::now(); auto results = exprAutoWrapper(inputStr); - // auto timeTmp2 = std::chrono::high_resolution_clock::now(); - // std::chrono::duration exprAutoWrapper_seconds = timeTmp2 - timeTmp1; - // cout << BLUE << "exprAutoWrapper time: " << exprAutoWrapper_seconds.count() << " s" << RESET << endl; - // fprintf(stderr, GREEN "ready> " RESET); - // continue; // write the results to file fout << "-------------------------------------NO." << getlineCount << ": " << inputStr << endl; @@ -159,8 +195,12 @@ int main() fout << endl; } // only rewrite end - auto timeEnd = std::chrono::high_resolution_clock::now(); - std::chrono::duration elapsed_seconds = timeEnd - timeStart; + auto end = std::chrono::high_resolution_clock::now(); + std::chrono::duration testError_seconds = tmp2 - tmp1; + std::chrono::duration rewrite_seconds = tmp3 - tmp2; + std::chrono::duration elapsed_seconds = end - start; + cout << BLUE << "testError time: " << testError_seconds.count() << "s" << RESET << endl; + cout << BLUE << "rewrite time: " << rewrite_seconds.count() << "s" << RESET << endl; cout << BLUE << "elapsed time: " << elapsed_seconds.count() << "s" << RESET << endl; fprintf(stderr, GREEN "ready> " RESET); }