latency.cpp revision 943eb670c86242755f5af7460d46578243e0401e
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; 7943eb670c86242755f5af7460d46578243e0401eTim Murrayusing namespace renderscriptCpp; 8943eb670c86242755f5af7460d46578243e0401eTim Murray 9943eb670c86242755f5af7460d46578243e0401eTim Murrayint main(int argc, char** argv) 10943eb670c86242755f5af7460d46578243e0401eTim Murray{ 11943eb670c86242755f5af7460d46578243e0401eTim Murray int iters = 100; 12943eb670c86242755f5af7460d46578243e0401eTim Murray 13943eb670c86242755f5af7460d46578243e0401eTim Murray int numElems = 1000; 14943eb670c86242755f5af7460d46578243e0401eTim Murray 15943eb670c86242755f5af7460d46578243e0401eTim Murray if (argc >= 2) { 16943eb670c86242755f5af7460d46578243e0401eTim Murray iters = atoi(argv[1]); 17943eb670c86242755f5af7460d46578243e0401eTim Murray if (iters <= 0) { 18943eb670c86242755f5af7460d46578243e0401eTim Murray printf("iters must be positive\n"); 19943eb670c86242755f5af7460d46578243e0401eTim Murray return 1; 20943eb670c86242755f5af7460d46578243e0401eTim Murray } 21943eb670c86242755f5af7460d46578243e0401eTim Murray } 22943eb670c86242755f5af7460d46578243e0401eTim Murray 23943eb670c86242755f5af7460d46578243e0401eTim Murray printf("iters = %d\n", iters); 24943eb670c86242755f5af7460d46578243e0401eTim Murray 25943eb670c86242755f5af7460d46578243e0401eTim Murray if (argc >= 3) { 26943eb670c86242755f5af7460d46578243e0401eTim Murray numElems = atoi(argv[2]); 27943eb670c86242755f5af7460d46578243e0401eTim Murray if (numElems <= 0) { 28943eb670c86242755f5af7460d46578243e0401eTim Murray printf("numElems must be positive\n"); 29943eb670c86242755f5af7460d46578243e0401eTim Murray return 1; 30943eb670c86242755f5af7460d46578243e0401eTim Murray } 31943eb670c86242755f5af7460d46578243e0401eTim Murray } 32943eb670c86242755f5af7460d46578243e0401eTim Murray 33943eb670c86242755f5af7460d46578243e0401eTim Murray printf("numElems = %d\n", numElems); 34943eb670c86242755f5af7460d46578243e0401eTim Murray 35943eb670c86242755f5af7460d46578243e0401eTim Murray sp<RS> rs = new RS(); 36943eb670c86242755f5af7460d46578243e0401eTim Murray 37943eb670c86242755f5af7460d46578243e0401eTim Murray bool r = rs->init(true); // force CPU execution 38943eb670c86242755f5af7460d46578243e0401eTim Murray 39943eb670c86242755f5af7460d46578243e0401eTim Murray sp<const Element> e = Element::U32(rs); 40943eb670c86242755f5af7460d46578243e0401eTim Murray 41943eb670c86242755f5af7460d46578243e0401eTim Murray Type::Builder tb(rs, e); 42943eb670c86242755f5af7460d46578243e0401eTim Murray tb.setX(numElems); 43943eb670c86242755f5af7460d46578243e0401eTim Murray sp<const Type> t = tb.create(); 44943eb670c86242755f5af7460d46578243e0401eTim Murray 45943eb670c86242755f5af7460d46578243e0401eTim Murray sp<Allocation> ain = Allocation::createTyped(rs, t); 46943eb670c86242755f5af7460d46578243e0401eTim Murray sp<Allocation> aout = Allocation::createTyped(rs, t); 47943eb670c86242755f5af7460d46578243e0401eTim Murray 48943eb670c86242755f5af7460d46578243e0401eTim Murray sp<ScriptC_latency> sc = new ScriptC_latency(rs, NULL, 0); 49943eb670c86242755f5af7460d46578243e0401eTim Murray 50943eb670c86242755f5af7460d46578243e0401eTim Murray struct timeval start, stop; 51943eb670c86242755f5af7460d46578243e0401eTim Murray 52943eb670c86242755f5af7460d46578243e0401eTim Murray gettimeofday(&start, NULL); 53943eb670c86242755f5af7460d46578243e0401eTim Murray 54943eb670c86242755f5af7460d46578243e0401eTim Murray for (int i = 0; i < iters; i++) { 55943eb670c86242755f5af7460d46578243e0401eTim Murray sc->forEach_root(ain, aout); 56943eb670c86242755f5af7460d46578243e0401eTim Murray } 57943eb670c86242755f5af7460d46578243e0401eTim Murray 58943eb670c86242755f5af7460d46578243e0401eTim Murray uint32_t temp; 59943eb670c86242755f5af7460d46578243e0401eTim Murray 60943eb670c86242755f5af7460d46578243e0401eTim Murray aout->copy1DRangeFromUnchecked(0, 1, &temp, sizeof(temp)); 61943eb670c86242755f5af7460d46578243e0401eTim Murray 62943eb670c86242755f5af7460d46578243e0401eTim Murray gettimeofday(&stop, NULL); 63943eb670c86242755f5af7460d46578243e0401eTim Murray 64943eb670c86242755f5af7460d46578243e0401eTim Murray long long elapsed = (stop.tv_sec * 1000000) - (start.tv_sec * 1000000) + (stop.tv_usec - start.tv_usec); 65943eb670c86242755f5af7460d46578243e0401eTim Murray printf("elapsed time : %lld microseconds\n", elapsed); 66943eb670c86242755f5af7460d46578243e0401eTim Murray printf("time per iter: %f microseconds\n", (double)elapsed / iters); 67943eb670c86242755f5af7460d46578243e0401eTim Murray 68943eb670c86242755f5af7460d46578243e0401eTim Murray sc.clear(); 69943eb670c86242755f5af7460d46578243e0401eTim Murray t.clear(); 70943eb670c86242755f5af7460d46578243e0401eTim Murray e.clear(); 71943eb670c86242755f5af7460d46578243e0401eTim Murray ain.clear(); 72943eb670c86242755f5af7460d46578243e0401eTim Murray aout.clear(); 73943eb670c86242755f5af7460d46578243e0401eTim Murray} 74