⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defs.m4

📁 这是一个实用的并行计算源代码
💻 M4
字号:
m4_divert(-1)m4_changequote({,})#----------------- Custom definitions ----------------m4_dnl !!!The new-line char between "HI-UX/MPP" and "," should be preserved!!!m4_ifelse(m4_esyscmd(/bin/uname), HI-UX/MPP, {  m4_define({_SR2201_}, 1)  m4_define({_OPS_}, 100.0)}, {  m4_define({_OPS_}, 10.0)})#----------------------------------------------------------------------------# Macros for FORTRAN do-loop unrolling.### Developed at the Research and Development Center for Parallel Software,# Institute of Software by:##		     Linbo Zhang (zlb@lsec.cc.ac.cn)##	State-key Laboratory of Scientific and Engineering Computing##	      Institute of Computational Mathematics and#		    Scientific/Engineering Computing##		      Chinese Academy of Sciences## Last updated: 5 Oct, 1996. All rights reserved.#------------------------------------------------------------------------------# ...........................................................................# 			General Purpose Utilities# ...........................................................................#m4_ifdef({__gnu__}, {}, {m4_dnl#    m4_errprint({Error: this file must be processed using GNU m4 with -P option#    }){}m4_m4exit#})###### ***** m4_forloop(dovar, start, end, loopbody) *****###m4_define( {m4_forloop},  {m4_pushdef({$1},{$2})_m4_forloop({$1}, {$2}, {$3}, {$4})m4_popdef({$1})})m4_define( {_m4_forloop}, {m4_ifelse( m4_eval($1>$3),1,{},   {$4{}m4_define({$1},m4_incr($1))_m4_forloop( {$1}, {$2}, {$3}, {$4})})})###### ***** m4_foreach(x, (item_1, item_2, ..., item_n), stmt) *****####m4_define({m4_foreach}, {m4_pushdef({$1}, {})_m4_foreach({$1}, {$2}, {$3})m4_popdef({$1})})#m4_define({_m4_arg1}, {$1})#m4_define({_m4_foreach},#        {m4_ifelse({$2}, {()}, ,#                {m4_define({$1}, _m4_arg1$2)$3{}_m4_foreach({$1}, (m4_shift$2), {$3})})})###### ***** m4_max(number_1, number_2, ..., number_n) *****###m4_define({m4_max},          {m4_ifelse($#, 2, {m4_ifelse(m4_eval($1>$2), 1, $1, $2)},                            {m4_max($1, {m4_max(m4_shift($@))} )} )})# ...........................................................................# 				End of Utilities# ...........................................................................###### m4_inner_most_dodepth is used to control compiler-dependent directives### applied to the inner most do loop.###m4_define({m4_inner_most_dodepth}, 0)m4_define({m4_compiler_directives}, {    m4_ifelse(m4_dodepth, m4_inner_most_dodepth, {m4_ifdef({_SR2201_},{*VOPTION indep})    })})###### ***** m4_begin_expansion, m4_end_expansion### All macros defined below should be surrounded by:### 	m4_begin_expansion###	... ...###	m4_end_expansion### otherwise the post processor "m4post" will not work correctly.###### The outmost "m4_do" command will implicitly inserts "m4_begin_expansion"### at start and "m4_end_expansion" at the end.###m4_define({m4_expansion_flag}, 0)m4_define({m4_begin_expansion}, {{}m4_dnl    m4_ifelse(m4_expansion_flag, 0, {	*m4: start expansion	m4_define({m4_expansion_flag}, 1)    })})m4_define({m4_end_expansion}, {{}m4_dnl    m4_ifelse(m4_expansion_flag, 1, {	*m4: end expansion	m4_define({m4_expansion_flag}, 0)    })})###### ***** m4_do( dovar, start, end, inc, unroll, {dobody}) *****###### Fortran do-loop expansion.###m4_define({m4_do}, {    m4_ifelse($#, 6, {}, {        m4_errprint({m4_do}: Incorrect number of arguments (file="m4___file__"   line=m4___line__)        ){}m4_m4exit    }){}m4_dnl ************** Mark start of expansion    m4_ifelse(m4_dodepth, 0, {	m4_ifelse(m4_expansion_flag, 1, {}, {m4_begin_expansion})    })    m4_do_init($@){}m4_dnl ************** Pre loop ($1)    m4_ifelse($5, 1, {}, {       m4_do_pre($@)       $6       enddo    }){}m4_dnl ************** Main loop ($1)    m4_do_main($@)    $6    enddo    m4_define({m4_dodepth}, m4_decr(m4_dodepth)){}m4_dnl ************** Mark end of expanded text    m4_ifelse(m4_dodepth,0, {m4_end_expansion})})m4_define({m4_do_init}, {{}m4_dnl    m4_define({m4_dodepth}, m4_incr(m4_dodepth))    m4_define({m4_do_$1_inc}, {$4})})m4_define({m4_do_pre}, {    m4_define({m4_unroll_$1_end}, 0)    m4_ifelse($5, 1, {}, {        m4_pushdef({m4_itmp$1})	m4_define({m4_itmp$1},          m4_ifelse(             $4, 1,           	{ m4_ifelse($2,1, {mod($3,$5)}, {$2-1+mod($3-($2-1),$5)}) },             $4, -1,                { $2 - (mod( ($2-($3)) + 1, $5)-1) },m4_dnl       else                { $2 + ($4)*(mod( ($3-($2))/($4) + 1, $5)-1) } m4_dnl          ) )        m4_ifelse($4, 1,  {itmp$1=min($3, m4_itmp$1)},                  $4, -1, {itmp$1=max($3, m4_itmp$1)},			  {if ( $4.gt.0) then	   	              itmp$1=min($3, m4_itmp$1)	                   else		              itmp$1=max($3, m4_itmp$1)	                   endif}        )        m4_popdef({m4_itmp$1})*m4 - Clean-up loop on $1	m4_ifelse($4,1, {	    do $1=$2,itmp$1	}, {	    do $1=$2,itmp$1,$4	})    })})m4_define({m4_do_main}, {    m4_define({m4_unroll_$1_end}, m4_decr($5))*m4 - Unrolled loop on $1    m4_compiler_directives    m4_ifelse($5, 1,	{	    m4_ifelse($4,1,		{                    do $1=$2,$3                },	 	{	 	    do $1=$2, $3, ($4)	 	}	    )	},	{	    m4_ifelse($4,1, {	                        do $1=max($2, itmp$1 + ($4)), $3, $5	                    },                      $4,-1,{                                do $1=min($2, itmp$1 + ($4)), $3, -$5                            },			    {if ( $4.gt.0) then		                itmp$1=max($2, itmp$1 + ($4) )	    	             else		                itmp$1=min($2, itmp$1 + ($4) )	    	             endif	 	             do $1=itmp$1, $3, ($5)*($4)}	    )	}    )})###### ***** m4_expand(dovar1, [dovar2,...,] body) *****###### "m4_expand" should be used within corresponding "m4_do" bodies.###### "m4_pexpand(dovar1, start1, end1, inc1, dovar2, start2, end2, inc2, ..., body)"### should be used instead if outside "m4_do".###### Warning: newlines will be automatically inserted before and after "body",###          inserting a '&' at the beginning of "body" means that all lines###	     in the expansion text are FORTRAN continuation lines.###m4_define({m4_pexpand_one_level}, {{}m4_dnl    m4_ifelse($#, 5,{}, {{}m4_dnl        m4_errprint({m4_pexpand_one_level}: Incorrect number of arguments (File="m4___file__"   line=m4___line__)        ){}m4_m4exit    }){}m4_dnl    m4_ifelse(m4_expansion_flag, 1, {}, {m4_begin_expansion})    m4_pushdef({$1}){}m4_dnl    m4_ifelse(      $4, 1,         {m4_define({$1}, {{$1}m4_ifelse(_$1_, 0, {}, {+_$1_})})},      $4,-1,         {m4_define({$1}, {{$1}m4_ifelse(_$1_, 0, {}, {-_$1_})})},      m4_dnl else         {m4_define({$1}, {{$1}m4_ifelse(_$1_, 0, {}, +($4)*_$1_)})}    )    m4_forloop( {_$1_}, {$2}, {$3}, {        $5    })    m4_popdef({$1}){}m4_dnl})m4_define({m4_expand_one_level}, {{}m4_dnl    m4_ifelse($#, 2,{}, {{}m4_dnl        m4_errprint({m4_expand_one_level}: Incorrect number of arguments (File="m4___file__"   line=m4___line__)        ){}m4_m4exit    }){}m4_dnl    m4_pexpand_one_level($1, 0, m4_unroll_$1_end, m4_do_$1_inc, {$2})})m4_define({m4_expand}, {    m4_ifelse($#, 2, {m4_expand_one_level($@)},                     {m4_expand_one_level($1,{m4_expand(m4_shift($@))})})})m4_define({m4_pexpand}, {    m4_ifelse($#, 5, {m4_pexpand_one_level($@)},                     {m4_pexpand_one_level($1, $2, $3, $4,			{m4_pexpand(m4_shift(m4_shift(m4_shift(m4_shift($@)))))})})})###### ***** m4_dodepth *****###### Stores current depth of nested do-loop expansion.###m4_define(m4_dodepth, 0)###### ***** m4_make_local(prefix, dovar1[, dovar2, ...])  *****###### Used to introduce scratch variables.### For example, m4_make_local(t,{i},{j}) ==> t0_0, t0_1, t1_0, t1_1, ...###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#  The following definition allows up to 8 nested expansions.		~#???m4_define({m4_make_index},{{}m4_dnl					~#???  m4_ifelse(							~#???    $#, 1, _$1_,							~#???    $#, 2, _$1_|_$2_,						~#???    $#, 3, _$1_|_$2_|_$3_,						~#???    $#, 4, _$1_|_$2_|_$3_|_$4_,					~#???    $#, 5, _$1_|_$2_|_$3_|_$4_|_$5_,				~#???    $#, 6, _$1_|_$2_|_$3_|_$4_|_$5_|_$6_,				~#???    $#, 7, _$1_|_$2_|_$3_|_$4_|_$5_|_$6_|_$7_,			~#???    $#, 8, _$1_|_$2_|_$3_|_$4_|_$5_|_$6_|_$7_|_$8_)})		~#???  ){}m4_dnl								~#???})									~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~m4_define({m4_make_index},  {_$1_{}m4_ifelse($#, 1, {}, {|m4_make_index(m4_shift($@))})})m4_define({m4_make_local}, {{}m4_dnl  m4_ifdef({$1}, {    m4_errprint(Error: $1 already defined (file="m4___file__"   line=m4___line__)    ){}m4_m4exit  }){}m4_dnl  {$1}m4_make_index(m4_shift($@))})###### ***** m4_local(var, dovar1[, dovar2, ...]) *****###### is used to declare temperary variables which are to be### expanded within do-loop expansions, e.g., m4_local(t, {i}, {j})### declares the variable "t" to expand with "i" and "j".###### WARNING: Temperary variables should be explicitly undefined after###          the do-loop expansion.###m4_define({m4_local}, {    m4_define({$1}, m4_make_local({{$1}}, m4_shift($@)))})###### ***** m4_texpand(var0, doloopvar, start, end, offset, {body})### starts a triangular expansion.###m4_define({m4_texpand}, {{}m4_dnl    m4_ifelse($#, 6,{}, {{}m4_dnl        m4_errprint({m4_texpand}: Incorrect number of arguments (File="m4___file__"   line=m4___line__)        ){}m4_m4exit    }){}m4_dnl    m4_ifelse(m4_unroll_$2_end, 0, {}, {        m4_pushdef({$1}){}m4_dnl	m4_ifelse(	    m4_do_$2_inc, 1, 	      {m4_define({$1},		{{$2}m4_ifelse(m4_eval(_$1_+$5), 0, {},		    {m4_ifelse(m4_eval(m4_eval(_$1_+$5)>0), 1,			+m4_eval(_$1_+$5), m4_eval(_$1_+$5) ) })})},	    m4_do_$2_inc,-1,	      {m4_define({$1},		{{$2}m4_ifelse(m4_eval(_$1_+$5), 0, {},		    {m4_ifelse(m4_eval(m4_eval(_$1_+$5)<0), 1,			+m4_eval(-(_$1_+$5)), -m4_eval(_$1_+$5) ) })})},	    m4_dnl Otherwise	      {m4_define({$1},		{{$2}m4_ifelse(m4_eval(_$1_+$5), 0, {},		    {m4_ifelse(m4_eval(m4_eval(_$1_+$5)>0), 1,			+m4_eval(_$1_+$5), m4_eval(_$1_+$5) )*(m4_do_$1_inc) })})}	)	m4_forloop( {_$1_}, $3, $4, {           $6	})	m4_popdef({$1}){}m4_dnl    })})###### ****** m4_do_with_incvar(dovar, start, end, inc, unroll,###                          incvar, initvalue, inc, {dobody})###### ****** m4_do_with_2incvars(dovar, start, end, inc, unroll,###                           incvar1, initvalue1, inc1,###                           incvar2, initvalue2, inc2, {dobody})###            ... ...###### Fortran do-loop expansion with an incremental variable (ix=ix+incx)###m4_define({m4_do_with_incvar}, {    m4_ifelse($#, 9, {}, {        m4_errprint({m4_do_with_incvar}: Incorrect number of arguments (file="m4___file__"   line=m4___line__)        ){}m4_m4exit    }){}m4_dnl ************** Mark start of expansion    m4_ifelse(m4_dodepth, 0, {	m4_ifelse(m4_expansion_flag, 1, {}, {m4_begin_expansion})    })    m4_do_init($@){}m4_dnl ************** Pre loop ($1)    $6{}0=$7    m4_ifelse($5, 1, {}, {	m4_do_pre($@)	m4_local($6, $1)	$9	m4_undefine({$6})	$6{}0=$6{}0+$8	enddo    }){}m4_dnl ************** Main loop ($1)    m4_do_main($@)    m4_forloop({_$1_}, 1, m4_decr($5), {	$6{}_$1_=$6{}m4_decr(_$1_)+$8    })    m4_local($6, $1)    $9    m4_undefine({$6})    $6{}0=$6{}m4_decr($5)+$8    enddo    m4_define({m4_dodepth}, m4_decr(m4_dodepth)){}m4_dnl ************** Mark end of expanded text    m4_ifelse(m4_dodepth,0, {m4_end_expansion})})m4_define({m4_do_with_2incvars}, {    m4_ifelse($#, 12, {}, {        m4_errprint({m4_do_with_2incvars}: Incorrect number of arguments (file="m4___file__"   line=m4___line__)        ){}m4_m4exit    }){}m4_dnl ************** Mark start of expansion    m4_ifelse(m4_dodepth, 0, {	m4_ifelse(m4_expansion_flag, 1, {}, {m4_begin_expansion})    })    m4_do_init($@){}m4_dnl ************** Pre loop ($1)    $6{}0=$7    $9{}0=$10    m4_ifelse($5, 1, {}, {	m4_do_pre($@)	m4_local($6, $1)	m4_local($9, $1)	$12	m4_undefine({$6})	m4_undefine({$9})	$6{}0=$6{}0+$8	$9{}0=$9{}0+$11	enddo    }){}m4_dnl ************** Main loop ($1)    m4_do_main($@)    m4_forloop({_$1_}, 1, m4_decr($5), {	$6{}_$1_=$6{}m4_decr(_$1_)+$8	$9{}_$1_=$9{}m4_decr(_$1_)+$11    })    m4_local($6, $1)    m4_local($9, $1)    $12    m4_undefine({$6})    m4_undefine({$9})    $6{}0=$6{}m4_decr($5)+$8    $9{}0=$9{}m4_decr($5)+$11    enddo    m4_define({m4_dodepth}, m4_decr(m4_dodepth)){}m4_dnl ************** Mark end of expanded text    m4_ifelse(m4_dodepth,0, {m4_end_expansion})})m4_define({m4_do_with_4incvars}, {    m4_ifelse($#, 18, {}, {        m4_errprint({m4_do_with_4incvars}: Incorrect number of arguments (file="m4___file__"   line=m4___line__)        ){}m4_m4exit    }){}m4_dnl ************** Mark start of expansion    m4_ifelse(m4_dodepth, 0, {	m4_ifelse(m4_expansion_flag, 1, {}, {m4_begin_expansion})    })    m4_do_init($@){}m4_dnl ************** Pre loop ($1)    $6{}0=$7    $9{}0=$10    $12{}0=$13    $15{}0=$16    m4_ifelse($5, 1, {}, {	m4_do_pre($@)	m4_local($6, $1)	m4_local($9, $1)	m4_local($12, $1)	m4_local($15, $1)	$18	m4_undefine({$6})	m4_undefine({$9})	m4_undefine({$12})	m4_undefine({$15})	$6{}0=$6{}0+$8	$9{}0=$9{}0+$11	$12{}0=$12{}0+$14	$15{}0=$15{}0+$17	enddo    }){}m4_dnl ************** Main loop ($1)    m4_do_main($@)    m4_forloop({_$1_}, 1, m4_decr($5), {	$6{}_$1_=$6{}m4_decr(_$1_)+$8	$9{}_$1_=$9{}m4_decr(_$1_)+$11	$12{}_$1_=$12{}m4_decr(_$1_)+$14	$15{}_$1_=$15{}m4_decr(_$1_)+$17    })    m4_local($6, $1)    m4_local($9, $1)    m4_local($12, $1)    m4_local($15, $1)    $18    m4_undefine({$6})    m4_undefine({$9})    m4_undefine({$12})    m4_undefine({$15})    $6{}0=$6{}m4_decr($5)+$8    $9{}0=$9{}m4_decr($5)+$11    $12{}0=$12{}m4_decr($5)+$14    $15{}0=$15{}m4_decr($5)+$17    enddo    m4_define({m4_dodepth}, m4_decr(m4_dodepth)){}m4_dnl ************** Mark end of expanded text    m4_ifelse(m4_dodepth,0, {m4_end_expansion})})#m4_define({m4_incvar_init}, {#   m4_ifelse(m4_unroll_$1_end, 0, {#      m4_pexpand({$1}, 0, 0, {$2})#   })#})m4_divert{}m4_dnl

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -