для рабочего кода.

от вопрос уже есть ответ здесь:

Получить количество тактов процессора? 4 ответа

Я успешно написал несколько встроенных ассемблеров в gcc, чтобы они вращались вправо, следуя некоторым хорошим инструкциям:http://www.cs.dartmouth.edu/~sergey/cs108/2009/gcc-inline-asm.pdf

Вот пример:

static inline int ror(int v) {
    asm ("ror %0;" :"=r"(v) /* output */ :"0"(v) /* input */ );
    return v;
}

Тем не менее, я хочу, чтобы код подсчитывал тактовые циклы, и видел некоторые в неправильном (вероятно, Microsoft) формате. Я не знаю, как сделать эти вещи в GCC. Любая помощь?

unsigned __int64 inline GetRDTSC() {
   __asm {
      ; Flush the pipeline
      XOR eax, eax
      CPUID
      ; Get RDTSC counter in edx:eax
      RDTSC
   }
}

Я старался:

static inline unsigned long long getClocks() {
    asm("xor %%eax, %%eax" );
    asm(CPUID);
    asm(RDTSC : : %%edx %%eax); //Get RDTSC counter in edx:eax

но я не знаю, как заставить пару edx: eax возвращаться как 64 бита чисто, и не знаю, как действительно очистить конвейер.

Кроме того, лучший исходный код, который я нашел, был по адресу:http://www.strchr.com/performance_measurements_with_rdtsc

и это было упоминание о Pentium, так что, если есть разные способы сделать это на разных вариантах Intel / AMD, пожалуйста, дайте мне знать. Я бы предпочел что-то, что работает на всех платформах x86, даже если это немного некрасиво, ряду решений для каждого варианта, но я не прочь узнать об этом.

Ответы на вопрос(2)

Ваш ответ на вопрос