所以我有兆字节的数据存储为需要通过网络发送的双精度数...现在我不需要double提供的精度,所以我想在通过网络发送它们之前将它们转换为浮点数.简单地做的开销是多少:
float myFloat = (float)myDouble;
Run Code Online (Sandbox Code Playgroud)
我将每隔几秒钟进行几百万次这样的操作,并且不想放慢速度.谢谢
编辑:我的平台是使用Visual Studio 2008的x64.
编辑2:我无法控制它们的存储方式.
pet*_*hen 11
正如Michael Burr所说,虽然开销很大程度上取决于您的平台,但开销肯定小于通过线路发送它们所需的时间.
粗略估计:
优秀千兆线上的800MBit/s有效载荷,25M浮点/秒.
在2GHz单核上,每个转换为均衡的值可以为您提供高达80个时钟周期 - 任意更少,您将节省时间.在所有架构上应该绰绰有余:)
一个简单的加载 - 存储周期(除了所有缓存延迟)应该低于每个值5个周期.通过指令交叉,SIMD扩展和/或在多个内核上并行化,您可能在一个周期内进行多次转换.
此外,接收器将很乐意只处理一半的数据.请记住,内存访问时间是非线性的.
反对转换的唯一方法是,如果传输应该具有最小的CPU负载:现代架构可以在没有CPU干预的情况下将数据从磁盘/存储器传输到总线.但是,有了上述数字我会说在实践中并不重要.
[编辑]
我检查了一些数字,387协处理器确实需要大约70个周期进行加载 - 存储周期.在最初的奔腾中,您可以在没有任何并行化的情况下进行3个循环.
所以,除非你在386上运行一个千兆网络......
即使确实需要时间,这也不是您应用程序中的慢点.
您的FPU可以比发送网络流量更快地进行转换(因此这里的瓶颈很可能是写入套接字).
但就像这样的事情衡量和观察.
我个人不认为在这里度过的,会影响花了发送数据的实时任意时间.