avadapal 1 рік тому
батько
коміт
0f7cb2030c
2 змінених файлів з 54 додано та 33 видалено
  1. 30 9
      duoram-online/duoram.cpp
  2. 24 24
      duoram-online/readvectors.h

+ 30 - 9
duoram-online/duoram.cpp

@@ -23,6 +23,9 @@ using namespace std::chrono;
 using namespace std;
 using socket_t = boost::asio::ip::tcp::socket;
 
+size_t communication_cost_dep_read = 0;
+size_t communication_cost_write    = 0;
+size_t communication_cost_ind_read = 0;
 #include "prg.h"
 #include "prg_aes_impl.h"
 #include "block.h"  
@@ -32,6 +35,10 @@ using socket_t = boost::asio::ip::tcp::socket;
 #include "duoram-refresh.h"
 #include "duoram-write.h"
 
+double dependent_read_time = 0.0;
+double write_time = 0.0;
+double interleaved_time = 0.0;
+
 void accept_conncections_from_Pb(boost::asio::io_context&io_context, std::vector<socket_t>& sockets_, int port, size_t j)
 {
   tcp::acceptor acceptor_a(io_context, tcp::endpoint(tcp::v4(), port));
@@ -89,7 +96,7 @@ int main(const int argc, const char * argv[])
  		 sockets_.emplace_back(std::move(emptysocket));
   }
 	 sockets_.reserve(number_of_sockets + 1);
- 	printf("number_of_sockets = %zu\n", number_of_sockets);
+ 	//printf("number_of_sockets = %zu\n", number_of_sockets);
 
 	 std::vector<socket_t> sockets_2;
 
@@ -286,7 +293,8 @@ int main(const int argc, const char * argv[])
       boost::asio::write(sockets_2[2], boost::asio::buffer(&update_message[w],  sizeof(DB_t)));
       boost::asio::write(sockets_[2], boost::asio::buffer(&update_message[w], sizeof(DB_t)));
       boost::asio::read(sockets_[2], boost::asio::buffer(&CW[w], sizeof(DB_t)));
-       
+     
+
       CW[w] = CW[w] + update_message[w];
 
       #ifdef VERBOSE
