Próbuję zmierzyć prędkość kodu w pewnej pętli:
#include <iostream>
#include <cmath>
#include <stdio.h>
#include <stdint.h>
#include <chrono>
int main()
{
double a = 0;
uint64_t k = 4294967295;
uint64_t x = 4294967295;
uint64_t result;
uint64_t counter = 0;
for(int i=0; i<100; i++)
{
auto begin = std::chrono::high_resolution_clock::now();
for(uint64_t i=0; i<100000000; i++)
{
k += x;
x = x*k;
x ^= (counter += 1);
result = (k*x >> 16) ^ x;
}
auto end = std::chrono::high_resolution_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin);
printf("Time measured: %.3f seconds.\n", elapsed.count() * 1e-9);
a = a + (elapsed.count() * 1e-9);
}
__asm__ volatile("" : "+g" (result) : : );
std::cout << a/100;
}
I wstawiłem tam asm volatile("" : "+g" (result) : : );, żeby nie dostawać w wyniku samych zerowych czasów wykonania. Niestety, pomimo, że działało to w Code Blocks, to w Visual Studio nie działa, dostaję błąd "asm jest niezdefiniowany". Czy można to jakoś naprawić?