コード例 #1
0
// Helper function to keep code base small
void gport_ima_bench(struct rusage *_start,
                     struct rusage *_finish,
                     unsigned long int *_num_iterations,
                     unsigned int _n)
{
    // initialize port
    gport p = gport_create(2*_n-1,sizeof(int));

    int w[_n];  // external buffer for writing
    int r[_n];  // external buffer for reading

    unsigned long int i;

    // start trials:
    //   write to port, read from port
    getrusage(RUSAGE_SELF, _start);
    for (i=0; i<(*_num_iterations); i++) {
        // producer: write data to port from external buffer
        gport_produce(p,(void*)w,_n);

        // consumer: read data from port to external buffer
        gport_consume(p,(void*)r,_n);
    }
    getrusage(RUSAGE_SELF, _finish);
    *_num_iterations *= _n;

    gport_destroy(p);
}
コード例 #2
0
// consumer uses indirect memory access
void consumer_handler ( void *_ptr )
{
    gport p = (gport) _ptr;
    unsigned int i, n=0;
    int r[CONSUMER_SIZE_MAX];
    unsigned int num_samples_remaining = NUM_SAMPLES_TOTAL;

    while (num_samples_remaining > 0) {
        // randomly choose consumer size
        unsigned int k = (rand() % CONSUMER_SIZE_MAX) + 1;
        if (k > num_samples_remaining)
            k = num_samples_remaining;

        printf("  consumer waiting for %u samples...\n", k);
        gport_consume(p,(void*)r, k);

        for (i=0; i<k; i++)
            printf("  %3u: %d\n", n++, r[i]);

        num_samples_remaining -= k;
    }

    printf("  consumer exiting thread\n");
    pthread_exit(0); // exit thread
}
コード例 #3
0
void consumer_handler ( void *_ptr )
{
    gport p = (gport) _ptr;
    unsigned int i, j, n=0;
    int r[CONSUMER_SIZE];
    int eom;

    for (i=0; i<10; i++) {
        printf("  consumer waiting for %u samples...\n", CONSUMER_SIZE);
        eom = gport_consume(p,(void*)r,CONSUMER_SIZE);

        if (eom) {
            printf("consumer received eom\n");
            break;
        }

        for (j=0; j<CONSUMER_SIZE; j++)
            printf("  %3u: %d\n", n++, r[j]);
    }

    // give producer time to finish writing buffer, then broadcast eom
    usleep(300000);
    gport_signal_eom(p);

    printf("  consumer exiting thread\n");
    pthread_exit(0); // exit thread
}