@@ -299,7 +307,7 @@ int main(const int argc, const char * argv[])
     {			
      /*The definition of DuoramUpdate appears in duoram-write.h*/  	 
      DuoramUpdate(party,  db_nitems,  rotate_by_[w],  DB, updated_DB, writing_b, b,  CW[w],  update_message[w],  writing_c, writing_d, c, d);
-     
+      communication_cost_write += 9 * sizeof(DB_t);
      #ifdef DEBUG		
       #ifdef ThreeParty
        /*The definition debug_ appears in duoram-utils.h*/  
@@ -310,8 +318,9 @@ int main(const int argc, const char * argv[])
 
    auto end_writes = std::chrono::steady_clock::now();
    std::chrono::duration<double> elapsed_seconds_writes = end_writes - start_writes;
-   printf("elapsed_seconds_writes = %f\n",elapsed_seconds_writes.count());
-   
+   write_time = elapsed_seconds_writes.count();
+   // printf("elapsed_seconds_writes = %f\n",elapsed_seconds_writes.count());
+   // std::cout << "communication_cost_writes = " << communication_cost_write << std::endl; 
    #ifdef VERBOSE
     std::cout << "Reconstructing the database after doing " << number_of_writes << " writes " << std::endl;
     reconstruct_database(sockets_[0],  DB, db_nitems);
@@ -359,7 +368,7 @@ int main(const int argc, const char * argv[])
 
     auto end_ind_reads = std::chrono::steady_clock::now();
     std::chrono::duration<double> elapsed_seconds_ind_reads = end_ind_reads - start_ind_reads;
-    printf("elapsed_seconds_ind_reads = %f\n",elapsed_seconds_ind_reads.count());
+    //printf("elapsed_seconds_ind_reads = %f\n",elapsed_seconds_ind_reads.count());
 
     #ifdef VERBOSE
     std::cout << std::endl << std::endl << "============== INDEPENDENT READS END  ==============" << std::endl << std::endl;
@@ -374,6 +383,8 @@ int main(const int argc, const char * argv[])
     for(size_t r = 0; r < number_of_dep_reads; ++r)
     {
       read_out_dependent_reads[r] = DuoramRead(party, db_nitems, ri, where_to_read_dependent[r], sockets_2[5], sockets_2[6], sockets_[5]);
+      communication_cost_dep_read += sizeof(DB_t);
+      communication_cost_dep_read += sizeof(DB_t);
       #ifdef VERBOSE
        std::cout << "dependent read (share) " << r << " -> " << read_out_dependent_reads[r] << std::endl;	
        std::cout << print_reconstruction(sockets_[0], read_out_dependent_reads[r]) << std::endl;
@@ -382,8 +393,9 @@ int main(const int argc, const char * argv[])
     
     auto end_dep_reads = std::chrono::steady_clock::now();
     std::chrono::duration<double> elapsed_seconds_dep_reads = end_dep_reads - start_dep_reads;
-    printf("elapsed_seconds_dep_reads = %f\n",elapsed_seconds_dep_reads.count()); 
-
+    dependent_read_time = elapsed_seconds_dep_reads.count();
+    // printf("elapsed_seconds_dep_reads = %f\n",elapsed_seconds_dep_reads.count()); 
+    // std::cout << "communication_cost_dep_read = " << communication_cost_dep_read << std::endl;
     #ifdef VERBOSE
      std::cout << std::endl << std::endl << "============== DEPENDENT READS END  ==============" << std::endl << std::endl;
     #endif
@@ -392,8 +404,17 @@ int main(const int argc, const char * argv[])
 
 auto end_total = std::chrono::steady_clock::now();
 std::chrono::duration<double> elapsed_seconds_total = end_total - start_total;
-printf("elapsed_seconds_total = %f\n",elapsed_seconds_total.count());
+//printf("elapsed_seconds_total = %f\n",elapsed_seconds_total.count());
+
+std::cout << "write_time = " << write_time << std::endl;
+std::cout << "communication_cost_writes = " << communication_cost_write/1024 << " KiB" << std::endl; 
 
+#ifdef ThreeParty
+ std::cout << "dependent_read_time =  " << dependent_read_time << std::endl;
+ std::cout << "communication_cost_dep_read = " << communication_cost_dep_read/1024 << " KiB" << std::endl; 
+ std::cout << "interleaved_read_time =  " << dependent_read_time + write_time  << std::endl;
+ std::cout << "communication_cost_interleaved = " << (communication_cost_dep_read + communication_cost_write)/1024 << " KiB" << std::endl; 
+#endif
 free(reading_temp);
 
 	return 0;

+ 24 - 24
duoram-online/readvectors.h

@@ -58,17 +58,17 @@ int read_flags_for_reading(bool party, size_t db_nitems, int i = 0)
    char tmp[100];
    concatanate_index("../duoram-online/preprocflags/party0_read_flags_b", tmp, i);
 	 	int const in0 { open(tmp, O_RDONLY ) };
-	 	size_t r = read(in0, reading_b,  db_nitems * sizeof(reading_b[0]));	
+	 	size_t r = read(in0, reading_b,  sizeof(reading_b));	
    if(r < 0) perror("Read error");
   
    concatanate_index("../duoram-online/preprocflags/party0_read_flags_c", tmp, i);
    int const in1 { open( tmp, O_RDONLY ) };
-	 	r = read(in1, reading_c,  db_nitems * sizeof(reading_c[0]));
+	 	r = read(in1, reading_c,  sizeof(reading_c));
    if(r < 0) perror("Read error");
 
    concatanate_index("../duoram-online/preprocflags/party0_read_flags_d", tmp, i);
 	  int const in2 { open( tmp, O_RDONLY ) };
-	  r = read(in2, reading_d,  db_nitems * sizeof(reading_d[0]));	
+	  r = read(in2, reading_d,  sizeof(reading_d));	
    if(r < 0) perror("Read error");
 	}
 
@@ -78,17 +78,17 @@ int read_flags_for_reading(bool party, size_t db_nitems, int i = 0)
   
    concatanate_index("../duoram-online/preprocflags/party1_read_flags_b", tmp, i);
 		 int const in0 { open(tmp, O_RDONLY ) };
-	 	size_t r = read(in0, reading_b,  db_nitems * sizeof(reading_b[0]));	
+	 	size_t r = read(in0, reading_b,  sizeof(reading_b));	
 	 	if(r < 0) perror("Read error");
 
    concatanate_index("../duoram-online/preprocflags/party1_read_flags_c", tmp, i);
  	 int const in1 { open(tmp, O_RDONLY ) };
-		 r = read(in1, reading_c,  db_nitems * sizeof(reading_c[0]));
+		 r = read(in1, reading_c,  sizeof(reading_c));
 		 if(r < 0) perror("Read error");
     
    concatanate_index("../duoram-online/preprocflags/party1_read_flags_d", tmp, i);
 		 int const in2 { open(tmp, O_RDONLY ) };
-		 r = read(in2, reading_d,  db_nitems * sizeof(reading_d[0]));	
+		 r = read(in2, reading_d,  sizeof(reading_d));	
    if(r < 0) perror("Read error");
 }
 
