From Olaf.Schenk at unibas.ch  Mon Nov  7 19:57:28 2005
From: Olaf.Schenk at unibas.ch (Olaf.Schenk@unibas.ch)
Date: Mon,  7 Nov 2005 19:57:28 +0100
Subject: [Rd] R thread safe
Message-ID: <1131389848.436fa39855a52@webmail.unibas.ch>

Dear R-dev,

I would like to accelerate my R computation by using parallel OpenMP compilers
(e.g from Pathscale) on a 2-processor AMD server and I would like to know
whether R is a tread safe library. The main kernel of the OpenMP
parallelization is a C SEXP function that performs the computational routine in
parallel with:

*******************
SEXP example(SEXP list, SEXP expr, SEXP rho)
     {
       R_len_t i, n = length(list);
       SEXP ans, alocal;

       omp_lock_t lck;
       PROTECT(ans = allocVector(VECSXP, n));
       ans = allocVector(VECSXP, n);
       omp_init_lock(&lck);
#pragma omp parallel for default(none) private(i, alocal) shared(list,
lck,rho, ans, n, expr)
       for(i = 0; i < n; i++) {

          omp_set_lock(&lck);
             PROTECT(alocal = allocVector(VECSXP, 1));
             alocal = allocVector(VECSXP, 1);
             defineVar(install("x"), VECTOR_ELT(list, i), rho);
          omp_unset_lock(&lck);

          /* do computational kernel in parallel */
          alocal = eval(expr, rho);

          omp_set_lock(&lck);
             SET_VECTOR_ELT(ans, i, alocal);
             UNPROTECT(1);
          omp_unset_lock(&lck);

       }
       setAttrib(ans, R_NamesSymbol, getAttrib(list, R_NamesSymbol));
       UNPROTECT(1);
       return(ans);
}

***********

The code works fine using one thread and breaks currently down with 2 threads. 
I am using a recent R distribution and  the complete R code is compile with
"-openmp" and the Pathscale compiler suite.

Thanks in advance,
Olaf



[Rd] R thread safe
Olaf.Schenk@unibas.ch