java - 数组乘以标量 : loop unrolling

标签 java arrays for-loop

在我的一个JAVA项目中,我通常必须将巨大的数组与标量相乘。因此我想通过使用所谓的循环展开来编写一种方法。到目前为止我已经想出了这个:

public static float[] arrayTimesScalar(float[] array, float scalar){
int n = array.length;
float[] result = new float[n];
int m = n % 7;
if(n == 0){ throw new Error("The input array must,at least, hold one element"); }

if (n < 7){
    for(int i = 0; i < 7; i++){
        result[i] = scalar*array[i];
    } // end for
}
else{
    if (m != 0){
        for(int i = 0; i < m; i++){
            result[i] = scalar*array[i];
        }
        for(int i = m; i < n; i += 7){
            result[i] = scalar*array[i];
            result[i + 1] = scalar*array[i + 1];
            result[i + 2] = scalar*array[i + 2];
            result[i + 3] = scalar*array[i + 3];
            result[i + 4] = scalar*array[i + 4];
            result[i + 5] = scalar*array[i + 5];
            result[i + 6] = scalar*array[i + 6];
        }
    }
    else{
        for(int i = 0; i < n; i += 7){
            result[i] = scalar*array[i];
            result[i + 1] = scalar*array[i + 1];
            result[i + 2] = scalar*array[i + 2];
            result[i + 3] = scalar*array[i + 3];
            result[i + 4] = scalar*array[i + 4];
            result[i + 5] = scalar*array[i + 5];
            result[i + 6] = scalar*array[i + 6];
        }
    }
}       
return result;

}

我真的很感激了解现在出现的方法是否正确,以及使用循环展开是否有意义,尽管编译器高度优化。

最佳答案

循环展开是一种低级优化,它在现代 JVM 上很可能没有意义。但是,您不应该猜测或询问其他人:您应该在目标系统上测试您的代码并测量性能。

至于正确性,我相信这也很容易验证,例如通过编写单元测试。您的代码没有任何明显的错误。

关于java - 数组乘以标量 : loop unrolling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17442667/

相关文章:

java - jaxb,解码后得到原始xml

javascript - 使用 Django 1.8.1 中的 View 列表作为 javascript 模板中的数组

c - 对数组进行二分搜索时出现段错误

javascript - 在 Javascript (jQuery) 中将数组插入数组

r - 迭代地提取跨说话轮次的重复单词形式

python - 为什么我创建字典时数据循环多次?

Java - 在实例化时使用反射来防止字段分配?

java - 在没有 API 网关的情况下处理 https 请求

java - Spring 4 中的自定义属性编辑器

c++ - 多个嵌套 for 循环与单个 for 循环