diff options
Diffstat (limited to 'src/org/zeroxlab/benchmark/TesterArithmetic.java')
-rw-r--r-- | src/org/zeroxlab/benchmark/TesterArithmetic.java | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/src/org/zeroxlab/benchmark/TesterArithmetic.java b/src/org/zeroxlab/benchmark/TesterArithmetic.java new file mode 100644 index 0000000..5d29921 --- /dev/null +++ b/src/org/zeroxlab/benchmark/TesterArithmetic.java @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2010 0xlab - http://0xlab.org/ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.zeroxlab.benchmark; + +import org.zeroxlab.arithmetic.LinpackLoop; + +import android.util.Log; +import android.app.Activity; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.content.Intent; +import android.widget.TextView; + +public class TesterArithmetic extends Tester{ + + TextView mTextView; + Bundle mInfo[]; + public final static String MFLOPS = "MFLOPS"; + public final static String RESIDN = "RESIDN"; + public final static String TIME = "TIME"; + public final static String EPS = "EPS"; + + protected String getTag() { + return "Arithmetic"; + } + + protected int sleepBeforeStart() { + return 1000; + } + + protected int sleepBetweenRound() { + return 200; + } + + protected void oneRound() { + LinpackLoop.main(mInfo[mNow - 1]); + decreaseCounter(); + } + + @Override + protected boolean saveResult(Intent intent) { + Bundle result = new Bundle(); + TesterArithmetic.average(result, mInfo); + + intent.putExtra(CaseArithmetic.LIN_RESULT, result); + return true; + } + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + int length = mRound; + mInfo = new Bundle[length]; + for (int i = 0; i < length; i++) { + mInfo[i] = new Bundle(); + } + + mTextView = new TextView(this); + mTextView.setText("Running benchmark...."); + mTextView.setTextSize(mTextView.getTextSize() + 5); + setContentView(mTextView); + startTester(); + } + + public static void average(Bundle result, Bundle[] list) { + + if (result == null) { + result = new Bundle(); + } + + if (list == null) { + Log.i("Arithmetic", "Array is null"); + return; + } + + int length = list.length; + double mflops_total = 0.0; + double residn_total = 0.0; + double time_total = 0.0; + double eps_total = 0.0; + + for (int i = 0; i < length; i ++) { + Bundle info = list[i]; + + if (info == null) { + Log.i("Arithmetic", "one item of array is null!"); + return; + } + + mflops_total += info.getDouble(MFLOPS); + residn_total += info.getDouble(RESIDN); + time_total += info.getDouble(TIME); + eps_total += info.getDouble(EPS); + } + + result.putDouble(MFLOPS, mflops_total / length); + result.putDouble(RESIDN, residn_total / length); + result.putDouble(TIME, time_total / length); + result.putDouble(EPS, eps_total / length); + } + + public static String bundleToString(Bundle bundle) { + String result = ""; + result += "\nMflops/s :" + bundle.getDouble(MFLOPS, 0.0); + /* the time result is too small to calculate average. (0.0 ~ 0.1), drop it*/ + //result += "\nTime :" + bundle.getDouble(TIME, 0.0); + result += "\nNorm Res :" + bundle.getDouble(RESIDN, 0.0); + result += "\nPrecision:" + bundle.getDouble(EPS, 0.0); + + return result; + } + + public static String bundleListToXML(Bundle[] mInfo) { + + double total = 0.0; + for (int i = 0; i < mInfo.length; i++) { + double mflops = mInfo[i].getDouble(MFLOPS, 0.0); + total += mflops; + } + if (total == 0) { + return ""; + } + String result = ""; + result += "<scenario benchmark=\"Linpack\" unit=\"mflops\">"; + for (int i = 0; i < mInfo.length; i++) { + double mflops = mInfo[i].getDouble(MFLOPS, 0.0); + result += "" + mflops + " "; + } + result += "</scenario>"; + + return result; + } + +} |