Open sn248 opened 5 years ago
Sorry, forgot to ask - is that expected output? I am assuming that I was supposed to get Hello from thread
and then thread number (not in order) in a separate line. Thanks!
I'm a little confused why each thread seems to think it's thread 0 in your case. Here's what I see when I run it:
Romp::rcpp_hello()
## Hello from thread Hello from thread Hello from thread 32 of of 04
## Hello from thread 1 of 4
## of 4
## 4
If you want it to print neatly (which will break the parallelism - it's basically a more complicated serial program at that point) you can add a barrier:
library(Rcpp)
code = '
#include <omp.h>
#include <Rcpp.h>
// [[Rcpp::export]]
void rcpp_hello_barrier()
{
int tid, nthreads;
#pragma omp parallel default(shared) private(tid, nthreads)
{
tid = omp_get_thread_num();
nthreads = omp_get_num_threads();
for (int id=0; id<nthreads; id++)
{
if (id == tid)
Rcpp::Rcout << "Hello from thread " << tid << " of " << nthreads << std::endl;
#pragma omp barrier
}
}
}
'
Sys.setenv("PKG_CXXFLAGS" = "-fopenmp")
sourceCpp(code=code)
rcpp_hello_barrier()
When I run that, I get
rcpp_hello_barrier()
## Hello from thread 0 of 4
## Hello from thread 1 of 4
## Hello from thread 2 of 4
## Hello from thread 3 of 4
Could you run the one with the barrier and show me the output?
Thank you very much for your reply. I apologize for my late answer..but it seems adding barrier works, here is my output
Hello from thread 0 of 8
Hello from thread 1 of 8
Hello from thread 2 of 8
Hello from thread 3 of 8
Hello from thread 4 of 8
Hello from thread 5 of 8
Hello from thread 6 of 8
Hello from thread 7 of 8
I am going to study your package a bit more to see how I can implement openMP in my package. Thanks.
Hi
I am getting the following output on executing
Romp::rcpp_hello()
I am using
R
version3.5.0
onmacOS Mojave
. Thank you for your package!