From 4eb6653ea756ecb3346567891abc853b9191c474 Mon Sep 17 00:00:00 2001 From: kunpeng Date: Thu, 6 Jul 2023 17:38:38 -0700 Subject: [PATCH] All done --- mllib-dal/src/main/native/Logger.cpp | 28 +++++ mllib-dal/src/main/native/Logger.h | 5 + mllib-dal/src/main/native/OneCCL.cpp | 20 ++-- mllib-dal/src/main/native/service.cpp | 166 +++++++++++--------------- 4 files changed, 114 insertions(+), 105 deletions(-) diff --git a/mllib-dal/src/main/native/Logger.cpp b/mllib-dal/src/main/native/Logger.cpp index a4850a850..433fabc77 100644 --- a/mllib-dal/src/main/native/Logger.cpp +++ b/mllib-dal/src/main/native/Logger.cpp @@ -83,6 +83,34 @@ int println(MessageType message_type, const char *format, ...) { return ret; } +int printerr(MessageType message_type, const std::string &msg) { + int ret = print2stream(message_type, stdout, msg.c_str()); + return ret; +} + +int printerr(MessageType message_type, const char *format, ...) { + va_list args; + va_start(args, format); + int ret = print2streamFromArgs(message_type, stderr, format, args); + va_end(args); + return ret; +} + +int printerrln(MessageType message_type, const std::string &msg) { + int ret = print2stream(message_type, stderr, msg.c_str()); + fprintf(stderr, "\n"); + return ret; +} + +int printerrln(MessageType message_type, const char *format, ...) { + va_list args; + va_start(args, format); + int ret = print2streamFromArgs(message_type, stderr, format, args); + va_end(args); + fprintf(stderr, "\n"); + return ret; +} + int print(MessageType message_type, const oneapi::dal::table &table) { auto [prefix, enable] = get_prefix(message_type); if (!enable) diff --git a/mllib-dal/src/main/native/Logger.h b/mllib-dal/src/main/native/Logger.h index 4da5ec672..2a6172918 100644 --- a/mllib-dal/src/main/native/Logger.h +++ b/mllib-dal/src/main/native/Logger.h @@ -22,4 +22,9 @@ int print(MessageType message_type, const char *format, ...); int print(MessageType message_type, const oneapi::dal::table &table); int println(MessageType message_type, const char *format, ...); int println(MessageType message_type, const std::string &msg); + +int printerr(MessageType message_type, const std::string &msg); +int printerr(MessageType message_type, const char *format, ...); +int printerrln(MessageType message_type, const char *format, ...); +int printerrln(MessageType message_type, const std::string &msg); }; // namespace logger diff --git a/mllib-dal/src/main/native/OneCCL.cpp b/mllib-dal/src/main/native/OneCCL.cpp index 38557d615..e119e8216 100644 --- a/mllib-dal/src/main/native/OneCCL.cpp +++ b/mllib-dal/src/main/native/OneCCL.cpp @@ -30,6 +30,7 @@ #include "OneCCL.h" #include "com_intel_oap_mllib_OneCCL__.h" +#include "Logger.h" extern const size_t ccl_root = 0; @@ -47,7 +48,8 @@ JNIEXPORT jint JNICALL Java_com_intel_oap_mllib_OneCCL_00024_c_1init( JNIEnv *env, jobject obj, jint size, jint rank, jstring ip_port, jobject param) { - std::cerr << "OneCCL (native): init" << std::endl; + logger::printerrln(logger::INFO, "OneCCL (native): init"); + auto t1 = std::chrono::high_resolution_clock::now(); @@ -68,8 +70,7 @@ JNIEXPORT jint JNICALL Java_com_intel_oap_mllib_OneCCL_00024_c_1init( auto t2 = std::chrono::high_resolution_clock::now(); auto duration = std::chrono::duration_cast(t2 - t1).count(); - std::cerr << "OneCCL (native): init took " << duration << " secs" - << std::endl; + logger::printerrln(logger::INFO, "OneCCL (native): init took %d secs", duration); rank_id = getComm().rank(); comm_size = getComm().size(); @@ -92,7 +93,7 @@ JNIEXPORT jint JNICALL Java_com_intel_oap_mllib_OneCCL_00024_c_1init( */ JNIEXPORT jint JNICALL Java_com_intel_oap_mllib_OneCCL_00024_c_1initDpcpp(JNIEnv *env, jobject) { - std::cerr << "OneCCL (native): init dpcpp" << std::endl; + logger::printerrln(logger::INFO, "OneCCL (native): init dpcpp"); ccl::init(); return 1; @@ -100,7 +101,7 @@ Java_com_intel_oap_mllib_OneCCL_00024_c_1initDpcpp(JNIEnv *env, jobject) { JNIEXPORT void JNICALL Java_com_intel_oap_mllib_OneCCL_00024_c_1cleanup(JNIEnv *env, jobject obj) { - std::cerr << "OneCCL (native): cleanup" << std::endl; + logger::printerrln(logger::INFO, "OneCCL (native): cleanup"); g_kvs.pop_back(); g_comms.pop_back(); } @@ -135,7 +136,7 @@ static int fill_local_host_ip() { int family = AF_UNSPEC; char local_ip[CCL_IP_LEN]; if (getifaddrs(&ifaddr) < 0) { - std::cerr << "OneCCL (native): can not get host IP" << std::endl; + logger::printerrln(logger::ERROR, "OneCCL (native): can not get host IP"); return -1; } @@ -157,7 +158,7 @@ static int fill_local_host_ip() { if (res != 0) { std::string s("OneCCL (native): getnameinfo error > "); s.append(gai_strerror(res)); - std::cerr << s << std::endl; + logger::printerrln(logger::ERROR, s); return -1; } local_host_ips.push_back(local_ip); @@ -165,8 +166,7 @@ static int fill_local_host_ip() { } } if (local_host_ips.empty()) { - std::cerr << "OneCCL (native): can't find interface to get host IP" - << std::endl; + logger::printerrln(logger::ERROR, "OneCCL (native): can't find interface to get host IP"); return -1; } @@ -177,7 +177,7 @@ static int fill_local_host_ip() { static bool is_valid_ip(char ip[]) { if (fill_local_host_ip() == -1) { - std::cerr << "OneCCL (native): get local host ip error" << std::endl; + logger::printerrln(logger::ERROR, "OneCCL (native): get local host ip error"); return false; }; diff --git a/mllib-dal/src/main/native/service.cpp b/mllib-dal/src/main/native/service.cpp index c9d053404..db5adf796 100644 --- a/mllib-dal/src/main/native/service.cpp +++ b/mllib-dal/src/main/native/service.cpp @@ -1,5 +1,6 @@ #include "service.h" #include "error_handling.h" +#include "Logger.h" using namespace daal; using namespace daal::data_management; @@ -162,27 +163,27 @@ void printAprioriItemsets(NumericTablePtr largeItemsetsTable, largeItemsetsSupportData[2 * i + 1]; } - std::cout << std::endl << "Apriori example program results" << std::endl; + logger::println(logger::INFO, ""); + logger::println(logger::INFO, "Apriori example program results"); - std::cout << std::endl - << "Last " << nItemsetToPrint << " large itemsets: " << std::endl; - std::cout << std::endl - << "Itemset" - << "\t\t\tSupport" << std::endl; + logger::println(logger::INFO, ""); + logger::println(logger::INFO, "Last %d large itemsets: ", nItemsetToPrint); + + logger::println(logger::INFO, ""); + logger::println(logger::INFO, "Itemset\t\t\tSupport"); size_t iMin = (((largeItemsetCount > nItemsetToPrint) && (nItemsetToPrint != 0)) ? largeItemsetCount - nItemsetToPrint : 0); for (size_t i = iMin; i < largeItemsetCount; i++) { - std::cout << "{"; + logger::print(logger::INFO, "{"); for (size_t l = 0; l < largeItemsetsVector[i].size() - 1; l++) { - std::cout << largeItemsetsVector[i][l] << ", "; + logger::print(logger::NONE, "%d, ", largeItemsetsVector[i][l]); } - std::cout << largeItemsetsVector[i][largeItemsetsVector[i].size() - 1] - << "}\t\t"; + logger::print(logger::NONE, "%d}\t\t", largeItemsetsVector[i][largeItemsetsVector[i].size() - 1]); - std::cout << supportVector[i] << std::endl; + logger::println(logger::NONE, "%d", supportVector[i]); } largeItemsetsTable->releaseBlockOfRows(block1); @@ -213,8 +214,8 @@ void printAprioriRules(NumericTablePtr leftItemsTable, leftItemsVector.resize(nRules); if (nRules == 0) { - std::cout << std::endl - << "No association rules were found " << std::endl; + logger::println(logger::INFO, ""); + logger::println(logger::INFO, "No association rules were found "); return; } @@ -236,31 +237,29 @@ void printAprioriRules(NumericTablePtr leftItemsTable, confidenceVector[i] = confidence[i]; } - std::cout << std::endl - << "Last " << nRulesToPrint - << " association rules: " << std::endl; - std::cout << std::endl - << "Rule" - << "\t\t\t\tConfidence" << std::endl; + logger::println(logger::INFO, ""); + logger::println(logger::INFO, "Last %d association rules: ", nRulesToPrint); + + logger::println(logger::INFO, ""); + logger::println(logger::INFO, "Rule\t\t\t\tConfidence"); + size_t iMin = (((nRules > nRulesToPrint) && (nRulesToPrint != 0)) ? (nRules - nRulesToPrint) : 0); for (size_t i = iMin; i < nRules; i++) { - std::cout << "{"; + logger::print(logger::INFO, "{"); for (size_t l = 0; l < leftItemsVector[i].size() - 1; l++) { - std::cout << leftItemsVector[i][l] << ", "; + logger::print(logger::NONE, "%d, ", leftItemsVector[i][l]); } - std::cout << leftItemsVector[i][leftItemsVector[i].size() - 1] - << "} => {"; + logger::print(logger::NONE, "%d} => {", leftItemsVector[i][leftItemsVector[i].size() - 1]); for (size_t l = 0; l < rightItemsVector[i].size() - 1; l++) { - std::cout << rightItemsVector[i][l] << ", "; + logger::print(logger::NONE, "%d, ", rightItemsVector[i][l]); } - std::cout << rightItemsVector[i][rightItemsVector[i].size() - 1] - << "}\t\t"; + logger::print(logger::NONE, "%d}\t\t", rightItemsVector[i][rightItemsVector[i].size() - 1]); - std::cout << confidenceVector[i] << std::endl; + logger::println(logger::NONE, "%d", confidenceVector[i]); } leftItemsTable->releaseBlockOfRows(block1); @@ -296,18 +295,15 @@ template void printArray(T *array, const size_t nPrintedCols, const size_t nPrintedRows, const size_t nCols, const std::string &message, size_t interval = 10) { - std::cout << std::setiosflags(std::ios::left); - std::cout << message << std::endl; + logger::println(logger::INFO, message); for (size_t i = 0; i < nPrintedRows; i++) { + logger::print(logger::INFO, ""); for (size_t j = 0; j < nPrintedCols; j++) { - std::cout << std::setw(interval) - << std::setiosflags(std::ios::fixed) - << std::setprecision(3); - std::cout << array[i * nCols + j]; + logger::print(logger::NONE, "%*.3f", interval, array[i * nCols + j]); } - std::cout << std::endl; + logger::println(logger::NONE, ""); } - std::cout << std::endl; + logger::println(logger::INFO, ""); } template @@ -319,44 +315,38 @@ void printArray(T *array, const size_t nCols, const size_t nRows, template void printLowerArray(T *array, const size_t nPrintedRows, const std::string &message, size_t interval = 10) { - std::cout << std::setiosflags(std::ios::left); - std::cout << message << std::endl; + logger::println(logger::INFO, message); int ind = 0; for (size_t i = 0; i < nPrintedRows; i++) { + logger::print(logger::INFO, ""); for (size_t j = 0; j <= i; j++) { - std::cout << std::setw(interval) - << std::setiosflags(std::ios::fixed) - << std::setprecision(3); - std::cout << array[ind++]; + logger::print(logger::NONE, "%*.3f", interval, array[ind++]); } - std::cout << std::endl; + logger::println(logger::NONE, ""); } - std::cout << std::endl; + logger::println(logger::INFO, ""); } template void printUpperArray(T *array, const size_t nPrintedCols, const size_t nPrintedRows, const size_t nCols, const std::string &message, size_t interval = 10) { - std::cout << std::setiosflags(std::ios::left); - std::cout << message << std::endl; + logger::println(logger::INFO, message); int ind = 0; for (size_t i = 0; i < nPrintedRows; i++) { + logger::print(logger::INFO, ""); for (size_t j = 0; j < i; j++) { - std::cout << " "; + logger::print(logger::NONE, " "); } for (size_t j = i; j < nPrintedCols; j++) { - std::cout << std::setw(interval) - << std::setiosflags(std::ios::fixed) - << std::setprecision(3); - std::cout << array[ind++]; + logger::print(logger::NONE, "%*.3f", interval, array[ind++]); } for (size_t j = nPrintedCols; j < nCols; j++) { ind++; } - std::cout << std::endl; + logger::println(logger::NONE, ""); } - std::cout << std::endl; + logger::println(logger::INFO, ""); } void printNumericTable(NumericTable *dataTable, const char *message = "", @@ -422,19 +412,16 @@ void printPackedNumericTable(NumericTable *dataTable, size_t nFeatures, DAAL_DATA_TYPE *data = block.getBlockPtr(); - std::cout << std::setiosflags(std::ios::left); - std::cout << message << std::endl; + logger::println(logger::INFO, message); size_t index = 0; for (size_t i = 0; i < nFeatures; i++) { + logger::print(logger::INFO, ""); for (size_t j = 0; j <= i; j++, index++) { - std::cout << std::setw(interval) - << std::setiosflags(std::ios::fixed) - << std::setprecision(3); - std::cout << data[index]; + logger::print(logger::NONE, "%*.3f", interval, data[index]); } - std::cout << std::endl; + logger::println(logger::NONE, ""); } - std::cout << std::endl; + logger::println(logger::INFO, ""); dataTable->releaseBlockOfRows(block); } @@ -468,24 +455,20 @@ void printNumericTables(NumericTable *dataTable1, NumericTable *dataTable2, type1 *data1 = block1.getBlockPtr(); type2 *data2 = block2.getBlockPtr(); - std::cout << std::setiosflags(std::ios::left); - std::cout << message << std::endl; - std::cout << std::setw(interval * nCols1) << title1; - std::cout << std::setw(interval * nCols2) << title2 << std::endl; + logger::println(logger::INFO, message); + logger::print(logger::INFO, "%*s", interval * nCols1, title1); + logger::println(logger::NONE, "%*s", interval * nCols2, title2); for (size_t i = 0; i < nRows; i++) { + logger::print(logger::INFO, ""); for (size_t j = 0; j < nCols1; j++) { - std::cout << std::setw(interval) - << std::setiosflags(std::ios::fixed) - << std::setprecision(3); - std::cout << data1[i * nCols1 + j]; + logger::print(logger::NONE, "%*.3f", interval, data1[i * nCols1 + j]); } for (size_t j = 0; j < nCols2; j++) { - std::cout << std::setprecision(0) << std::setw(interval) - << data2[i * nCols2 + j]; + logger::print(logger::NONE, "%*.0f", interval, data2[i * nCols2 + j]); } - std::cout << std::endl; + logger::println(logger::NONE, ""); } - std::cout << std::endl; + logger::println(logger::INFO, ""); dataTable1->releaseBlockOfRows(block1); dataTable2->releaseBlockOfRows(block2); @@ -523,24 +506,20 @@ void printNumericTables(NumericTable *dataTable1, NumericTable *dataTable2, DAAL_DATA_TYPE *data1 = block1.getBlockPtr(); DAAL_DATA_TYPE *data2 = block2.getBlockPtr(); - std::cout << std::setiosflags(std::ios::left); - std::cout << message << std::endl; - std::cout << std::setw(interval * nCols1) << title1; - std::cout << std::setw(interval * nCols2) << title2 << std::endl; + logger::println(logger::INFO, message); + logger::print(logger::INFO, "%*s", interval * nCols1, title1); + logger::println(logger::NONE, "%*s", interval * nCols2, title2); for (size_t i = 0; i < nRows; i++) { + logger::print(logger::INFO, ""); for (size_t j = 0; j < nCols1; j++) { - std::cout << std::setw(interval) - << std::setiosflags(std::ios::fixed) - << std::setprecision(3); - std::cout << data1[i * nCols1 + j]; + logger::print(logger::NONE, "%*.3f", interval, data1[i * nCols1 + j]); } for (size_t j = 0; j < nCols2; j++) { - std::cout << std::setprecision(0) << std::setw(interval) - << data2[i * nCols2 + j]; + logger::print(logger::NONE, "%*.0f", interval, data2[i * nCols2 + j]); } - std::cout << std::endl; + logger::println(logger::NONE, ""); } - std::cout << std::endl; + logger::println(logger::INFO, ""); dataTable1->releaseBlockOfRows(block1); dataTable2->releaseBlockOfRows(block2); @@ -568,7 +547,7 @@ bool checkFileIsAvailable(std::string filename, bool needExit = false) { if (file.good()) { return true; } else { - std::cout << "Can't open file " << filename << std::endl; + logger::println(logger::ERROR, "Can't open file %s", filename.c_str()); if (needExit) { exit(fileError); } @@ -601,20 +580,18 @@ void checkArguments(int argc, char *argv[], int count, ...) { (*filelist[i]) = argv[i + 1]; } } else { - std::cout << "Warning: Try to open default datasetFileNames" - << std::endl; + logger::println(logger::WARN, "Warning: Try to open default datasetFileNames"); for (int i = 0; i < count; i++) { checkFileIsAvailable(*(filelist[i]), true); } } } else { - std::cout << "Usage: " << argv[0] << " [ "; + logger::print(logger::INFO, "Usage: %s [ ", argv[0]); for (int i = 0; i < count; i++) { - std::cout << " "; + logger::print(logger::NONE, "", i); } - std::cout << "]" << std::endl; - std::cout << "Warning: Try to open default datasetFileNames" - << std::endl; + logger::println(logger::NONE, "]"); + logger::println(logger::WARN, "Warning: Try to open default datasetFileNames"); for (int i = 0; i < count; i++) { checkFileIsAvailable(*(filelist[i]), true); } @@ -727,11 +704,10 @@ void printALSRatings(NumericTablePtr usersOffsetTable, itemsOffset = (size_t)((block.getBlockPtr())[0]); itemsOffsetTable->releaseBlockOfRows(block); - std::cout << " User ID, Item ID, rating" << std::endl; + logger::println(logger::INFO, " User ID, Item ID, rating"); for (size_t i = 0; i < nUsers; i++) { for (size_t j = 0; j < nItems; j++) { - std::cout << i + usersOffset << ", " << j + itemsOffset << ", " - << ratingsData[i * nItems + j] << std::endl; + logger::println(logger::INFO, "%d, %d, %d", i + usersOffset, j + itemsOffset, ratingsData[i * nItems + j]); } } ratings->releaseBlockOfRows(block1);