小编Chr*_*ian的帖子

如何在Linux系统上以编程方式清除C++中的文件系统内存缓存?

我正在用C++编写一个基准测试工具,我希望在实验之间清除文件系统内存缓存.我知道以下控制台命令:

sync
echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在C++中直接以编程方式执行此操作?

任何帮助表示赞赏!

c c++ linux caching

7
推荐指数
2
解决办法
6330
查看次数

C++套接字编程:最大化localhost上的吞吐量/带宽(我只获得3 Gbit/s而不是23GBit/s)

我想创建一个C++服务器/客户端,通过我的localhost上的TCP套接字通信最大化吞吐量.作为准备,我使用iperf找出i7 MacBookPro上的最大带宽.

------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:  256 KByte (default)
------------------------------------------------------------
[  4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 51583
[  4]  0.0-120.0 sec   329 GBytes  23.6 Gbits/sec
Run Code Online (Sandbox Code Playgroud)

没有任何调整,ipref告诉我,我可以达到至少23.2 GBit/s.然后我做了我自己的C++服务器/客户端实现,你可以在这里找到完整的代码:https://gist.github.com/1116635

我的代码我基本上每次读/写操作传输一个1024bytes的int数组.所以我在服务器上的发送循环如下所示:

   int n;

   int x[256];

   //fill int array
   for (int i=0;i<256;i++)
   {
       x[i]=i;
   }

   for (int i=0;i<(4*1024*1024);i++)
   {
       n = write(sock,x,sizeof(x));
       if (n < 0) error("ERROR writing to socket");
   }
Run Code Online (Sandbox Code Playgroud)

我在客户端上的接收循环如下所示:

int x[256]; 

for (int i=0;i<(4*1024*1024);i++)
{
    n …
Run Code Online (Sandbox Code Playgroud)

c++ sockets bandwidth throughput

4
推荐指数
2
解决办法
9568
查看次数

C++获取unordered_set*的字节表示,不带*序列化

在分布式计算设置中,我想向许多节点发送unordered_set.我知道C++中的序列化,例如使用boost::serialization.我对序列化的看法是,unordered_set在接收到序列化数据后,我面临着在每个节点上重建数据结构的成本.

我的想法是为unordered_set编写一个自定义分配器,它分配一个固定大小的连续内存,并在分配后返回起始内存地址.然后我想获取它的字节表示,unordered_set通过线路发送它,并告诉接收节点这个内存块是一个unordered_set.

那会有用吗?你们有没有其他想法如何解决我的问题?或者你有任何相关的指针,例如写这样的分配器?任何反馈都表示赞赏.

谢谢!

c++ serialization distributed-computing unordered-set

0
推荐指数
1
解决办法
131
查看次数