From |gn@c|o82 @end|ng |rom gm@||@com  Fri Feb  1 22:51:10 2019
From: |gn@c|o82 @end|ng |rom gm@||@com (Ignacio Martinez)
Date: Fri, 1 Feb 2019 16:51:10 -0500
Subject: [Rd] Set the number of threads using openmp with .Fortran?
Message-ID: <CAJA1VFy0ub73Wa_rWFv1Vcvthsjp7_AC9OBd=1pMnr+59HSBXQ@mail.gmail.com>

Hi everybody,

I'm trying to develop an R package with Fortran and OpenMP. I wrote a
simple hello world but I'm not able to set the number of threads. I found this
old email chain
<http://r.789695.n4.nabble.com/Set-the-number-of-threads-using-openmp-with-C-td2284685.html>
and
I tried to set my compile instructions accordingly but i had no luck.

*This is my makevars:*

PKG_FCFLAGS="-fno-stack-protector"
F90FLAGS =  "-fopenmp"
LDFLAGS = "-fopenmp"

*This is my Fortran module:*

module hello_openmp
   use omp_lib
   implicit none
   contains

subroutine hello(ncores) bind(C, name="hello_")
  use, intrinsic                                         :: iso_c_binding,
only : c_double, c_int
  integer(c_int), intent(in)                             :: ncores
  integer                                                :: iam
  ! Specify number of threads to use:
  !$call omp_set_num_threads(ncores)
  !$omp parallel private(iam)
  iam=omp_get_thread_num()
  !$omp critical
  write(*,*) 'Hello from', iam
  !$omp end critical
  !$omp end parallel
end subroutine hello

end module hello_openmp


*and this is my R function:*

#'@export
#'@useDynLib helloOpenMP, .registration = TRUE

hello <- function(ncores=4) {
  .Fortran("hello", ncores = as.integer(ncores))
}


*Alas, when I call hello things only run with one thread:*

> hello(ncores = 2)$ncores
 Hello from           0
[1] 2


Could you point me in the right direction? What am I missing?


Thanks,


Ignacio

	[[alternative HTML version deleted]]



[Rd] Set the number of threads using openmp with .Fortran?
Ignacio Martinez