Posted to tcl by patthoyts at Fri Mar 16 13:57:35 GMT 2007view pretty

#define _CRT_SECURE_NO_DEPRECATE

#include <omp.h>
#include <stdio.h>

static void
subdomain(int iam, float *x, int istart, int ipoints)
{
    int i;
    for (i = 0; i < ipoints; i++)
        x[istart+i] = (float)(48 + iam);
}

static void
sub(float *x, int npoints)
{
    int iam, nt, ipoints, istart;

#pragma omp parallel default(shared) private(iam,nt,ipoints,istart)
    {
        iam = omp_get_thread_num();
        nt = omp_get_num_threads();
        ipoints = npoints / nt; /* size of partition */
        istart = iam * ipoints; /* starting array index */
        if (iam == nt-1) /* last thread may do more */
            ipoints = npoints - istart;
        printf("tid %d of %d from %d for %d\n", iam, nt, istart, ipoints);
        subdomain(iam, x, istart, ipoints);
    }
}

int
main(void)
{
    float array[10000];
    FILE *fp = NULL;

    sub(array, 10000);
    fp = fopen("z.dat", "w");
    if (fp) {
        fwrite(array, sizeof(float), 10000, fp);
        fclose(fp);
    }

    return 0;
}