diff --git a/common/cpp/CMakeLists.txt b/common/cpp/CMakeLists.txt index 1549c800f3fb0c0b0296ce96ea42b6f6725d51e9..9fef72369fe9e54a7a690a3582b413860c83b879 100644 --- a/common/cpp/CMakeLists.txt +++ b/common/cpp/CMakeLists.txt @@ -15,6 +15,7 @@ ENDIF(WIN32) ################################ # Library ################################ +#add_library(${TARGET_NAME} SHARED STATIC ${SOURCE_FILES}) add_library(${TARGET_NAME} SHARED ${SOURCE_FILES}) target_include_directories(${TARGET_NAME} PUBLIC include) set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX) diff --git a/examples/worker/process_folder/CMakeLists.txt b/examples/worker/process_folder/CMakeLists.txt index 69cf5a904c745a10e2f6dbf79b2f7005a975a6aa..d7719be06f14c67ada8e8a95319f59eeaabd61f2 100644 --- a/examples/worker/process_folder/CMakeLists.txt +++ b/examples/worker/process_folder/CMakeLists.txt @@ -5,6 +5,11 @@ set(SOURCE_FILES process_folder.cpp) ################################ # Executable and link ################################ +if (CMAKE_BUILD_TYPE STREQUAL "Release") +set(CMAKE_FIND_STATIC FIRST) +endif() add_executable(${TARGET_NAME} ${SOURCE_FILES}) target_link_libraries(${TARGET_NAME} common worker-api pthread) set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX) +#set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS "-static-libstdc++") + diff --git a/examples/worker/process_folder/process_folder.cpp b/examples/worker/process_folder/process_folder.cpp index b75d18bfcbd95ee2dc5e75e8c7150a3cf5381dfa..6f84a61218c2354af0b04dd130b6168f9e6b463d 100644 --- a/examples/worker/process_folder/process_folder.cpp +++ b/examples/worker/process_folder/process_folder.cpp @@ -6,23 +6,27 @@ #include <chrono> #include <iomanip> - - #include "worker/data_broker.h" using hidra2::WorkerErrorCode; using std::chrono::high_resolution_clock; - -int main(int argc, char* argv[]) { - +struct Statistics { + std::chrono::milliseconds duration_scan; + std::chrono::milliseconds duration_read; + int nfiles; + double size_gb; + double bandwidth; +}; +std::string ProcessCommandArguments(int argc, char* argv[]){ if (argc != 2) { std::cout << "Usage: " + std::string{argv[0]} +" <path to folder>" << std::endl; abort(); } + return argv[1]; +} - std::string folder{argv[1]}; - +std::unique_ptr<hidra2::DataBroker> CreateBroker(const std::string& folder){ hidra2::WorkerErrorCode err; auto broker = hidra2::DataBrokerFactory::Create(folder, &err); if (err != WorkerErrorCode::OK) { @@ -30,35 +34,63 @@ int main(int argc, char* argv[]) { abort(); } + return broker; +} + +void ConnectToBrocker(std::unique_ptr<hidra2::DataBroker>* broker,Statistics* statistics){ + hidra2::WorkerErrorCode err; high_resolution_clock::time_point t1 = high_resolution_clock::now(); - err = broker->Connect(); + err = (*broker)->Connect(); if (err != WorkerErrorCode::OK) { std::cout << "Cannot connect to broker" << std::endl; abort(); } high_resolution_clock::time_point t2 = high_resolution_clock::now(); - auto duration_scan = std::chrono::duration_cast<std::chrono::milliseconds>( t2 - t1 ).count(); - + statistics->duration_scan = std::chrono::duration_cast<std::chrono::milliseconds>( t2 - t1 ); +} +void ReadAllData(std::unique_ptr<hidra2::DataBroker>* broker,Statistics* statistics){ + hidra2::WorkerErrorCode err; hidra2::FileInfo file_info; hidra2::FileData file_data; + high_resolution_clock::time_point t1 = high_resolution_clock::now(); int nfiles = 0; uint64_t size = 0; - while ((err = broker->GetNext(&file_info, &file_data)) == WorkerErrorCode::OK) { + while ((err = (*broker)->GetNext(&file_info, &file_data)) == WorkerErrorCode::OK) { nfiles++; size += file_info.size; } - high_resolution_clock::time_point t3 = high_resolution_clock::now(); - auto duration_read = std::chrono::duration_cast<std::chrono::milliseconds>( t3 - t2 ).count(); + if (err!=WorkerErrorCode::NO_DATA){ + std::cout << "Read error" << std::endl; + abort(); + } + + high_resolution_clock::time_point t2 = high_resolution_clock::now(); + statistics->nfiles = nfiles; + statistics->size_gb = double(size) / 1024 / 1024 / 1024; + statistics->duration_read=std::chrono::duration_cast<std::chrono::milliseconds>( t2 - t1 ); + statistics->bandwidth = statistics->size_gb/statistics->duration_read.count()*1000; +} + + +void PrintStatistics(const Statistics& statistics){ + std::cout << "Processed " << statistics.nfiles << " files" << std::endl; + std::cout << "Total size: " << std::setprecision(2) << statistics.size_gb << "GB" << std::endl; + std::cout << "Elapsed scan : " << statistics.duration_scan.count() << "ms" << std::endl; + std::cout << "Elapsed read : " << statistics.duration_read.count() << "ms" << std::endl; + std::cout << "Bandwidth: " << std::setprecision(2) << statistics.bandwidth << "GB/sec" << std::endl; +} + + +int main(int argc, char* argv[]) { + std::string folder = ProcessCommandArguments(argc,argv); + auto broker = CreateBroker(folder); - double size_gb = double(size) / 1024 / 1024 / 1024; - double bandwidth = size_gb/duration_read*1000; - std::cout << "Processed " << nfiles << " files" << std::endl; - std::cout << "Total size: " << std::setprecision(2) << size_gb << "GB" << std::endl; - std::cout << "Elapsed scan : " << duration_scan << "ms" << std::endl; - std::cout << "Elapsed read : " << duration_read << "ms" << std::endl; - std::cout << "Bandwidth: " << std::setprecision(2) << bandwidth << "GB/sec" << std::endl; + Statistics statistics; + ConnectToBrocker(&broker,&statistics); + ReadAllData(&broker,&statistics); + PrintStatistics(statistics); return 0; } diff --git a/worker/api/cpp/CMakeLists.txt b/worker/api/cpp/CMakeLists.txt index b999d879c9b0dd4a7d8da7d496cd331caf5a157c..bb138ff79884ed7a8e66acc2d3a33eea849b6cda 100644 --- a/worker/api/cpp/CMakeLists.txt +++ b/worker/api/cpp/CMakeLists.txt @@ -7,6 +7,8 @@ set(SOURCE_FILES include/worker/data_broker.h src/data_broker.cpp src/folder_dat # Library ################################ add_library(${TARGET_NAME} SHARED ${SOURCE_FILES}) +#add_library(${TARGET_NAME} SHARED STATIC ${SOURCE_FILES}) + target_include_directories(${TARGET_NAME} PUBLIC include) target_link_libraries(${TARGET_NAME} common) set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)