gomp-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gomp-discuss] stublib


From: Lars Segerlund
Subject: [Gomp-discuss] stublib
Date: Fri, 21 Feb 2003 10:29:11 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.2.1) Gecko/20021226 Debian/1.2.1-9


 I took the stublib from the standard, since it would be a start for us.

Attaching it, but where do I put it ? Do we put everything in testing for now and move it into the proper places when we get further ?

 / Lars Segerlund.
#include <stdio.h>
#include <stdlib.h>
#include "omp.h"

#ifdef __cplusplus
extern  "C"     { 
#endif

void omp_set_num_threads(int num_threads) { }

int omp_get_num_threads(void) {   return 1; }

int omp_get_max_threads(void) {   return 1; }

int omp_get_thread_num(void) {   return 0; }

int omp_get_num_procs(void) {   return 1; }

void omp_set_dynamic(int dynamic_threads) { }

int omp_get_dynamic(void) {   return 0; }

int omp_in_parallel(void) {   return 0; }

void omp_set_nested(int nested) { }

int omp_get_nested(void) {   return 0; }

enum {UNLOCKED = -1, INIT, LOCKED};

void omp_init_lock(omp_lock_t *lock){   *lock = UNLOCKED; }

void omp_destroy_lock(omp_lock_t *lock) {   *lock = INIT; }

void omp_set_lock(omp_lock_t *lock)
{
        if (*lock == UNLOCKED) {
                *lock = LOCKED;
        } else if (*lock == LOCKED) {
                fprintf(stderr, "error: deadlock in using lock variable\n");
                exit(1);
        } else {
                fprintf(stderr, "error: lock not initialized\n");
                exit(1);   }
}

void omp_unset_lock(omp_lock_t *lock) 
{
        if (*lock == LOCKED) {
                *lock = UNLOCKED;   
        } else if (*lock == UNLOCKED) {
                fprintf(stderr, "error: lock not set\n");
                exit(1);
        } else {
                fprintf(stderr, "error: lock not initialized\n");
                exit(1);
        }
}


int omp_test_lock(omp_lock_t *lock)i
{
        if (*lock == UNLOCKED) {
                *lock = LOCKED;
                return 1;
        } else if (*lock == LOCKED) {
                return 0;
        } else {     
                fprintf(stderr, "error: lock not initialized\n");
                exit(1);
        }
}

#ifndef OMP_NEST_LOCK_T
typedef struct {  /* This really belongs in omp.h */    
        int owner;
        int count;
} omp_nest_lock_t;
#endif

enum {MASTER = 0};

void omp_init_nest_lock(omp_nest_lock_t *lock)
{
        lock->owner = UNLOCKED;
        lock->count = 0;
}

void omp_destroy_nest_lock(omp_nest_lock_t *lock)
{
        lock->owner = UNLOCKED;   
        lock->count = UNLOCKED;
}

void omp_set_nest_lock(omp_nest_lock_t *lock)
{
        if (lock->owner == MASTER && lock->count >= 1) {
                lock->count++;
        } else if (lock->owner == UNLOCKED && lock->count == 0) {
                lock->owner = MASTER;
                lock->count = 1;
        } else {
                fprintf(stderr, "error: lock corrupted or not initialized\n");
                exit(1);
        }
}

void omp_unset_nest_lock(omp_nest_lock_t *lock)
{
        if (lock->owner == MASTER && lock->count >= 1) {
                lock->count--;
                if (lock->count == 0) {
                        lock-> owner = UNLOCKED;
                }
        } else if (lock->owner == UNLOCKED && lock->count == 0) {
                fprintf(stderr, "error: lock not set\n");
                exit(1);
        } else {
                fprintf(stderr, "error: lock corrupted or not initialized\n");
                exit(1);
        } 
}
                         
int omp_test_nest_lock(omp_nest_lock_t *lock)
{
        omp_set_nest_lock(lock);
        return lock->count;
}
                         
double omp_get_wtime(void)
{
        /* This function does not provide a working wallclock
         * timer. Replace it with a version customized for 
         * the target machine.
         */

        return 0.0;
}
                         
double omp_get_wtick(void)
{
        /* This function does not provide a working clock 
         * tick function. Replace it with a version customized
         * for the target machine .
         */
        
        return 365. * 86400.;
}
                         
#ifdef __cplusplus
}
#endif

reply via email to

[Prev in Thread] Current Thread [Next in Thread]