Guest User

Untitled

a guest
Mar 20th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.80 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <chrono>
  3. #include <fstream>
  4. #include <iostream>
  5. #include <functional>
  6.  
  7. void measure(const std::string& test, std::function<void()> function)
  8. {
  9. auto start_time = std::chrono::high_resolution_clock::now();
  10.  
  11. function();
  12.  
  13. auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - start_time);
  14. std::cout<<test<<" "<<static_cast<double>(duration.count()) * 0.000001<<" ms"<<std::endl;
  15. }
  16.  
  17. #define BUFFER_SIZE (1024 * 1024 * 1024)
  18.  
  19. int main(int argc, const char * argv[])
  20. {
  21. auto buffer = new char[BUFFER_SIZE];
  22. memset(buffer, 123, BUFFER_SIZE);
  23.  
  24. measure("FILE* write", [buffer]()
  25. {
  26. FILE* file = fopen("test_file_write", "wb");
  27. fwrite(buffer, 1, BUFFER_SIZE, file);
  28. fclose(file);
  29. });
  30. measure("FILE* read", [buffer]()
  31. {
  32. FILE* file = fopen("test_file_read", "rb");
  33. fread(buffer, 1, BUFFER_SIZE, file);
  34. fclose(file);
  35. });
  36. measure("fstream write", [buffer]()
  37. {
  38. std::ofstream stream("test_stream_write", std::ios::binary);
  39. stream.write(buffer, BUFFER_SIZE);
  40. });
  41. measure("fstream read", [buffer]()
  42. {
  43. std::ifstream stream("test_stream_read", std::ios::binary);
  44. stream.read(buffer, BUFFER_SIZE);
  45. });
  46.  
  47. delete[] buffer;
  48. }
  49.  
  50. FILE* write 1388.59 ms
  51. FILE* read 1292.51 ms
  52. fstream write 3105.38 ms
  53. fstream read 3319.82 ms
  54.  
  55. $ clang++ main.cpp -std=c++11 -stdlib=libc++ -O3
  56. $ ./a.out
  57. FILE* write 1417.9 ms
  58. FILE* read 1292.59 ms
  59. fstream write 3214.02 ms
  60. fstream read 3052.56 ms
  61.  
  62. $ ./a.out
  63. FILE* write 1428.98 ms
  64. FILE* read 196.902 ms
  65. fstream write 3343.69 ms
  66. fstream read 2285.93 ms
  67.  
  68. FILE* file = fopen("test_file_write", "wb");
  69. fwrite(buffer, 1, BUFFER_SIZE, file);
  70. fclose(file);
  71.  
  72. std::ofstream stream("test_stream_write", std::ios::binary);
  73. stream.write(buffer, BUFFER_SIZE);
  74.  
  75. Running Time Self Symbol Name
  76. 3266.0ms 66.9% 0,0 std::__1::basic_ostream<char, std::__1::char_traits<char> >::write(char const*, long)
  77. 3265.0ms 66.9% 2145,0 std::__1::basic_streambuf<char, std::__1::char_traits<char> >::xsputn(char const*, long)
  78. 1120.0ms 22.9% 7,0 std::__1::basic_filebuf<char, std::__1::char_traits<char> >::overflow(int)
  79. 1112.0ms 22.7% 2,0 fwrite
  80. 1127.0ms 23.0% 0,0 fwrite
  81.  
  82. clock_gettime(CLOCK_REALTIME, {1411978373, 114560081}) = 0
  83. open("test", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
  84. writev(3, [{NULL, 0}, {""..., 1073741824}], 2) = 1073741824
  85. close(3) = 0
  86. clock_gettime(CLOCK_REALTIME, {1411978386, 376353883}) = 0
  87. write(1, "fstream write 13261.8 msn", 25fstream write 13261.8 ms) = 25
  88.  
  89. clock_gettime(CLOCK_REALTIME, {1411978386, 930326134}) = 0
  90. open("test", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
  91. write(3, ""..., 1073741824) = 1073741824
  92. clock_gettime(CLOCK_REALTIME, {1411978388, 584197782}) = 0
  93. write(1, "FILE* write 1653.87 msn", 23FILE* write 1653.87 ms) = 23
  94.  
  95. #include <sys/types.h>
  96. #include <sys/stat.h>
  97. #include <fcntl.h>
  98. #include <sys/uio.h>
  99. #include <unistd.h>
  100. #include <iostream>
  101. #include <cstdlib>
  102. #include <cstring>
  103. #include <functional>
  104. #include <chrono>
  105.  
  106. void measure(const std::string& test, std::function<void()> function)
  107. {
  108. auto start_time = std::chrono::high_resolution_clock::now();
  109.  
  110. function();
  111.  
  112. auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - start_time);
  113. std::cout<<test<<" "<<static_cast<double>(duration.count()) * 0.000001<<" ms"<<std::endl;
  114. }
  115.  
  116. #define BUFFER_SIZE (1024 * 1024 * 1024)
  117.  
  118.  
  119. int main()
  120. {
  121. auto buffer = new char[BUFFER_SIZE];
  122. memset(buffer, 0, BUFFER_SIZE);
  123.  
  124. measure("writev", [buffer]()
  125. {
  126. int fd = open("test", O_CREAT|O_WRONLY);
  127. struct iovec vec[] =
  128. {
  129. { NULL, 0 },
  130. { (void *)buffer, BUFFER_SIZE }
  131. };
  132. writev(fd, vec, sizeof(vec)/sizeof(vec[0]));
  133. close(fd);
  134. });
  135.  
  136. measure("write", [buffer]()
  137. {
  138. int fd = open("test", O_CREAT|O_WRONLY);
  139. write(fd, buffer, BUFFER_SIZE);
  140. close(fd);
  141. });
  142. }
  143.  
  144. #include <sys/types.h>
  145. #include <sys/stat.h>
  146. #include <fcntl.h>
  147. #include <sys/uio.h>
  148. #include <unistd.h>
  149. #include <iostream>
  150. #include <cstdlib>
  151. #include <cstring>
  152. #include <functional>
  153. #include <chrono>
  154.  
  155. void measure(const std::string& test, std::function<void()> function)
  156. {
  157. auto start_time = std::chrono::high_resolution_clock::now();
  158.  
  159. function();
  160.  
  161. auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - start_time);
  162. std::cout<<test<<" "<<static_cast<double>(duration.count()) * 0.000001<<" ms"<<std::endl;
  163. }
  164.  
  165. #define BUFFER_SIZE (1024 * 1024 * 1024)
  166.  
  167.  
  168. int main()
  169. {
  170. auto buffer = new char[BUFFER_SIZE];
  171. memset(buffer, 0, BUFFER_SIZE);
  172.  
  173. measure("writev", [buffer]()
  174. {
  175. int fd = open("test", O_CREAT|O_WRONLY, 0660);
  176. struct iovec vec[] =
  177. {
  178. { NULL, 0 },
  179. { (void *)buffer, BUFFER_SIZE }
  180. };
  181. writev(fd, vec, sizeof(vec)/sizeof(vec[0]));
  182. close(fd);
  183. });
  184.  
  185. measure("write", [buffer]()
  186. {
  187. int fd = open("test", O_CREAT|O_WRONLY, 0660);
  188. write(fd, buffer, BUFFER_SIZE);
  189. close(fd);
  190. });
  191. }
  192.  
  193. measure("fstream write (new)", [buffer]()
  194. {
  195. std::ofstream* stream = new std::ofstream("test", std::ios::binary);
  196. stream->write(buffer, BUFFER_SIZE);
  197. // Intentionally no delete.
  198. });
  199.  
  200. const int MySize = 1024*1024;
  201. char MrBuf[MySize];
  202. stream.rdbuf()->pubsetbuf(MrBuf, MySize);
  203.  
  204. const int MySize = 1024*1024;
  205. if (!setvbuf ( file , NULL , _IOFBF , MySize ))
  206. DieInDisgrace();
  207.  
  208. const size_t bufsize = 256*1024;
  209. char buf[bufsize];
  210. mystream.rdbuf()->pubsetbuf(buf, bufsize);
Add Comment
Please, Sign In to add comment