latency.cpp revision 4d252d6e807b89764dad123ac845df298c52ca97
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 564d252d6e807b89764dad123ac845df298c52ca97Tim Murray bool r = rs->init(forceCpu, synchronous); 57943eb670c86242755f5af7460d46578243e0401eTim Murray 58943eb670c86242755f5af7460d46578243e0401eTim Murray sp<const Element> e = Element::U32(rs); 59943eb670c86242755f5af7460d46578243e0401eTim Murray 60943eb670c86242755f5af7460d46578243e0401eTim Murray Type::Builder tb(rs, e); 61943eb670c86242755f5af7460d46578243e0401eTim Murray tb.setX(numElems); 62943eb670c86242755f5af7460d46578243e0401eTim Murray sp<const Type> t = tb.create(); 63943eb670c86242755f5af7460d46578243e0401eTim Murray 644d252d6e807b89764dad123ac845df298c52ca97Tim Murray uint32_t *buf = new uint32_t[numElems]; 654d252d6e807b89764dad123ac845df298c52ca97Tim Murray 66943eb670c86242755f5af7460d46578243e0401eTim Murray sp<Allocation> ain = Allocation::createTyped(rs, t); 67943eb670c86242755f5af7460d46578243e0401eTim Murray sp<Allocation> aout = Allocation::createTyped(rs, t); 68943eb670c86242755f5af7460d46578243e0401eTim Murray 69943eb670c86242755f5af7460d46578243e0401eTim Murray sp<ScriptC_latency> sc = new ScriptC_latency(rs, NULL, 0); 70943eb670c86242755f5af7460d46578243e0401eTim Murray 71943eb670c86242755f5af7460d46578243e0401eTim Murray struct timeval start, stop; 72943eb670c86242755f5af7460d46578243e0401eTim Murray 73943eb670c86242755f5af7460d46578243e0401eTim Murray gettimeofday(&start, NULL); 74943eb670c86242755f5af7460d46578243e0401eTim Murray 75943eb670c86242755f5af7460d46578243e0401eTim Murray for (int i = 0; i < iters; i++) { 76943eb670c86242755f5af7460d46578243e0401eTim Murray sc->forEach_root(ain, aout); 77943eb670c86242755f5af7460d46578243e0401eTim Murray } 78943eb670c86242755f5af7460d46578243e0401eTim Murray 79a4cbc2b0cf0f6fbdb21e84a3e17585eda1885e3eTim Murray rs->finish(); 80943eb670c86242755f5af7460d46578243e0401eTim Murray 81943eb670c86242755f5af7460d46578243e0401eTim Murray gettimeofday(&stop, NULL); 82943eb670c86242755f5af7460d46578243e0401eTim Murray 83943eb670c86242755f5af7460d46578243e0401eTim Murray long long elapsed = (stop.tv_sec * 1000000) - (start.tv_sec * 1000000) + (stop.tv_usec - start.tv_usec); 84943eb670c86242755f5af7460d46578243e0401eTim Murray printf("elapsed time : %lld microseconds\n", elapsed); 85943eb670c86242755f5af7460d46578243e0401eTim Murray printf("time per iter: %f microseconds\n", (double)elapsed / iters); 86943eb670c86242755f5af7460d46578243e0401eTim Murray 874d252d6e807b89764dad123ac845df298c52ca97Tim Murray gettimeofday(&start, NULL); 884d252d6e807b89764dad123ac845df298c52ca97Tim Murray 894d252d6e807b89764dad123ac845df298c52ca97Tim Murray for (int i = 0; i < iters; i++) { 904d252d6e807b89764dad123ac845df298c52ca97Tim Murray ain->copy1DFrom(buf); 914d252d6e807b89764dad123ac845df298c52ca97Tim Murray sc->forEach_root(ain, aout); 924d252d6e807b89764dad123ac845df298c52ca97Tim Murray aout->copy1DTo(buf); 934d252d6e807b89764dad123ac845df298c52ca97Tim Murray } 944d252d6e807b89764dad123ac845df298c52ca97Tim Murray 954d252d6e807b89764dad123ac845df298c52ca97Tim Murray rs->finish(); 964d252d6e807b89764dad123ac845df298c52ca97Tim Murray 974d252d6e807b89764dad123ac845df298c52ca97Tim Murray gettimeofday(&stop, NULL); 984d252d6e807b89764dad123ac845df298c52ca97Tim Murray elapsed = (stop.tv_sec * 1000000) - (start.tv_sec * 1000000) + (stop.tv_usec - start.tv_usec); 994d252d6e807b89764dad123ac845df298c52ca97Tim Murray printf("elapsed time with copy : %lld microseconds\n", elapsed); 1004d252d6e807b89764dad123ac845df298c52ca97Tim Murray printf("time per iter with copy: %f microseconds\n", (double)elapsed / iters); 1014d252d6e807b89764dad123ac845df298c52ca97Tim Murray 102943eb670c86242755f5af7460d46578243e0401eTim Murray sc.clear(); 103943eb670c86242755f5af7460d46578243e0401eTim Murray t.clear(); 104943eb670c86242755f5af7460d46578243e0401eTim Murray e.clear(); 105943eb670c86242755f5af7460d46578243e0401eTim Murray ain.clear(); 106943eb670c86242755f5af7460d46578243e0401eTim Murray aout.clear(); 107943eb670c86242755f5af7460d46578243e0401eTim Murray} 108