⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timing.c

📁 [Game.Programming].Academic - Graphics Gems (6 books source code)
💻 C
字号:
/*// timing.c////// Performance test of the sugguested ellipsoid generation method.// The fastest execution time among 100 runs of ellipsoid generation method// subtracted by the fastest execution time among 100 runs of gettimeofday// system call is output.//// A comparison is made to the IRIS GL sphere library.//// Here, depth denote the degree of subdivision.*/#include "ellipsoid.h"#include <gl/gl.h>#include <gl/sphere.h>#include <stdio.h>#include <sys/time.h>struct timeval t0, t1;long microsec;#define max_depth 105#define max_run   100struct {    long init;    long seq;    long par;    long libsphere;} timing[max_depth];int main (){    object ellipsoid;    int depth;    int run;    long min_syscall = -1;    long min_init = -1;    long min_seq = -1;    long min_par = -1;    long min_libsphere_draw = -1;    long min_libsphere = -1;    /*    // Find the fastest execution time among 100 runs    // of gettimeofday system call.    */    for (run = 1; run <= max_run; run++) {        gettimeofday (&t0);        gettimeofday (&t1);        microsec = (t1.tv_sec-t0.tv_sec)*1000000 + (t1.tv_usec-t0.tv_usec);        if (min_syscall > microsec || min_syscall < 0)            min_syscall = microsec;    }    /*    // Find the fastest execution time among 100 runs    // of ellipsoid initialization for each depth.    */    for (depth = 1; depth <= max_depth; depth++) {        for (run = 1; run <= max_run; run++) {            gettimeofday (&t0);            ellipsoid_init (depth);            gettimeofday (&t1);            ellipsoid_done ();            microsec = (t1.tv_sec-t0.tv_sec)*1000000 + (t1.tv_usec-t0.tv_usec);            if (min_init > microsec || min_init < 0)                min_init = microsec;        }        min_init -= min_syscall;        timing[depth-1].init = min_init;        min_init = -1;    }    /*    // Find the fastest execution time among 100 runs    // of ellipsoid generation by ellipsoid_seq() for each depth.    */    ellipsoid_init (max_depth);    for (depth = 1; depth <= max_depth; depth++) {        for (run = 1; run <= max_run; run++) {            gettimeofday (&t0);            ellipsoid_seq (&ellipsoid, depth, 1.0, 2.0, 3.0);            gettimeofday (&t1);            ellipsoid_free (&ellipsoid);            microsec = (t1.tv_sec-t0.tv_sec)*1000000 + (t1.tv_usec-t0.tv_usec);            if (min_seq > microsec || min_seq < 0)                min_seq = microsec;        }        min_seq -= min_syscall;        timing[depth-1].seq = min_seq;        min_seq = -1;    }    /*    // Find the fastest execution time among 100 runs    // of ellipsoid generation by ellipsoid_par() for each depth.    */    ellipsoid_init (max_depth);    for (depth = 1; depth <= max_depth; depth++) {        for (run = 1; run <= max_run; run++) {            gettimeofday (&t0);            ellipsoid_par (&ellipsoid, depth, 1.0, 2.0, 3.0);            gettimeofday (&t1);            ellipsoid_free (&ellipsoid);            microsec = (t1.tv_sec-t0.tv_sec)*1000000 + (t1.tv_usec-t0.tv_usec);            if (min_par > microsec || min_par < 0)                min_par = microsec;        }        min_par -= min_syscall;        timing[depth-1].par = min_par;        min_par = -1;    }    /*    // Find the fastest execution time among 100 runs    // of sphere generation by IRIS GL sphere library for each depth.    */    foreground ();    noport ();    winopen ("");    sphmode (SPH_TESS, SPH_OCT); /* octahedral subdivision */    sphmode (SPH_PRIM, SPH_POLY);    for (depth = 1; depth <= SPH_MAXDEPTH; depth++) {        static float sphparams[] = { 0.0, 0.0, 0.0, 1.0 };        /*        // Find the fastest execution time among 100 runs        // of sphere drawing by IRIS GL sphere library.        */        sphmode (SPH_DEPTH, depth);        sphdraw (sphparams); /* generation and drawing of the sphere */        for (run = 1; run <= max_run; run++) {            finish (); /* block until the geometry pipeline is empty */            gettimeofday (&t0);            sphdraw (sphparams); /* drawing only without generation */            gettimeofday (&t1);            microsec = (t1.tv_sec-t0.tv_sec)*1000000 + (t1.tv_usec-t0.tv_usec);            if (min_libsphere_draw > microsec || min_libsphere_draw < 0)                min_libsphere_draw = microsec;        }        sphfree ();        min_libsphere_draw -= min_syscall;        /*        // Find the fastest execution time among 100 runs        // of sphere generation by IRIS GL sphere library.        */        for (run = 1; run <= max_run; run++) {            sphmode (SPH_DEPTH, depth);            finish ();            gettimeofday (&t0);            sphdraw (sphparams); /* generation and drawing of the sphere */            gettimeofday (&t1);            sphfree ();            microsec = (t1.tv_sec-t0.tv_sec)*1000000 + (t1.tv_usec-t0.tv_usec);            if (min_libsphere > microsec || min_libsphere < 0)                min_libsphere = microsec;        }        min_libsphere -= min_libsphere_draw + min_syscall;        timing[depth-1].libsphere = min_libsphere;        min_libsphere = -1;    }    for (depth = 1; depth <= max_depth; depth++) {        printf ("depth = %3d: nv = %8d, nf = %8d, init = %8d, seq = %8d, par = %8d",            depth, 4*depth*depth + 2, 8*depth*depth,            timing[depth-1].init, timing[depth-1].seq, timing[depth-1].par);        if (depth <= SPH_MAXDEPTH)            printf (", libsphere = %8d", timing[depth-1].libsphere);        printf ("\n");    }    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -