    #include
    #include
    #include

    long popcnt_array ( long *a, int size );

    double time()
    {
        struct tms t;
        times(&t);
        return (t.tms_utime+t.tms_stime)/100.0;
    }

    int main ( int argc, char **argv )
    {
        long n;
        int size, count;
        int i;
        double start, end;
        long *a;

        size = argc > 1 ? atoi(argv[1]) : 100000;
        count = argc > 2 ? atoi(argv[2]) : 1000;

        a = (long *) malloc ( size * sizeof(long) );
        //srandom(time(NULL));
        srandom(1);
        for ( i = 0; i < size; i++ ) {
            a[i] = random()<<32 | random();
        }
        start = time();
        for ( i = 0; i < count; i++ ) {
            n = popcnt_array ( a, size );
        }
        end = time();
        printf("count %ld\n",n);
        printf("elapsed %10.4f\n",end-start);
        return 0;
    }