53得票4回答
在.NET 4及以上版本中,数组边界检查的效率如何?

我对 .net 中低级算法的效率很感兴趣。我想让我们未来能够选择更多地使用 C# 而不是 C++ 来编写代码,但其中一个难点是在循环和随机访问数组时出现的 .net 边界检查。 一个激励人心的例子是一个计算两个数组中对应元素乘积之和(这是两个向量的点积)的函数。static void SumP...

41得票4回答
我该如何编写Java代码以允许使用SSE并进行边界检查消除(或其他高级优化)?

情况: 我正在优化 LZF 压缩算法的纯 Java 实现,其中涉及大量的 byte[] 访问和基本的 int 数学运算用于哈希和比较。性能非常重要,因为压缩的目标是减少 I/O 要求。我没有发布代码,因为它还没有整理好,可能会被大幅重构。 问题: 如何编写代码以允许 JIT 编译成使用...

20得票3回答
为什么边界检查无法被消除?

我写了一个简单的benchmark,以便找出当数组通过按位与运算来计算时,边界检查是否可以被消除。这基本上是几乎所有哈希表所做的:它们计算 h & (table.length - 1) 作为索引进入table,其中h是hashCode或派生值。results显示边界检查未被消除。...

15得票1回答
消除Haskell有界类型的数组边界检查?

我正在创建许多索引类型为Bounded,索引范围为(minBound, maxBound)的数组。对于这样的数组,边界检查是不必要的。如何说服GHC消除边界检查? 我的特定应用程序使用了包装和非包装的不可变数组,但我对所有类型的Haskell数组都感兴趣。

11得票1回答
String构造函数中缺少边界检查消除?

在研究UTF8解码性能时,我注意到protobuf的UnsafeProcessor::decodeUtf8对于以下非ascii字符串的性能优于String(byte[] bytes, int offset, int length, Charset charset): "Quizdel...

11得票2回答
Java中的边界检查

"Hotspot可以在Java中删除边界检查。"有人能解释一下吗?实际上,我正在分析C++和Java之间的区别。这不是作业,我只是出于自己的兴趣进行分析。

8得票1回答
热点编译器是否能够通过按位运算来限制索引范围,从而消除边界检查?

考虑以下函数: int foo(int[] indices) { int[] lookup = new int[256]; fill(lookup); // populate values, not shown int sum = 0; for (int i : indic...

8得票2回答
在尝试达到最佳编译器输出的过程中,移除Rust循环中的边界检查

为了确定我是否可以/应该使用 Rust 而不是默认的 C/C++,我正在研究各种边缘情况,主要是考虑以下问题:在 0.1% 的情况下,当它确实很重要时,我是否总是能够获得与 gcc 相同的编译器输出(使用适当的优化标志)?答案很可能是否定的,但让我们看看... Reddit 上有一个相当奇...

7得票1回答
CLR中的数组边界检查消除?

我最近阅读了Dave Detlefs的这篇文章,其中他提出了一些CLR执行数组边界检查消除的情况。我决定自己测试一下,所以我做了以下几点: Opened Visual Studio 2010 Ultimate SP1 Created a new C# project of type Con...