2016-04-21 88 views
2

我正在处理一个非常脱节的API,它让我弥合了它自己的内部类型之间的很大差距。std :: copy复制一个浮点数组的双精度数组?

在几个地方,我使用std :: copy来将浮点数组提升为双精度数组,或者将双精度数组降级为浮点数组,以在一些更不一致的对象之间进行穿梭。

问题是: 这仍然被认为是最安全和最理想的方式吗?或者我应该考虑推荐的替代方法吗?

如果它帮助,如果有一些平台特定的人,以下是该平台的情况: 部署是内部和非常有限的,只有gcc的4.8,只有Linux,很有地方和控制使用。如果他们在性能方面值得的话,我可以考虑在其他平台上可能未定义的“危险”特定于平台的替代方案。

副本的大小在少数几个三元组之间变化,但很少,在一个或两个数组中的数千个条目之间变化。源和目标的长度总是相同的,对于可能的副本来说是最简单的情况,从未排列或有条件。

+0

似乎没有任何问题(除了标题中相当不明确的一个外) - 只是一堆关于你目前正在做的事情的陈述......你真正的问题是什么? [编辑你的问题,请不要添加评论] –

+0

我想它会在我的案例的细节中迷失。粗言大意地提出了实际问题。 –

+0

对我来说听起来很好,很难在没有看到真实代码的情况下更权威地回答它 –

回答

1

你这样做的方式非常好,并且会接近最佳性能。如果你真的想挤掉每一滴表现,你可能需要手工编写一些SSE代码(例如使用CVTPD2PS),但除非分析显示这些转换成为应用程序中的热点,否则我不会打扰。

+0

它不是太慢,但是在更大阵列的情况下,它是一个相对较好的周期块(通过前面提到的API)对那些人通常很少做。我认为我们已经全面报道了AVX,我应该至少有一次使用4DPs展开4秒的版本。谢谢你提醒我。 –

+1

现代的编译器应该将循环转换为向量指令,尤其是在调用std :: copy时大小是固定的。 –

相关问题