| 
														
															@@ -41,6 +41,13 @@ using socket_t = boost::asio::ip::tcp::socket; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 using namespace std;
 
														 | 
														
														 | 
														
															 using namespace std;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
 
														 | 
														
														 | 
														
															  
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+size_t communication_cost_dep_read = 0;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+size_t communication_cost_write    = 0;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+size_t communication_cost_ind_read = 0;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+double dependent_read_time = 0.0;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+double write_time = 0.0;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 auto generate_cancelation_terms(int8_t c0[], int8_t d1[], size_t db_nitems, size_t rotate_by = 0)
 
														 | 
														
														 | 
														
															 auto generate_cancelation_terms(int8_t c0[], int8_t d1[], size_t db_nitems, size_t rotate_by = 0)
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 {
 
														 | 
														
														 | 
														
															 {
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															    DB_t Z0 =  dot_product_with_bool(X0, d1, db_nitems, rotate_by);
 
														 | 
														
														 | 
														
															    DB_t Z0 =  dot_product_with_bool(X0, d1, db_nitems, rotate_by);
 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -157,6 +164,7 @@ int main(int argc, char* argv[]) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
 
														 | 
														
														 | 
														
															  
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															    for(size_t i = 0; i < number_of_accesses; ++i)
 
														 | 
														
														 | 
														
															    for(size_t i = 0; i < number_of_accesses; ++i)
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															    {
 
														 | 
														
														 | 
														
															    {
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    auto start_writes = std::chrono::steady_clock::now();
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      for(size_t w = 0; w < number_of_ind_writes; ++w)
 
														 | 
														
														 | 
														
															      for(size_t w = 0; w < number_of_ind_writes; ++w)
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      {
 
														 | 
														
														 | 
														
															      {
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															        read_flags_for_refreshing(db_nitems);
 
														 | 
														
														 | 
														
															        read_flags_for_refreshing(db_nitems);
 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -171,6 +179,8 @@ int main(int argc, char* argv[]) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															        boost::asio::read(sockets_1[0], boost::asio::buffer(&WriteP1_recv[w],  sizeof(DuORAM_Write)));
 
														 | 
														
														 | 
														
															        boost::asio::read(sockets_1[0], boost::asio::buffer(&WriteP1_recv[w],  sizeof(DuORAM_Write)));
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															        boost::asio::write(sockets_0[1], boost::asio::buffer(&Gamma0_[w], sizeof(DB_t))); 
 
														 | 
														
														 | 
														
															        boost::asio::write(sockets_0[1], boost::asio::buffer(&Gamma0_[w], sizeof(DB_t))); 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															        boost::asio::write(sockets_1[1], boost::asio::buffer(&Gamma1_[w], sizeof(DB_t)));
 
														 | 
														
														 | 
														
															        boost::asio::write(sockets_1[1], boost::asio::buffer(&Gamma1_[w], sizeof(DB_t)));
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+       communication_cost_write += sizeof(DB_t);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+       communication_cost_write += sizeof(DB_t);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															        boost::asio::read(sockets_0[2], boost::asio::buffer(&update_message0[w],  sizeof(DB_t))); 
 
														 | 
														
														 | 
														
															        boost::asio::read(sockets_0[2], boost::asio::buffer(&update_message0[w],  sizeof(DB_t))); 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															        boost::asio::read(sockets_1[2], boost::asio::buffer(&update_message1[w],  sizeof(DB_t)));
 
														 | 
														
														 | 
														
															        boost::asio::read(sockets_1[2], boost::asio::buffer(&update_message1[w],  sizeof(DB_t)));
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															        
 
														 | 
														
														 | 
														
															        
 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -191,6 +201,11 @@ int main(int argc, char* argv[]) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															        #endif
 
														 | 
														
														 | 
														
															        #endif
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      }
 
														 | 
														
														 | 
														
															      }
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+   auto end_writes = std::chrono::steady_clock::now();
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+   std::chrono::duration<double> elapsed_seconds_writes = end_writes - start_writes;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+   write_time = elapsed_seconds_writes.count();
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    auto start_ind_reads = std::chrono::steady_clock::now();
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      DB_t * Gamma0_reads = new DB_t[number_of_ind_reads];
 
														 | 
														
														 | 
														
															      DB_t * Gamma0_reads = new DB_t[number_of_ind_reads];
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      DB_t * Gamma1_reads = new DB_t[number_of_ind_reads];
 
														 | 
														
														 | 
														
															      DB_t * Gamma1_reads = new DB_t[number_of_ind_reads];
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -216,7 +231,12 @@ int main(int argc, char* argv[]) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      boost::asio::write(sockets_0[4], boost::asio::buffer(Gamma0_reads, number_of_ind_reads * sizeof(DB_t)));  
 
														 | 
														
														 | 
														
															      boost::asio::write(sockets_0[4], boost::asio::buffer(Gamma0_reads, number_of_ind_reads * sizeof(DB_t)));  
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      boost::asio::write(sockets_1[4], boost::asio::buffer(Gamma1_reads, number_of_ind_reads * sizeof(DB_t)));
 
														 | 
														
														 | 
														
															      boost::asio::write(sockets_1[4], boost::asio::buffer(Gamma1_reads, number_of_ind_reads * sizeof(DB_t)));
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+     communication_cost_ind_read += number_of_ind_reads * sizeof(DB_t);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+     communication_cost_ind_read += number_of_ind_reads * sizeof(DB_t);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    auto end_ind_reads = std::chrono::steady_clock::now();
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    std::chrono::duration<double> elapsed_seconds_ind_reads = end_ind_reads - start_ind_reads;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    auto start_dep_reads = std::chrono::steady_clock::now();
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      for(size_t d = 0; d < number_of_dep_reads; ++d)
 
														 | 
														
														 | 
														
															      for(size_t d = 0; d < number_of_dep_reads; ++d)
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      {  
 
														 | 
														
														 | 
														
															      {  
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															        size_t shifts0, shifts1, rotate;
 
														 | 
														
														 | 
														
															        size_t shifts0, shifts1, rotate;
 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -229,9 +249,22 @@ int main(int argc, char* argv[]) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															        auto [Gamma0, Gamma1] =   generate_cancelation_terms(reading_c, reading_d, db_nitems, rotate);
 
														 | 
														
														 | 
														
															        auto [Gamma0, Gamma1] =   generate_cancelation_terms(reading_c, reading_d, db_nitems, rotate);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															        boost::asio::write(sockets_0[6], boost::asio::buffer(&Gamma0, sizeof(Gamma0)));  
 
														 | 
														
														 | 
														
															        boost::asio::write(sockets_0[6], boost::asio::buffer(&Gamma0, sizeof(Gamma0)));  
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															        boost::asio::write(sockets_1[6], boost::asio::buffer(&Gamma1, sizeof(Gamma1)));
 
														 | 
														
														 | 
														
															        boost::asio::write(sockets_1[6], boost::asio::buffer(&Gamma1, sizeof(Gamma1)));
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+       communication_cost_dep_read += sizeof(Gamma0);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+       communication_cost_dep_read += sizeof(Gamma1);
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      }
 
														 | 
														
														 | 
														
															      }
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    auto end_dep_reads = std::chrono::steady_clock::now();
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    std::chrono::duration<double> elapsed_seconds_dep_reads = end_dep_reads - start_dep_reads;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    dependent_read_time = elapsed_seconds_dep_reads.count();
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   }
 
														 | 
														
														 | 
														
															   }
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+std::cout << "write_time = " << write_time << std::endl;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+std::cout << "communication_cost_writes = " << communication_cost_write << " bytes" << std::endl; 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ std::cout << "dependent_read_time =  " << dependent_read_time << std::endl;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ std::cout << "communication_cost_dep_read = " << communication_cost_dep_read << " bytes" << std::endl; 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ std::cout << "interleaved_time =  " << dependent_read_time + write_time  << std::endl;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ std::cout << "communication_cost_interleaved = " << (communication_cost_dep_read + communication_cost_write) << " bytes" << std::endl; 
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   return 0;
 
														 | 
														
														 | 
														
															   return 0;
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 }
 
														 | 
														
														 | 
														
															 }
 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
 
														 | 
														
														 | 
														
															 
 
														 |