Parallel processing 如何在循环并行与GNU并行的同时并行csh
我有以下创建多个对象的脚本 我只是试着在我的终端上运行它,但它似乎需要很长时间。我如何用GNU并行运行这个 下面的脚本创建一个对象。它通过niy=1到niy=800,对于niy中的每个增量,它通过njx=1到675循环Parallel processing 如何在循环并行与GNU并行的同时并行csh,parallel-processing,csh,gnu-parallel,Parallel Processing,Csh,Gnu Parallel,我有以下创建多个对象的脚本 我只是试着在我的终端上运行它,但它似乎需要很长时间。我如何用GNU并行运行这个 下面的脚本创建一个对象。它通过niy=1到niy=800,对于niy中的每个增量,它通过njx=1到675循环 #!/bin/csh set njx = 675 ### Number of grids in X set niy = 800 ### Number of grids in Y set ll_x = -337500 set ll_y = -400000 ### (63 /
#!/bin/csh
set njx = 675 ### Number of grids in X
set niy = 800 ### Number of grids in Y
set ll_x = -337500
set ll_y = -400000 ### (63 / 2) * 1000 ### This is the coordinate at lower right corner
set del_x = 1000
set del_y = 1000
rm -f out.shp
rm -f out.shx
rm -f out.dbf
rm -f out.prj
shpcreate out polygon
dbfcreate out -n ID1 10 0
@ n = 0 ### initilzation of counter (n) to count gridd cells in loop
@ iy = 1 ### initialization of conunter (iy) to count grid cells along north-south direction
echo ### emptly line on screen
while ($iy <= $niy) ### start the loop for norht-south direction
echo ' south-north' $iy '/' $niy ### print a notication on screen
@ jx = 1
while ($jx <= $njx)### start the loop for east-west direction
@ n++
set x = `echo $ll_x $jx $del_x | awk '{print $1 + ($2 - 1) * $3}'`
set y = `echo $ll_y $iy $del_y | awk '{print $1 + ($2 - 1) * $3}'`
set txt = `echo $x $y $del_x $del_y | awk '{print $1, $2, $1, $2 + $4, $1 + $3, $2 + $4, $1 + $3, $2, $1, $2}'`
shpadd out `echo $txt`
dbfadd out $n
@ jx++
end ### close the second loop
@ iy++
end ### close the first loop
echo
### lines below create a projection file for the created shapefile using
cat > out.prj << eof
PROJCS["Asia_Lambert_Conformal_Conic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",120.98],PARAMETER["Standard_Parallel_1",5.0],PARAMETER["Standard_Parallel_2",20.0],PARAMETER["Latitude_Of_Origin",14.59998],UNIT["Meter",1.0]]
eof
###
###
###
#/bin/csh
设置njx=675###X中的网格数
设置niy=800####Y中的网格数
设置ll_x=-337500
设置ll#y=-400000####(63/2)*1000###这是右下角的坐标
设置del_x=1000
设置del_y=1000
rm-f out.shp
rm-f out.shx
rm-f out.dbf
rm-f out.prj
创建多边形
dbfcreate out-n ID1 10 0
@n=0####初始化计数器(n)以计数循环中的网格单元
@iy=1####初始化计数器(iy)以沿南北方向计算网格单元
在屏幕上空白回音#####行
而($iy内部部分执行540000次,在每次迭代中调用3个awk
进程来进行3个简单的数学运算…即160万awk
相反,我编写了一个awk来生成所有循环并进行所有数学运算,然后可以将其输入bash
或csh
以实际执行它
我写了这篇文章,并在原始版本达到16%时完整地运行了它。我没有彻底检查它,但您应该能够随时更正任何小错误:
#!/bin/bash
awk -v njx=675 -v niy=800 -v ll_x=-337500 -v ll_y=-400000 '
BEGIN{
print "shpcreate out polygon"
print "dbfcreate out -n ID1 10 0"
n=0
for(iy=1;iy<niy;iy++){
for(jx=1;jx<njx;jx++){
n++
x = llx + (jx-1)*1000
y = lly + (iy-1)*1000
txt = sprintf("%d %d %d %d %d %d %d %d %d %d",x,y,x, y+dely, x+delx, y+dely, x+delx,y,x,y)
print "shpadd out",txt
print "dbfadd out",n
}
}
}' /dev/null
请注意,我对这些形状文件(?)一无所知工具,shpadd
或dbfadd
工具。它们可能可以并行运行,也可能无法并行运行-如果它们类似于sqlite
并行运行,将不会对您有多大帮助。我猜上面的更改足以大大改进您的运行时。如果不能,下面是一些您可以考虑的其他事项ut
- 您可以在开始
dbfadd
或shpadd
的每一行中添加一个符号(&
),以便多个符号并行启动,然后在每8行之后打印一个wait
,以便以块的形式并行运行8件事情
- 您可以将脚本的输出直接输入到GNU Parallel中,但我不知道行的顺序是否至关重要
- 我认为这是在创建某种数据库。如果在RAM支持的文件系统(如
/tmp
)上运行它,速度可能会更快
- 我注意到有一个Python模块用于处理shapefile,我忍不住想那会快很多很多倍
内部部分执行540000次,每次迭代调用3个awk
进程来进行3个简单的数学运算…即160万个awk
相反,我编写了一个awk来生成所有循环并进行所有数学运算,然后可以将其输入bash
或csh
以实际执行它
我写了这篇文章,并在原始版本达到16%时完整地运行了它。我没有彻底检查它,但您应该能够随时更正任何小错误:
#!/bin/bash
awk -v njx=675 -v niy=800 -v ll_x=-337500 -v ll_y=-400000 '
BEGIN{
print "shpcreate out polygon"
print "dbfcreate out -n ID1 10 0"
n=0
for(iy=1;iy<niy;iy++){
for(jx=1;jx<njx;jx++){
n++
x = llx + (jx-1)*1000
y = lly + (iy-1)*1000
txt = sprintf("%d %d %d %d %d %d %d %d %d %d",x,y,x, y+dely, x+delx, y+dely, x+delx,y,x,y)
print "shpadd out",txt
print "dbfadd out",n
}
}
}' /dev/null
请注意,我对这些形状文件(?)一无所知工具,shpadd
或dbfadd
工具。它们可能可以并行运行,也可能无法并行运行-如果它们类似于sqlite
并行运行,将不会对您有多大帮助。我猜上面的更改足以大大改进您的运行时。如果不能,下面是一些您可以考虑的其他事项ut
- 您可以在开始
dbfadd
或shpadd
的每一行中添加一个符号(&
),以便多个符号并行启动,然后在每8行之后打印一个wait
,以便以块的形式并行运行8件事情
- 您可以将脚本的输出直接输入到GNU Parallel中,但我不知道行的顺序是否至关重要
- 我认为这是在创建某种数据库。如果在RAM支持的文件系统(如
/tmp
)上运行它,速度可能会更快
- 我注意到有一个Python模块用于处理shapefile,我忍不住想那会快很多很多倍