Hello Philippe,
The followings are my codes and steps. I confirmed that the standalone version was compiled with OpenMP by outputting "Hello, OpenMP!" twice (I'm using dual core).
void pi()
{
const int kN = 100000000;
long double top = 0.L;
long double bottom = 0.L;
long double kStep = 1.L/kN;
long double sum = 0.L;
#ifndef __CINT__
#pragma omp parallel
std::cout << "Hello, OpenMP!\n";
#endif
#ifndef __CINT__
#pragma omp parallel private(top, bottom)
#endif
{
#ifndef __CINT__
#pragma omp for reduction(+:sum)
#endif
for(int i = 0; i < kN; i++) {
top = 4.L/(1.L + (kStep*i)*(kStep*i)); bottom = 4.L/(1.L + (kStep*(i+1))*(kStep*(i + 1))); sum += (top + bottom)*kStep/2.L;
int main()
{
pi();
return 0;
}
$ /usr/bin/i686-apple-darwin10-g++-4.2.1 -fopenmp main.cxx -m64 -pipe -Wshadow -W -Wall -Woverloaded-virtual -fsigned-char -fno-common -D_REENTRANT -pthread
$ ./a.out
Hello, OpenMP!
Hello, OpenMP!
pi = 3.141592653589793
Regards,
-- OKUMURA, Akira oxon@{astro.isas.jaxa.jp,stanford.edu} Institute of Space and Astronautical Science (ISAS/JAXA) Now at KIPAC/SLAC/Stanford Varian Physics #306 382 Via Pueblo Mall, MC 406 Stanford, CA94305 TEL 650-736-0971/FAX 650-724-5065 Skype : okumura.akira On 2010/09/15, at 12:50, Philippe Canal wrote: > Hi Akira, > > What are all the steps you take to compile the standalone case? > > Cheers, > Philippe. > > On 9/15/10 1:25 PM, OKUMURA, Akira wrote: >> Hello Philippe, >> >> Thank you again. But I get the same error again. Does this work on your machine? I tried gcc 4.2.1 on Snow Leopard and gcc 4.4.0 on Scientific Linux 5. >> >> $ root >> root [0] TString cmd(gSystem->GetMakeSharedLib()) >> root [1] cmd.ReplaceAll("g++", "g++ -fopenmp") >> (class TString)"cd $BuildDir ; g++ -fopenmp -c $Opt -m64 -pipe -Wshadow -W -Wall -Woverloaded-virtual -fsigned-char -fno-common -D_REENTRANT -pthread $IncludePath $SourceFiles ; MACOSX_DEPLOYMENT_TARGET=10.6 g++ -fopenmp $ObjectFiles -dynamiclib -single_module -undefined dynamic_lookup -lwcs $DepLibs -o $SharedLib" >> root [2] gSystem->SetMakeSharedLib(cmd) >> root [3] .L pi.C++ >> Info in <TUnixSystem::ACLiC>: creating shared library /Users/oxon/./pi_C.so >> In file included from /Users/oxon/pi_C_ACLiC_dict.h:34, >> from /Users/oxon/pi_C_ACLiC_dict.cxx:16: >> /Users/oxon/./pi.C: In function ‘void pi()’: >> /Users/oxon/./pi.C:14: error: expected ‘#pragma omp’ clause before ‘public’ >> i686-apple-darwin10-g++-4.2.1: /Users/oxon/pi_C_ACLiC_dict.o: No such file or directory >> Error in <ACLiC>: Compilation failed! >> >> Regards, >> >> -- >> OKUMURA, Akira oxon@{astro.isas.jaxa.jp,stanford.edu} >> Institute of Space and Astronautical Science (ISAS/JAXA) >> Now at KIPAC/SLAC/Stanford >> Varian Physics #306 >> 382 Via Pueblo Mall, MC 406 Stanford, CA94305 >> TEL 650-736-0971/FAX 650-724-5065 >> Skype : okumura.akira >> >> On 2010/09/15, at 10:30, Philippe Canal wrote: >> >>> Hi Akira, >>> >>> You also need to add *-fopenmp to the compiler invocations. >>> For that do: >>> TString cmd( gSystem->GetMakeSharedLibs ); >>> cmd.ReplaceAll("g++","g++ -fopenmp"); >>> gSystem->SetMakeSharedLibs(cmd); >>> >>> Cheers, >>> Philippe. >>> * >>> On 9/15/10 11:25 AM, OKUMURA, Akira wrote: >>>> Hello Philippe, >>>> >>>> Thanks for the advise. But I still get the same error. >>>> >>>> #include <omp.h> >>>> #include <time.h> >>>> #include <iostream> >>>> >>>> void pi() >>>> { >>>> const Int_t kN = 100000000; >>>> long double top = 0.L; >>>> long double bottom = 0.L; >>>> long double kStep = 1.L/kN; >>>> long double sum = 0.L; >>>> >>>> #ifndef __CINT__ >>>> #pragma omp parallel private(top, bottom) >>>> #endif >>>> { >>>> #ifndef __CINT__ >>>> #pragma omp for reduction(+:sum) >>>> #endif >>>> for(Int_t i = 0; i < kN; i++) { >>>> top = 4.L/(1.L + (kStep*i)*(kStep*i)); >>>> bottom = 4.L/(1.L + (kStep*(i+1))*(kStep*(i + 1))); >>>> sum += (top + bottom)*kStep/2.L; >>>> } // i >>>> } >>>> std::cout.precision(16); >>>> std::cout << "pi = " << sum << "\n"; >>>> } >>>> >>>> root [4] .L pi.C++ >>>> Info in <TUnixSystem::ACLiC>: creating shared library /Users/oxon/./pi_C.so >>>> In file included from /Users/oxon/pi_C_ACLiC_dict.h:34, >>>> from /Users/oxon/pi_C_ACLiC_dict.cxx:16: >>>> /Users/oxon/./pi.C: In function ‘void pi()’: >>>> /Users/oxon/./pi.C:14: error: expected ‘#pragma omp’ clause before ‘public’ >>>> i686-apple-darwin10-g++-4.2.1: /Users/oxon/pi_C_ACLiC_dict.o: No such file or directory >>>> Error in <ACLiC>: Compilation failed! >>>> >>>> Regards, >>>> >>>> -- >>>> OKUMURA, Akira oxon@{astro.isas.jaxa.jp,stanford.edu} >>>> Institute of Space and Astronautical Science (ISAS/JAXA) >>>> Now at KIPAC/SLAC/Stanford >>>> Varian Physics #306 >>>> 382 Via Pueblo Mall, MC 406 Stanford, CA94305 >>>> TEL 650-736-0971/FAX 650-724-5065 >>>> Skype : okumura.akira >>>> >>>> On 2010/09/15, at 8:53, Philippe Canal wrote: >>>> >>>>> Hi, >>>>> >>>>> You need to at least hide the #pragma from CINT: >>>>> >>>>> #ifndef __CINT__ >>>>> #pragma omp parallel private(top, bottom) >>>>> #endif >>>>> { >>>>> #ifndef __CINT__ >>>>> #pragma omp for reduction(+:sum) >>>>> #endif >>>>> for(Int_t i = 0; i < kN; i++) { >>>>> >>>>> Cheers, >>>>> Philippe. >>>>> >>>>> On 9/15/10 10:47 AM, OKUMURA, Akira wrote: >>>>>> Hello ROOTers, >>>>>> >>>>>> Does ACLiC support OpenMP? >>>>>> >>>>>> I started learning OpenMP to improve the speed of my analysis. The following is an example to calculate pi with OpenMP. >>>>>> >>>>>> === pi.C === >>>>>> #include <omp.h> >>>>>> #include <time.h> >>>>>> #include <iostream> >>>>>> >>>>>> void pi() >>>>>> { >>>>>> const Int_t kN = 100000000; >>>>>> long double top = 0.L; >>>>>> long double bottom = 0.L; >>>>>> long double kStep = 1.L/kN; >>>>>> long double sum = 0.L; >>>>>> >>>>>> #pragma omp parallel private(top, bottom) >>>>>> { >>>>>> #pragma omp for reduction(+:sum) >>>>>> for(Int_t i = 0; i < kN; i++) { >>>>>> top = 4.L/(1.L + (kStep*i)*(kStep*i)); >>>>>> bottom = 4.L/(1.L + (kStep*(i+1))*(kStep*(i + 1))); >>>>>> sum += (top + bottom)*kStep/2.L; >>>>>> } // i >>>>>> } >>>>>> std::cout.precision(16); >>>>>> std::cout << "pi = " << sum << "\n"; >>>>>> } >>>>>> ============ >>>>>> >>>>>> But I got the following error. >>>>>> ============ >>>>>> root [0] gSystem->SetIncludePath("-fopenmp") >>>>>> root [1] gSystem->AddLinkedLibs("-lgomp") >>>>>> root [2] .L pi.C+O >>>>>> Info in <TUnixSystem::ACLiC>: creating shared library /Users/oxon/./pi_C.so >>>>>> In file included from /Users/oxon/pi_C_ACLiC_dict.h:34, >>>>>> from /Users/oxon/pi_C_ACLiC_dict.cxx:16: >>>>>> /Users/oxon/./pi.C: In function ‘void pi()’: >>>>>> /Users/oxon/./pi.C:13: error: expected ‘#pragma omp’ clause before ‘public’ >>>>>> i686-apple-darwin10-g++-4.2.1: /Users/oxon/pi_C_ACLiC_dict.o: No such file or directory >>>>>> Error in <ACLiC>: Compilation failed! >>>>>> ============ >>>>>> >>>>>> It seems that some of OpenMP words are not handled properly in generation of a dictionary. I suppose ACLiC does not support OpenMP yet. >>>>>> >>>>>> If ACLiC supports OpenMP, how can I run the script in ROOT? This example runs as I expected in standalone C++ program. >>>>>> >>>>>> I am using ROOT trunk and GCC (i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)) on Snow Leopard. >>>>>> >>>>>> Regards, >>>>>> >>>>>> -- >>>>>> OKUMURA, Akira oxon@{astro.isas.jaxa.jp,stanford.edu} >>>>>> Institute of Space and Astronautical Science (ISAS/JAXA) >>>>>> Now at KIPAC/SLAC/Stanford >>>>>> Varian Physics #306 >>>>>> 382 Via Pueblo Mall, MC 406 Stanford, CA94305 >>>>>> TEL 650-736-0971/FAX 650-724-5065 >>>>>> Skype : okumura.akira >>>>>>Received on Thu Sep 16 2010 - 00:19:10 CEST
This archive was generated by hypermail 2.2.0 : Thu Sep 16 2010 - 05:50:01 CEST