C++執行內存memcpy的效率測試


 

在進行memcpy操作時,雖然是內存操作,但是仍然是耗一點點CPU的,今天測試了一下單線程中執行memcpy的效率,這個結果對於配置TCP epoll中的work thread

數量有指導意義。如下基於8K的內存快執行memcpy, 1個線程大約1S能夠拷貝500M,如果服務器帶寬或網卡到上限是1G,那么網絡io的work thread 開2個即可,考慮到消息的解析損耗,3個線程足以抗住硬件的最高負載。

在我到測試機器上到測試結果是:

Intel(R) Xeon(R) CPU           E5405  @ 2.00GHz

do memcpy speed:12.27 ms/MB
each thread can do memcpy 667.645 MB

 

 1 #include <iostream>
2 #include <sys/time.h>
3 #include <string.h>
4
5 using namespace std;
6
7 int main(int argc, char* argv[])
8 {
9 long len = 8192;
10 int loop = 200;
11 char* p = new char[len];
12 char* q = p;
13 struct timeval start, end;
14 gettimeofday(&start, NULL);
15 for (int i =0; i < loop; ++i)
16 {
17 char* p = new char[len];
18 *p = char(i);
19 memcpy(p, q, len);
20 delete [] p;
21 }
22 gettimeofday(&end, NULL);
23 cout <<"do memcpy speed:" << ((end.tv_sec - start.tv_sec)*1000 + double(end.tv_usec - start.tv_usec) / (len*loop/1000/1000) ) / loop<<" ms/MB\n";
24 cout <<"each thread can do memcpy "<< double(len)*loop/1000/1000 / ((end.tv_sec - start.tv_sec) + double(end.tv_usec - start.tv_usec) / 1000/1000) <<" MB\n";
25
26 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM