From 77f8904bb3791b7e5be84a6ee1eedb7da57e96d3 Mon Sep 17 00:00:00 2001 From: "O. Odler, 577" Date: Sat, 20 Jul 2024 20:54:31 +0000 Subject: [PATCH] rolling 1.0.2 --- Change | 3 +++ Makefile | 14 ++++++++++++ dist.ini | 2 -- lib/OpenMP.pm | 41 +++++++++++++++++++++++------------ releases/OpenMP-1.0.2.tar.gz | Bin 0 -> 10977 bytes 5 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 Makefile create mode 100644 releases/OpenMP-1.0.2.tar.gz diff --git a/Change b/Change index eda9d41..31beb53 100644 --- a/Change +++ b/Change @@ -3,3 +3,6 @@ 1.0.1 Fri Jul 19 09:07:09 PM UTC 2024 - update POD + +1.0.2 Sat Jul 20 09:07:09 PM UTC 2024 + - update POD diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e082c5f --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +clean: + dzil clean + rm -rf _Inline + +test: clean + dzil test + +prepare: clean + dzil build + mv -vf *.tar.gz ./releases/ + dzil clean + git add ./releases/*.tar.gz + git status + @echo "tag and push ... " diff --git a/dist.ini b/dist.ini index 92b5f8c..d48654c 100644 --- a/dist.ini +++ b/dist.ini @@ -30,5 +30,3 @@ OpenMP::Simple = 0 [PruneFiles] filename = _Inline filename = releases -[ExecDir] -dir = bin diff --git a/lib/OpenMP.pm b/lib/OpenMP.pm index 99b4586..124e0d2 100644 --- a/lib/OpenMP.pm +++ b/lib/OpenMP.pm @@ -6,7 +6,7 @@ use warnings; use OpenMP::Simple; use OpenMP::Environment; -my $VERSION = q{1.0.1}; +my $VERSION = q{1.0.2}; sub new { my ($pkg) = shift; @@ -29,46 +29,47 @@ OpenMP - Metapackage for using OpenMP in Perl =head1 SYNOPSIS + #!/usr/bin/env perl use strict; use warnings; - + use OpenMP; - + use Inline ( C => 'DATA', with => qw/OpenMP::Simple/, ); - + my $omp = OpenMP->new; - + for my $want_num_threads ( 1 .. 8 ) { $omp->env->omp_num_threads($want_num_threads); - + $omp->env->assert_omp_environment; # (optional) validates %ENV - + # call parallelized C function my $got_num_threads = _check_num_threads(); - + printf "%0d threads spawned in ". "the OpenMP runtime, expecting %0d\n", $got_num_threads, $want_num_threads; } - + __DATA__ __C__ - + /* C function parallelized with OpenMP */ int _check_num_threads() { int ret = 0; - - PerlOMP_UPDATE_WITH_ENV__NUM_THREADS /* <~ MACRO x OpenMP::Simple */ - + + PerlOMP_GETENV_BASIC + #pragma omp parallel { #pragma omp single ret = omp_get_num_threads(); } - + return ret; } @@ -79,6 +80,16 @@ also makes documentation and tutorials much more clear. It also makes it easier to install everything needed since this module will pull in L and L. +Installing this module will also install whichever of the following modules are +not already on your system: L, L, L, +and L. + +OpenMP::Simple - provides C MACROS and convenient runtime functions for use in the +Perl environment; e.g., C. + +OpenMP::Environment - provides accessors for environmental variables the OpenMP +run-time considers important; e.g., C. + =head1 METHODS There are just 2 methods, @@ -103,6 +114,8 @@ This is a module that aims at making it easier to bootstrap Perl+OpenMP programs. It is designed to work together with L and L. +B L. + This module heavily favors the C implementation of the OpenMP specification within gcc. In fact, it has not been tested with any other implementations because L doesn't support anything other diff --git a/releases/OpenMP-1.0.2.tar.gz b/releases/OpenMP-1.0.2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..d8f215f397883475bf60d6a9f89057f69ba19a5d GIT binary patch literal 10977 zcmV<7DjwAziwFP!00000|LuKyd)vm*um3GR#g<8rtR9l0WJyk_#BV8yw%JION>WLE z+B^zKLKG?xU~rMllgH#o5dYPtR-H^+tW? z$w&HWG#bzM_MSZ1e)jy?&c6J;zx(8g%6}S9ws-e;pEq{4pYQKIQQJGa&-S0Fy(gdG zCreT{CXi-c99+5K+IDU{bKkQ_`YHbXo%|eKyWzz9xN~eb8vDDu>-T?WZ+l_?pY1p3 zpT_Tb|Ia=FWBnF;L+~~J@G|z*U$a1Mf2|r{H5<>Hjjz@Dsk#^(sh!5ouJebQ@&5lsoM-9@6Q_9t$O zr|r+n|9iXpi~RqL-aqpHC-@m$`-yVn(Y1f;sZkWBt{)~Uz4p}DPtw>QW~m>AN>)>K zZoN3c-@L4*<0y6NrS8lf-MAA^T}83V5 za-FKDqfO>_HJqy`8V6on*X`-QtJw4Meg|qEWoqPxD)w^dXtY$h;dqPYCfVd)&G8@$ z$6oAU8HqdfRO-c3TBa-v5UD*ii=#>GPNx7jASIY#1<5=~y(x{5c)=CHA%F;zs4JfY z-yMxI@j@>q!88WU#{@~U`G5Q%aGTBZAe;DMv)S|9G0l6sUvE6yss9HHuanMEyW4Mn zM*b(pCuP6D|9g9n`v24M|L>472i!5bDmuQuo8!2f-2PSfLcL-h4%B%z4E&Kg@kd^m zcmQRFC&{&NH=4hswUVS$eS@Z#5iP@oU_4NsPfcQ#3&yIV^*$xjhENi#Xogmsgoims z2uNt;ZPC&h3PhDwoD$*+Kq`(?tJT!tUTCZ8`(oOc-Z0MGcuq#xS6?gYyh7?8{ff=4 zsz7EN%jU7v|Fv+T@A40i)b6%>trK;AaY!;rX}Pqr`F*2XD?Hj1RABp7?Oj!M!cpB( zd)w5+4Q~R{R{fNQ^smxu^)iT}xT+4LBt_HH7I~>V+uM!W_Or&eQWyOe&DN%^oJS$! zmITPuPoWgjh`9*FuPk<;wnLhDikH5ZI6}SDQ{z{Sqfs{XLIQ!>s}Vdi5HoQNH3}o* zrXYy!ym5Us7R}Fj?77on;F*0g!@Cng1jc8+nbN`v+89OCnHv&RDkWUf0&YBSM!K93 z?GP=4M5kUnnhVTPV)dvibvS3!A$Ajj9b{i73&$`Qs4Gl8q9R5Tu_)m^rQKm(0o9G8 zDc&U401EhHEO`9RG0@g()MV=35RGQkjD?9sRXk``Iku)kitU zuOgX^BnN__qvpifDq<0!1(3R9{J0t6DTX{Hk(8pPSVn$Yciw1enI$YF0V`ubkC0TU zdBnT?!?hQxJ6hk&b8mqB1=gfjfF<^>yg0`2G>^t(6(r-#Vp<`sy+89t{*^x>oXo2t z1Xp8%5IFV{e-g?b0nLs^vj{bH?cNH~tqq&Ne01;JIiw%S+CUSz0of@)&c}(pk%w*x zEqw%n8hhvs#7w-D$^MEP-Vu?|pH(OCiZ+@uO1sbYr>AJ*^aJwR z2^E^eG)5guDi!-=W0JL)Mt`on85J+-h4W)kSmEO_jrQR%Qs;AqVmN`{MFVUa#bZ3(g zMVzbY!BPcx*FND6s7Ux_;7y2CS;Zu*`m~Oz+FMyRw(R*B>Q;~tB7kzw#m2CJ+DOb& zFew#lZ%~6-ma@Lk(&HNRLO>?D!3)h6 zg=1fM7zn~{lDw&w{ceznpk%}YQd8If^lsJUu(^yzCsc@BmXb>WXbdqbyp+q_7pJMkVV)T9_!uyC}X9 zs&?`yg9~)hNNN_iqr%)SSmrtkAORD1uI->HDVU*W(Y&@vxnEki1O(!0^`@^PN6QW-bay-^9ROw_ho(Xjq{1Y#T^CvD&L3i- z=I)h1xRGd8?XaqLladw(xPHj1oRSlmk-R4a-ui6o<$9aIo%y3I%94O*cZhD{h>R3c zVDv=0USKVjQ5r~PwX(=VQxArrMT`R1CmR(&8_9DZW-PI@J4$mUBHgsW;(Zsh&rjA` zhhplXvpY<@kS2wK!-nQFp^aEUG>zJWOv_~wF zrhW)fW%fUTjAkYzYXajig|bySmU(ytu@uQW1M%r?msY�>aP+fgFIKpb)Tpz6=XF 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 P$e;fYM>v6+0Hgo_y#bO* literal 0 HcmV?d00001