Исполнение профиля C

Итак, просто для удовольствия и из любопытства я хотел посмотреть, что выполняется быстрее при выполнении четной -нечетной проверки, модуля или побитовых сравнений.

Итак, я накрутил следующее, но не уверен, что оно ведет себя корректно, так как разница настолько мала. Я где-то читал в Интернете, что побитовая проверка должна быть на порядок быстрее, чем проверка модуля.

Возможно ли, что он оптимизируется? Я только начал возиться со сборкой, иначе я бы попытался немного разобрать исполняемый файл.

РЕДАКТИРОВАТЬ 3:Вот рабочий тест, большое спасибо @phonetagger:

#include <stdio.h>
#include <time.h>
#include <stdint.h>

// to reset the global
static const int SEED = 0x2A;

// 5B iterations, each
static const int64_t LOOPS = 5000000000;

int64_t globalVar;

// gotta call something
int64_t doSomething( int64_t input )
{
  return 1 + input;
}

int main(int argc, char *argv[]) 
{
  globalVar = SEED;

  // mod  
  clock_t startMod = clock();

  for( int64_t i=0; i<LOOPS; ++i )
  {    
    if( ( i % globalVar ) == 0 )
    {
      globalVar = doSomething(globalVar);      
    }    
  }

  clock_t endMod = clock();

  double modTime = (double)(endMod - startMod) / CLOCKS_PER_SEC;

  globalVar = SEED;

  // bit
  clock_t startBit = clock();

  for( int64_t j=0; j<LOOPS; ++j )
  {
    if( ( j & globalVar ) == 0 )
    {
      globalVar = doSomething(globalVar);
    }       
  }

  clock_t endBit = clock();

  double bitTime = (double)(endBit - startBit) / CLOCKS_PER_SEC;

  printf("Mod: %lf\n", modTime);
  printf("Bit: %lf\n", bitTime);  
  printf("Dif: %lf\n", ( modTime > bitTime ? modTime-bitTime : bitTime-modTime ));
}

5 миллиардов итераций каждого цикла с глобальным удалением оптимизации компилятора дают следующее:

Mod: 93.099101
Bit: 16.701401
Dif: 76.397700
5
задан Josh 19 July 2012 в 23:09
поделиться