ParallelDo and C-compiled routines
- To: mathgroup at smc.vnet.net
- Subject: [mg121732] ParallelDo and C-compiled routines
- From: DmitryG <einschlag at gmail.com>
- Date: Wed, 28 Sep 2011 02:46:17 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
Hi All, I am going to run several instances of a long calculation on different cores of my computer and then average the results. The program looks like this: SetSharedVariable[Res]; ParallelDo[ Res[[iKer]] = LongRoutine; , {iKer, 1, NKer}] LongRoutine is compiled. When compiled in C, it is two times faster than when compiled in Mathematica. In the case of a Do cycle, this speed difference can be seen, However, in the case of ParallelDo I have the speed of the Mathematica-compiled routine independently of the CompilationTarget in LongRoutine, even if I set NKer=1. What does it mean? Are routines compiled in C unable of parallel computing? Or there is a magic option to make them work? I tried Parallelization->True but there is no result, and it seems this option is for applying the routine to lists. Here is an example: ************************************************************ NKer = 1; (* Subroutine compiled in Mathematica *) m = Compile[ {{x, _Real}, {n, _Integer}}, Module[ {sum, inc}, sum = 1.0; inc = 1.0; Do[inc = inc*x/i; sum = sum + inc, {i, n}]; sum]]; (* Subroutine compiled in C *) c = Compile[ {{x, _Real}, {n, _Integer}}, Module[ {sum, inc}, sum = 1.0; inc = 1.0; Do[inc = inc*x/i; sum = sum + inc, {i, n}]; sum], CompilationTarget -> "C"]; (* There is a difference between Mathematica and C *) Do[ Print[AbsoluteTiming[m[1.5, 10000000]][[1]]]; Print[AbsoluteTiming[c[1.5, 10000000]][[1]]]; , {iKer, 1, NKer}] Print[]; (* With ParallelDo there is no difference *) ParallelDo[ Print[AbsoluteTiming[m[1.5, 10000000]][[1]]]; Print[AbsoluteTiming[c[1.5, 10000000]][[1]]]; , {iKer, 1, NKer}] ************************************************************** Any help? Best, Dmitry