@@ -103,17 +103,17 @@ int read_flags_for_writing(bool party, size_t db_nitems, int i = 0)
     char tmp[100];
     concatanate_index("../duoram-online/preprocflags/party0_write_flags_b", tmp, i);
 	   int const in0_w { open(tmp, O_RDONLY ) };
-    size_t r = read(in0_w, writing_b,  db_nitems * sizeof(writing_b[0]));	
+    size_t r = read(in0_w, writing_b,  sizeof(writing_b));	
     if(r < 0) perror("Read error");
 
     concatanate_index("../duoram-online/preprocflags/party0_write_flags_c", tmp,i);	   
 	   int const in1_w { open( tmp, O_RDONLY ) };
-    r = read(in1_w, writing_c,  db_nitems * sizeof(writing_c[0]));
+    r = read(in1_w, writing_c,  sizeof(writing_c));
     if(r < 0) perror("Read error");
 	
     concatanate_index("../duoram-online/preprocflags/party0_write_flags_d", tmp,i);
 	   int const in2_w { open( tmp, O_RDONLY ) };
-   	r = read(in2_w, writing_d,  db_nitems * sizeof(writing_d[0]));	
+   	r = read(in2_w, writing_d,  sizeof(writing_d));	
     if(r < 0) perror("Read error");
 	}
 
@@ -122,17 +122,17 @@ int read_flags_for_writing(bool party, size_t db_nitems, int i = 0)
    char tmp[100];
    concatanate_index("../duoram-online/preprocflags/party1_write_flags_b", tmp,i);
  		int const in0_w { open( tmp, O_RDONLY ) };
-	 	size_t r = read(in0_w, writing_b,  db_nitems * sizeof(writing_b[0]));	
+	 	size_t r = read(in0_w, writing_b,  sizeof(writing_b));	
 	 	if(r < 0) perror("Read error");
 
    concatanate_index("../duoram-online/preprocflags/party1_write_flags_c", tmp, i);
    int const in1_w { open(tmp, O_RDONLY ) };
-		 r = read(in1_w, writing_c,  db_nitems * sizeof(writing_c[0]));
+		 r = read(in1_w, writing_c,  sizeof(writing_c));
    if(r < 0) perror("Read error");
 
 		 concatanate_index("../duoram-online/preprocflags/party1_write_flags_d", tmp, i);
 		 int const in2_w { open( tmp, O_RDONLY ) };
-		 r = read(in2_w, writing_d,  db_nitems * sizeof(writing_d[0]));	
+		 r = read(in2_w, writing_d,  sizeof(writing_d));	
 	  if(r < 0) perror("Read error");
 	}
 
@@ -144,22 +144,22 @@ int read_flags_for_writing(bool party, size_t db_nitems, int i = 0)
    char tmp[100];
    concatanate_index("../duoram-online/preprocflags/P2_party0_write_flags_c", tmp, i);
    int const in1_w { open(tmp, O_RDONLY ) };
-   size_t r = read(in1_w, writing_c,  db_nitems * sizeof(writing_c[0]));
+   size_t r = read(in1_w, writing_c,  sizeof(writing_c));
    if(r < 0) perror("Read error");
    
    concatanate_index("../duoram-online/preprocflags/P2_party1_write_flags_d", tmp, i);
    int const in2_w { open(tmp, O_RDONLY ) };
