#if 0
以下のようなコードがあったとする
for(i=0;i<100;i++){
/*
コード20行
*/
}
この20行のコードの最後に、変数xによって二分岐させたい部分が1行だけある
この場合、コードの見やすさを優先すべきか、処理効率を優先すべきか
コードの見やすさ優先
for(i=0;i<100;i++){
/* コード19行 */
if (x==0) /* 処理 */
else /* 処理 */
}
処理効率優先
if (x=0){
for(i=0;i<100;i++){
/* コード20行 */
}
}else{
for(i=0;i<100;i++){
/* コード20行 */
}
}
#endif
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10000000
#define M 6
typedef int (*IndexGenerator)(int);
typedef void (*BenchProcessor)(void);
typedef struct {
const char* tag;
IndexGenerator generator;
} BenchType;
double bm_clock_mark(){
static clock_t certain_time;
clock_t previous;
previous = certain_time;
return (double)(certain_time - previous)/(CLOCKS_PER_SEC);
}
double do_bench( BenchProcessor procs[], IndexGenerator gen, int rounds, int loops ){
static int induces[N];
int i, j;
// prepare induces.
for (i = 0; i < loops; i++)
induces[i] = gen(i);
bm_clock_mark();
for( i = 0; i < rounds; i++ )
for( j = 0; j < loops; j++ )
procs[ induces[j] ]();
return bm_clock_mark();
}
// actual functions
static int sum = 0;
void func1(){ sum++; }
void func2(){ sum--; }
// index generators (i = 1 ... N-1)
int gen_0101(int i){ return (i % 2); }
int gen_0011(int i){ return (i % 4) < 2 ? 0 : 1; }
int gen_001 (int i){ return (i % 3) != 0 ? 0 : 1; }
int gen_rand
(int i
){ return ( rand() & 0x01 ); }
int main(void){
int i;
double elapsed;
BenchType b;
BenchProcessor procs[] = { func1, func2 };
BenchType stages[] = {
{"0101010101", gen_0101},
{"001001001", gen_001 },
{"00110011", gen_0011},
{"randomized", gen_rand}
};
printf("N = %d, M = %d\n",N
,M
); printf("%16s %8s %12s\n","pattern","time(s)","sum");
for( i = 0; i < (sizeof(stages)/sizeof(BenchType)); i++ ){
b = stages[i];
sum = 0;
elapsed = do_bench(procs,b.generator,M,N);
printf("%16s .... %8.2f %12d\n",b.
tag, elapsed
, sum
); }
return 0;
}
I2lmIDAK5Lul5LiL44Gu44KI44GG44Gq44Kz44O844OJ44GM44GC44Gj44Gf44Go44GZ44KLCgpmb3IoaT0wO2k8MTAwO2krKyl7CuOAgOOAgOOAgC8qCuOAgOOAgOOAgOOAgOOCs+ODvOODiTIw6KGMCuOAgOOAgOOAgCovCn0KCuOBk+OBrjIw6KGM44Gu44Kz44O844OJ44Gu5pyA5b6M44Gr44CB5aSJ5pWweOOBq+OCiOOBo+OBpuS6jOWIhuWykOOBleOBm+OBn+OBhOmDqOWIhuOBjDHooYzjgaDjgZHjgYLjgosK44GT44Gu5aC05ZCI44CB44Kz44O844OJ44Gu6KaL44KE44GZ44GV44KS5YSq5YWI44GZ44G544GN44GL44CB5Yem55CG5Yq5546H44KS5YSq5YWI44GZ44G544GN44GLCgrjgrPjg7zjg4njga7opovjgoTjgZnjgZXlhKrlhYgKZm9yKGk9MDtpPDEwMDtpKyspewrjgIDjgIDjgIAvKiDjgrPjg7zjg4kxOeihjCAqLwrjgIDjgIDjgIBpZiAoeD09MCkgLyog5Yem55CGICovCuOAgOOAgOOAgGVsc2UgLyog5Yem55CGICovCn0KCuWHpueQhuWKueeOh+WEquWFiAppZiAoeD0wKXsK44CA44CA44CAZm9yKGk9MDtpPDEwMDtpKyspewrjgIDjgIDjgIDjgIDjgIDjgIAvKiDjgrPjg7zjg4kyMOihjCAqLwrjgIDjgIDjgIB9Cn1lbHNlewrjgIDjgIDjgIBmb3IoaT0wO2k8MTAwO2krKyl7CuOAgOOAgOOAgOOAgOOAgOOAgC8qIOOCs+ODvOODiTIw6KGMICovCuOAgOOAgOOAgH0KfQojZW5kaWYKCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDx0aW1lLmg+CgojZGVmaW5lIE4gMTAwMDAwMDAKI2RlZmluZSBNIDYKCnR5cGVkZWYgaW50ICAoKkluZGV4R2VuZXJhdG9yKShpbnQpOwp0eXBlZGVmIHZvaWQgKCpCZW5jaFByb2Nlc3Nvcikodm9pZCk7CnR5cGVkZWYgc3RydWN0IHsKCWNvbnN0IGNoYXIqIHRhZzsKCUluZGV4R2VuZXJhdG9yIGdlbmVyYXRvcjsKfSBCZW5jaFR5cGU7Cgpkb3VibGUgYm1fY2xvY2tfbWFyaygpewoJc3RhdGljIGNsb2NrX3QgY2VydGFpbl90aW1lOwoJY2xvY2tfdCBwcmV2aW91czsKCglwcmV2aW91cyA9IGNlcnRhaW5fdGltZTsKCWNlcnRhaW5fdGltZSA9IGNsb2NrKCk7CgoJcmV0dXJuIChkb3VibGUpKGNlcnRhaW5fdGltZSAtIHByZXZpb3VzKS8oQ0xPQ0tTX1BFUl9TRUMpOwp9Cgpkb3VibGUgZG9fYmVuY2goIEJlbmNoUHJvY2Vzc29yIHByb2NzW10sIEluZGV4R2VuZXJhdG9yIGdlbiwgaW50IHJvdW5kcywgaW50IGxvb3BzICl7CglzdGF0aWMgaW50IGluZHVjZXNbTl07CglpbnQgaSwgajsKCQoJLy8gcHJlcGFyZSBpbmR1Y2VzLgoJZm9yIChpID0gMDsgaSA8IGxvb3BzOyBpKyspCgkJaW5kdWNlc1tpXSA9IGdlbihpKTsKCglibV9jbG9ja19tYXJrKCk7Cglmb3IoIGkgPSAwOyBpIDwgcm91bmRzOyBpKysgKQoJCWZvciggaiA9IDA7IGogPCBsb29wczsgaisrICkKCQkJcHJvY3NbIGluZHVjZXNbal0gXSgpOwoKCXJldHVybiBibV9jbG9ja19tYXJrKCk7Cn0KCgovLyBhY3R1YWwgZnVuY3Rpb25zCnN0YXRpYyBpbnQgc3VtID0gMDsKdm9pZCBmdW5jMSgpeyBzdW0rKzsgfQp2b2lkIGZ1bmMyKCl7IHN1bS0tOyB9CgovLyBpbmRleCBnZW5lcmF0b3JzIChpID0gMSAuLi4gTi0xKQppbnQgZ2VuXzAxMDEoaW50IGkpeyByZXR1cm4gKGkgJSAyKTsgfQppbnQgZ2VuXzAwMTEoaW50IGkpeyByZXR1cm4gKGkgJSA0KSA8ICAyID8gMCA6IDE7IH0KaW50IGdlbl8wMDEgKGludCBpKXsgcmV0dXJuIChpICUgMykgIT0gMCA/IDAgOiAxOyB9CmludCBnZW5fcmFuZChpbnQgaSl7IHJldHVybiAoIHJhbmQoKSAmIDB4MDEgKTsgfQoKaW50IG1haW4odm9pZCl7CglpbnQgaTsKCWRvdWJsZSBlbGFwc2VkOwoJQmVuY2hUeXBlIGI7CgkKCUJlbmNoUHJvY2Vzc29yIHByb2NzW10gPSB7IGZ1bmMxLCBmdW5jMiB9OwoJCglCZW5jaFR5cGUgc3RhZ2VzW10gPSB7CgkJeyIwMTAxMDEwMTAxIiwgZ2VuXzAxMDF9LAoJCXsiMDAxMDAxMDAxIiwgIGdlbl8wMDEgfSwKCQl7IjAwMTEwMDExIiwgICBnZW5fMDAxMX0sCgkJeyJyYW5kb21pemVkIiwgZ2VuX3JhbmR9Cgl9OwoKIAlzcmFuZCh0aW1lKE5VTEwpKTsKICAKCXByaW50ZigiTiA9ICVkLCBNID0gJWRcbiIsTixNKTsKCXByaW50ZigiJTE2cyAgICAgICU4cyAlMTJzXG4iLCJwYXR0ZXJuIiwidGltZShzKSIsInN1bSIpOwoKCWZvciggaSA9IDA7IGkgPCAoc2l6ZW9mKHN0YWdlcykvc2l6ZW9mKEJlbmNoVHlwZSkpOyBpKysgKXsKCQliID0gc3RhZ2VzW2ldOwoJCXN1bSA9IDA7CgkJZWxhcHNlZCA9IGRvX2JlbmNoKHByb2NzLGIuZ2VuZXJhdG9yLE0sTik7CgkJcHJpbnRmKCIlMTZzIC4uLi4gJTguMmYgJTEyZFxuIixiLnRhZywgZWxhcHNlZCwgc3VtKTsKCX0KCglyZXR1cm4gMDsKfQo=