From 9fd82d007b0aa8492c22837f32def599a4686349 Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Tue, 11 Nov 2014 14:42:00 +0100 Subject: [PATCH] direct access to vector arrays in ColSums --- .../truffle/r/nodes/builtin/base/ColSums.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ColSums.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ColSums.java index 48503680bc..ea99c9c487 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ColSums.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ColSums.java @@ -63,10 +63,12 @@ public abstract class ColSums extends RBuiltinNode { boolean isComplete = true; final boolean rna = removeNA.profile(naRm == RRuntime.LOGICAL_TRUE); na.enable(x); + double[] data = x.getDataWithoutCopying(); + int pos = 0; nextCol: for (int c = 0; c < colNum; ++c) { double sum = 0; for (int i = 0; i < rowNum; ++i) { - double el = x.getDataAt(c * rowNum + i); + double el = data[pos++]; if (rna) { if (!na.check(el) && !Double.isNaN(el)) { sum = add.op(sum, el); @@ -74,11 +76,13 @@ public abstract class ColSums extends RBuiltinNode { } else { if (na.check(el)) { result[c] = RRuntime.DOUBLE_NA; + pos += rowNum - i - 1; continue nextCol; } if (Double.isNaN(el)) { result[c] = Double.NaN; isComplete = false; + pos += rowNum - i - 1; continue nextCol; } sum = add.op(sum, el); @@ -95,10 +99,12 @@ public abstract class ColSums extends RBuiltinNode { double[] result = new double[colNum]; final boolean rna = removeNA.profile(naRm == RRuntime.LOGICAL_TRUE); na.enable(x); + byte[] data = x.getDataWithoutCopying(); + int pos = 0; nextCol: for (int c = 0; c < colNum; ++c) { double sum = 0; for (int i = 0; i < rowNum; ++i) { - byte el = x.getDataAt(c * rowNum + i); + byte el = data[pos++]; if (rna) { if (!na.check(el)) { sum = add.op(sum, el); @@ -106,6 +112,7 @@ public abstract class ColSums extends RBuiltinNode { } else { if (na.check(el)) { result[c] = RRuntime.DOUBLE_NA; + pos += rowNum - i - 1; continue nextCol; } sum = add.op(sum, el); @@ -122,10 +129,12 @@ public abstract class ColSums extends RBuiltinNode { double[] result = new double[colNum]; final boolean rna = removeNA.profile(naRm == RRuntime.LOGICAL_TRUE); na.enable(x); + int[] data = x.getDataWithoutCopying(); + int pos = 0; nextCol: for (int c = 0; c < colNum; ++c) { double sum = 0; for (int i = 0; i < rowNum; ++i) { - int el = x.getDataAt(c * rowNum + i); + int el = data[pos++]; if (rna) { if (!na.check(el)) { sum = add.op(sum, el); @@ -133,6 +142,7 @@ public abstract class ColSums extends RBuiltinNode { } else { if (na.check(el)) { result[c] = RRuntime.DOUBLE_NA; + pos += rowNum - i - 1; continue nextCol; } sum = add.op(sum, el); @@ -149,5 +159,4 @@ public abstract class ColSums extends RBuiltinNode { controlVisibility(); throw RError.error(getEncapsulatingSourceSection(), RError.Message.X_NUMERIC); } - } -- GitLab