-   r = read(in2_w, writing_d,  db_nitems * sizeof(writing_d[0])); 
+   r = read(in2_w, writing_d,  sizeof(writing_d)); 
    if(r < 0) perror("Read error");
 
    concatanate_index("../duoram-online/preprocflags/P2_party0_write_c", tmp, i);
    int const in1_w_ { open(tmp, O_RDONLY ) };
-   r = read(in1_w_, c,  db_nitems * sizeof(c[0]));
+   r = read(in1_w_, c,  sizeof(c));
    if(r < 0) perror("Read error");
    
    concatanate_index("../duoram-online/preprocflags/P2_party1_write_d", tmp, i);
    int const in2_w_ { open(tmp, O_RDONLY ) };
-   r = read(in2_w_, d,  db_nitems * sizeof(d[0]));  
+   r = read(in2_w_, d,  sizeof(d));  
    if(r < 0) perror("Read error");
 
    return 0;
@@ -170,12 +170,12 @@ int read_flags_for_generating_cancellation_terms(size_t db_nitems, int i = 0)
   char tmp[100];
   concatanate_index("../duoram-online/preprocflags/P2_party1_read_flags_d", tmp, i);
   int const in2 { open(tmp, O_RDONLY ) };
-  size_t r = read(in2, reading_d,  db_nitems * sizeof(reading_d[0])); 
+  size_t r = read(in2, reading_d,  sizeof(reading_d)); 
   if(r < 0) perror("Read error");
 
   concatanate_index("../duoram-online/preprocflags/P2_party0_read_flags_c", tmp, i);
   int const in2_ { open(tmp, O_RDONLY ) };
-  r = read(in2_, reading_c,  db_nitems * sizeof(reading_c[0])); 
+  r = read(in2_, reading_c,  sizeof(reading_c)); 
   if(r < 0) perror("Read error");
    
   return 0;
@@ -189,17 +189,17 @@ int read_flags_for_updating(bool party, size_t db_nitems, int i = 0)
 	{
   concatanate_index("../duoram-online/preprocflags/party0_write_b", tmp, i);
 		int const in0_w_ { open(tmp, O_RDONLY ) };
-		size_t r = read(in0_w_, b,  db_nitems * sizeof(b[0]));	
+		size_t r = read(in0_w_, b,  sizeof(b));	
 	 if(r < 0) perror("Read error");
  	
   concatanate_index("../duoram-online/preprocflags/party0_write_c", tmp, i);
   int const in1_w_ { open(tmp, O_RDONLY ) };
-		r = read(in1_w_, c,  db_nitems * sizeof(c[0]));
+		r = read(in1_w_, c,  sizeof(c));
   if(r < 0) perror("Read error");
 
   concatanate_index("../duoram-online/preprocflags/party0_write_d", tmp, i); 
   int const in2_w_ { open(tmp, O_RDONLY ) };
-	 r = read(in2_w_, d,  db_nitems * sizeof(d[0]));	
+	 r = read(in2_w_, d,  sizeof(d));	
   if(r < 0) perror("Read error");
 	}
 
@@ -207,17 +207,17 @@ int read_flags_for_updating(bool party, size_t db_nitems, int i = 0)
 	{
   concatanate_index("../duoram-online/preprocflags/party1_write_b", tmp, i);
  	int const in0_w_ { open( tmp, O_RDONLY ) };
-	 size_t r = read(in0_w_, b,  db_nitems * sizeof(b[0]));	
+	 size_t r = read(in0_w_, b,  sizeof(b));	
   if(r < 0) perror("Read error");
  	
   concatanate_index("../duoram-online/preprocflags/party1_write_c", tmp, i);
   int const in1_w_ { open(tmp, O_RDONLY ) };
-		r = read(in1_w_, c,  db_nitems * sizeof(c[0]));
+		r = read(in1_w_, c,  sizeof(c));
   if(r < 0) perror("Read error");
 
   concatanate_index("../duoram-online/preprocflags/party1_write_d", tmp, i); 	
   int const in2_w_ { open(tmp, O_RDONLY ) };
-		 r = read(in2_w_, d,  db_nitems * sizeof(d[0]));	
+		 r = read(in2_w_, d,  sizeof(d));	
   if(r < 0) perror("Read error");
 	}