#if 1 #include #include // Libra #include // C and C++ API const int iterationCount = 15; const int N = 1500; int backend1OpsCounter = 0; int backend2OpsCounter = 0; struct UserData { gVar* C; double stopTime; }; void getDataCompletedCallbackBackend1(float* memory, void* userData) { const UserData& data = *(UserData*)userData; // Verify downloaded data const int index = int((::rand()/float(RAND_MAX-1))*N*N); if (memory[index] != float(N)) printf("Backend1 : Error value %f at index %d\n", memory[index], index); backend1OpsCounter++; } void getDataCompletedCallbackBackend2(float* memory, void* userData) { const UserData& data = *(UserData*)userData; // Verify downloaded data const int index = int((::rand()/float(RAND_MAX-1))*N*N); if (memory[index] != float(N)) printf("Backend2 : Error value %f at index %d\n", memory[index], index); backend2OpsCounter++; } double computeBackendRatio(gBackend backend1, gBackend backend2, gVar& A1, gVar& B1, gVar& C1, gVar& A2, gVar& B2, gVar& C2, float* buffer1, float* buffer2, UserData& userData) { libra_SetCurrentBackend(backend1); /* Create two N by N matrices on the GPU (default compute backend). */ A1 = ones(N); B1 = A1; /* warm up phase of the backend1! (to get accurate timing results) */ C1 = A1 * B1; C1 = A1 * B1; C1 = A1 * B1; C1 = A1 * B1; /* Now, create two N by N matrices on backend2 (use libra_SetCurrentBackend()). */ libra_SetCurrentBackend(backend2); A2 = ones(N); B2 = A2; /* warm up phase of the cpu! (to get accurate timing results) */ C2 = A2 * B2; C2 = A2 * B2; C2 = A2 * B2; C2 = A2 * B2; // Compute backend ratio. libra_SetCurrentBackend(backend2); double startTime = libra_GetTime(); for (int i=0;i