latency.cpp revision 525342999140d69b9f5673f3036f836c66a983c4
1943eb670c86242755f5af7460d46578243e0401eTim Murray#include "RenderScript.h"
2943eb670c86242755f5af7460d46578243e0401eTim Murray#include <sys/time.h>
3943eb670c86242755f5af7460d46578243e0401eTim Murray
4943eb670c86242755f5af7460d46578243e0401eTim Murray#include "ScriptC_latency.h"
5943eb670c86242755f5af7460d46578243e0401eTim Murray
6943eb670c86242755f5af7460d46578243e0401eTim Murrayusing namespace android;
79eb7f4b90120ebe4be74343856e86b46495f72dfTim Murrayusing namespace RSC;
8943eb670c86242755f5af7460d46578243e0401eTim Murray
9943eb670c86242755f5af7460d46578243e0401eTim Murrayint main(int argc, char** argv)
10943eb670c86242755f5af7460d46578243e0401eTim Murray{
11943eb670c86242755f5af7460d46578243e0401eTim Murray    int iters = 100;
12943eb670c86242755f5af7460d46578243e0401eTim Murray    int numElems = 1000;
1397960af1f651349fba21fc67be644e49711a4263Tim Murray    bool forceCpu = false;
144d252d6e807b89764dad123ac845df298c52ca97Tim Murray    bool synchronous = false;
15943eb670c86242755f5af7460d46578243e0401eTim Murray
16943eb670c86242755f5af7460d46578243e0401eTim Murray    if (argc >= 2) {
17943eb670c86242755f5af7460d46578243e0401eTim Murray        iters = atoi(argv[1]);
18943eb670c86242755f5af7460d46578243e0401eTim Murray        if (iters <= 0) {
19943eb670c86242755f5af7460d46578243e0401eTim Murray            printf("iters must be positive\n");
20943eb670c86242755f5af7460d46578243e0401eTim Murray            return 1;
21943eb670c86242755f5af7460d46578243e0401eTim Murray        }
22943eb670c86242755f5af7460d46578243e0401eTim Murray    }
23943eb670c86242755f5af7460d46578243e0401eTim Murray
24943eb670c86242755f5af7460d46578243e0401eTim Murray    printf("iters = %d\n", iters);
25943eb670c86242755f5af7460d46578243e0401eTim Murray
26943eb670c86242755f5af7460d46578243e0401eTim Murray    if (argc >= 3) {
27943eb670c86242755f5af7460d46578243e0401eTim Murray        numElems = atoi(argv[2]);
28943eb670c86242755f5af7460d46578243e0401eTim Murray        if (numElems <= 0) {
29943eb670c86242755f5af7460d46578243e0401eTim Murray            printf("numElems must be positive\n");
30943eb670c86242755f5af7460d46578243e0401eTim Murray            return 1;
31943eb670c86242755f5af7460d46578243e0401eTim Murray        }
32943eb670c86242755f5af7460d46578243e0401eTim Murray    }
33943eb670c86242755f5af7460d46578243e0401eTim Murray
3497960af1f651349fba21fc67be644e49711a4263Tim Murray    if (argc >= 4) {
3597960af1f651349fba21fc67be644e49711a4263Tim Murray        int temp = atoi(argv[3]);
3697960af1f651349fba21fc67be644e49711a4263Tim Murray        if (temp != 0)
3797960af1f651349fba21fc67be644e49711a4263Tim Murray            forceCpu = true;
3897960af1f651349fba21fc67be644e49711a4263Tim Murray    }
3997960af1f651349fba21fc67be644e49711a4263Tim Murray
404d252d6e807b89764dad123ac845df298c52ca97Tim Murray    if (argc >= 5) {
414d252d6e807b89764dad123ac845df298c52ca97Tim Murray        int temp = atoi(argv[4]);
424d252d6e807b89764dad123ac845df298c52ca97Tim Murray        if (temp != 0)
434d252d6e807b89764dad123ac845df298c52ca97Tim Murray            synchronous = true;
444d252d6e807b89764dad123ac845df298c52ca97Tim Murray    }
454d252d6e807b89764dad123ac845df298c52ca97Tim Murray
4697960af1f651349fba21fc67be644e49711a4263Tim Murray    if (forceCpu)
4797960af1f651349fba21fc67be644e49711a4263Tim Murray        printf("forcing CPU\n");
4897960af1f651349fba21fc67be644e49711a4263Tim Murray
494d252d6e807b89764dad123ac845df298c52ca97Tim Murray    if (synchronous)
504d252d6e807b89764dad123ac845df298c52ca97Tim Murray        printf("forcing synchronous\n");
514d252d6e807b89764dad123ac845df298c52ca97Tim Murray
52943eb670c86242755f5af7460d46578243e0401eTim Murray    printf("numElems = %d\n", numElems);
53943eb670c86242755f5af7460d46578243e0401eTim Murray
54943eb670c86242755f5af7460d46578243e0401eTim Murray    sp<RS> rs = new RS();
55943eb670c86242755f5af7460d46578243e0401eTim Murray
56525342999140d69b9f5673f3036f836c66a983c4Tim Murray    uint32_t flags = 0;
57525342999140d69b9f5673f3036f836c66a983c4Tim Murray    if (forceCpu) flags |= RS_INIT_LOW_LATENCY;
58525342999140d69b9f5673f3036f836c66a983c4Tim Murray    if (synchronous) flags |= RS_INIT_SYNCHRONOUS;
59525342999140d69b9f5673f3036f836c66a983c4Tim Murray
60525342999140d69b9f5673f3036f836c66a983c4Tim Murray    bool r = rs->init(flags);
61943eb670c86242755f5af7460d46578243e0401eTim Murray
62943eb670c86242755f5af7460d46578243e0401eTim Murray    sp<const Element> e = Element::U32(rs);
63943eb670c86242755f5af7460d46578243e0401eTim Murray
64943eb670c86242755f5af7460d46578243e0401eTim Murray    Type::Builder tb(rs, e);
65943eb670c86242755f5af7460d46578243e0401eTim Murray    tb.setX(numElems);
66943eb670c86242755f5af7460d46578243e0401eTim Murray    sp<const Type> t = tb.create();
67943eb670c86242755f5af7460d46578243e0401eTim Murray
684d252d6e807b89764dad123ac845df298c52ca97Tim Murray    uint32_t *buf = new uint32_t[numElems];
694d252d6e807b89764dad123ac845df298c52ca97Tim Murray
70943eb670c86242755f5af7460d46578243e0401eTim Murray    sp<Allocation> ain = Allocation::createTyped(rs, t);
71943eb670c86242755f5af7460d46578243e0401eTim Murray    sp<Allocation> aout = Allocation::createTyped(rs, t);
72943eb670c86242755f5af7460d46578243e0401eTim Murray
7341efe87eb48ed945df2f26f4dff0eb5e00b8eebeStephen Hines    sp<ScriptC_latency> sc = new ScriptC_latency(rs);
74943eb670c86242755f5af7460d46578243e0401eTim Murray
75943eb670c86242755f5af7460d46578243e0401eTim Murray    struct timeval start, stop;
76943eb670c86242755f5af7460d46578243e0401eTim Murray
77943eb670c86242755f5af7460d46578243e0401eTim Murray    gettimeofday(&start, NULL);
78943eb670c86242755f5af7460d46578243e0401eTim Murray
79943eb670c86242755f5af7460d46578243e0401eTim Murray    for (int i = 0; i < iters; i++) {
80943eb670c86242755f5af7460d46578243e0401eTim Murray        sc->forEach_root(ain, aout);
81943eb670c86242755f5af7460d46578243e0401eTim Murray    }
82943eb670c86242755f5af7460d46578243e0401eTim Murray
83a4cbc2b0cf0f6fbdb21e84a3e17585eda1885e3eTim Murray    rs->finish();
84943eb670c86242755f5af7460d46578243e0401eTim Murray
85943eb670c86242755f5af7460d46578243e0401eTim Murray    gettimeofday(&stop, NULL);
86943eb670c86242755f5af7460d46578243e0401eTim Murray
87943eb670c86242755f5af7460d46578243e0401eTim Murray    long long elapsed = (stop.tv_sec * 1000000) - (start.tv_sec * 1000000) + (stop.tv_usec - start.tv_usec);
88943eb670c86242755f5af7460d46578243e0401eTim Murray    printf("elapsed time : %lld microseconds\n", elapsed);
89943eb670c86242755f5af7460d46578243e0401eTim Murray    printf("time per iter: %f microseconds\n", (double)elapsed / iters);
90943eb670c86242755f5af7460d46578243e0401eTim Murray
914d252d6e807b89764dad123ac845df298c52ca97Tim Murray    gettimeofday(&start, NULL);
924d252d6e807b89764dad123ac845df298c52ca97Tim Murray
934d252d6e807b89764dad123ac845df298c52ca97Tim Murray    for (int i = 0; i < iters; i++) {
944d252d6e807b89764dad123ac845df298c52ca97Tim Murray        ain->copy1DFrom(buf);
954d252d6e807b89764dad123ac845df298c52ca97Tim Murray        sc->forEach_root(ain, aout);
964d252d6e807b89764dad123ac845df298c52ca97Tim Murray        aout->copy1DTo(buf);
974d252d6e807b89764dad123ac845df298c52ca97Tim Murray    }
984d252d6e807b89764dad123ac845df298c52ca97Tim Murray
994d252d6e807b89764dad123ac845df298c52ca97Tim Murray    rs->finish();
1004d252d6e807b89764dad123ac845df298c52ca97Tim Murray
1014d252d6e807b89764dad123ac845df298c52ca97Tim Murray    gettimeofday(&stop, NULL);
1024d252d6e807b89764dad123ac845df298c52ca97Tim Murray    elapsed = (stop.tv_sec * 1000000) - (start.tv_sec * 1000000) + (stop.tv_usec - start.tv_usec);
1034d252d6e807b89764dad123ac845df298c52ca97Tim Murray    printf("elapsed time with copy : %lld microseconds\n", elapsed);
1044d252d6e807b89764dad123ac845df298c52ca97Tim Murray    printf("time per iter with copy: %f microseconds\n", (double)elapsed / iters);
1054d252d6e807b89764dad123ac845df298c52ca97Tim Murray
106943eb670c86242755f5af7460d46578243e0401eTim Murray    sc.clear();
107943eb670c86242755f5af7460d46578243e0401eTim Murray    t.clear();
108943eb670c86242755f5af7460d46578243e0401eTim Murray    e.clear();
109943eb670c86242755f5af7460d46578243e0401eTim Murray    ain.clear();
110943eb670c86242755f5af7460d46578243e0401eTim Murray    aout.clear();
111943eb670c86242755f5af7460d46578243e0401eTim Murray}
112