Home | History | Annotate | Download | only in blasbenchmark
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.example.android.rs.blasbenchmark;
     18 
     19 
     20 import android.os.Bundle;
     21 import android.util.Log;
     22 
     23 import com.example.android.rs.blasbenchmark.BlasTestList.TestName;
     24 import com.example.android.rs.blasbenchmark.BlasTestRunner;
     25 
     26 import android.test.ActivityInstrumentationTestCase2;
     27 import android.test.suitebuilder.annotation.LargeTest;
     28 
     29 /**
     30  * BLAS benchmark test.
     31  * To run the test, please use command
     32  *
     33  * adb shell am instrument -e iteration <n> -w com.example.android.rs.blasbenchmark/.BlasTestRunner
     34  *
     35  */
     36 public class BlasTest extends ActivityInstrumentationTestCase2<BlasBenchmark> {
     37     private final String TAG = "BLAS Test";
     38     private final String TEST_NAME = "Testname";
     39     private final String ITERATIONS = "Iterations";
     40     private final String BENCHMARK = "Benchmark";
     41     private static int INSTRUMENTATION_IN_PROGRESS = 2;
     42     private int mIteration;
     43     private BlasBenchmark mActivity;
     44 
     45     public BlasTest() {
     46         super(BlasBenchmark.class);
     47     }
     48 
     49     @Override
     50     public void setUp() throws Exception {
     51         super.setUp();
     52         setActivityInitialTouchMode(false);
     53         mActivity = getActivity();
     54         BlasTestRunner mRunner = (BlasTestRunner) getInstrumentation();
     55         mIteration = mRunner.mIteration;
     56         assertTrue("please enter a valid iteration value", mIteration > 0);
     57    }
     58 
     59     @Override
     60     public void tearDown() throws Exception {
     61         super.tearDown();
     62     }
     63 
     64     class TestAction implements Runnable {
     65         TestName mTestName;
     66         float mResult;
     67         public TestAction(TestName testName) {
     68             mTestName = testName;
     69         }
     70         public void run() {
     71             mActivity.changeTest(mTestName, false);
     72             //mResult = mActivity.getBenchmark();
     73             Log.v(TAG, "Benchmark for test \"" + mTestName.toString() + "\" is: " + mResult);
     74             synchronized(this) {
     75                 this.notify();
     76             }
     77         }
     78         public float getBenchmark() {
     79             return mResult;
     80         }
     81     }
     82 
     83     // Set the benchmark thread to run on ui thread
     84     // Synchronized the thread such that the test will wait for the benchmark thread to finish
     85     public void runOnUiThread(Runnable action) {
     86         synchronized(action) {
     87             mActivity.runOnUiThread(action);
     88             try {
     89                 action.wait();
     90             } catch (InterruptedException e) {
     91                 Log.v(TAG, "waiting for action running on UI thread is interrupted: " +
     92                         e.toString());
     93             }
     94         }
     95     }
     96 
     97     public void runTest(TestAction ta, String testName) {
     98         float sum = 0;
     99         for (int i = 0; i < mIteration; i++) {
    100             runOnUiThread(ta);
    101             float bmValue = ta.getBenchmark();
    102             Log.v(TAG, "results for iteration " + i + " is " + bmValue);
    103             sum += bmValue;
    104         }
    105         float avgResult = sum/mIteration;
    106 
    107         // post result to INSTRUMENTATION_STATUS
    108         Bundle results = new Bundle();
    109         results.putString(TEST_NAME, testName);
    110         results.putInt(ITERATIONS, mIteration);
    111         results.putFloat(BENCHMARK, avgResult);
    112         getInstrumentation().sendStatus(INSTRUMENTATION_IN_PROGRESS, results);
    113     }
    114 
    115     // Test case 0: SGEMM Test Small
    116     @LargeTest
    117     public void testSGEMMSmall() {
    118         TestAction ta = new TestAction(TestName.SGEMM_SMALL);
    119         runTest(ta, TestName.SGEMM_SMALL.name());
    120     }
    121 
    122     // Test case 1: SGEMM Test Medium
    123     @LargeTest
    124     public void testSGEMMedium() {
    125         TestAction ta = new TestAction(TestName.SGEMM_MEDIUM);
    126         runTest(ta, TestName.SGEMM_MEDIUM.name());
    127     }
    128 
    129     // Test case 2: SGEMM Test Large
    130     @LargeTest
    131     public void testSGEMMLarge() {
    132         TestAction ta = new TestAction(TestName.SGEMM_LARGE);
    133         runTest(ta, TestName.SGEMM_LARGE.name());
    134     }
    135 
    136     // Test case 3: 8Bit GEMM Test Small
    137     @LargeTest
    138     public void testBNNMSmall() {
    139         TestAction ta = new TestAction(TestName.BNNM_SMALL);
    140         runTest(ta, TestName.BNNM_SMALL.name());
    141     }
    142 
    143     // Test case 4: 8Bit GEMM Test Medium
    144     @LargeTest
    145     public void testBNNMMMedium() {
    146         TestAction ta = new TestAction(TestName.BNNM_MEDIUM);
    147         runTest(ta, TestName.BNNM_MEDIUM.name());
    148     }
    149 
    150     // Test case 5: 8Bit GEMM Test Large
    151     @LargeTest
    152     public void testBNNMLarge() {
    153         TestAction ta = new TestAction(TestName.BNNM_LARGE);
    154         runTest(ta, TestName.BNNM_LARGE.name());
    155     }
    156 }
    157