callx()

描述:

并行计算网格文件dfx,返回多任务的结果集拼成的序列。

语法:

callx(dfx;x,…;h,s)

备注:

hs参数时,本地多线程执行脚本dfx为参数,序列参数拆分,单值参数复制,序列长度表示作业数。如果有分进程则执行多进程计算。实际并行数为本机适合作业数,多出作业等待执行。

h参数时,向分机进程序列h分配任务并行执行脚本dfx,继承任务空间。

作业数与h长度相同时,则一一对应分配,忽略x;作业数大于h长度时,将h按计算力排序,为第1个分配其适合作业数的作业,再重算算力排序,再分配,直到剩余作业数小于某个阈值,然后启动分机计算,分机将已分配作业完成后再向主机索要剩余可执行作业,直到所有作业全部完成。

s是数列构成的序列,每个数列为对应分机可执行的作业序号序列,在分配作业时要确保分机只能执行可执行的作业,s省略则不判断。

xreduce动作,无x时返回每个作业的结果构成的序列。有x时,以每个作业的结果为~,当前值为~~计算x,结果再置于~~,最后返回~~即分机的结果序列。

参数:

dfx

网格文件,dfx可设置为绝对路径或相对路径。相对路径为工具->选项->【环境】菜单下的寻址路径

x

reduce动作,可省略

传递给dfx的参数值。该参数格式一般为序列,需要给dfx传递几个参数,即有几个序列。在并行计算时,将按照该参数的序列长度将计算任务拆分为多个子任务,将序列的每一个成员,作为dfx的参数值传递到各自的子任务中。如果该参数是单值参数,则将单值自动复制到各个子任务中。

h

服务器序列,其中每个服务器的描述均为一个字符串,格式为"地址:端口号",如"192.168.0.86:4001"。缺省将不使用服务器,直接在当前进程中,分配多个线程执行计算。

s

数列构成的序列

示例:

test.dfx为远程节点机服务器的部署文件,节点机分别为【”192.168.0.204”,” 192.168.0.205”,” 192.168.0.206”,端口号为8081,文件内容如下:

(一)  单个参数

 

A

B

1

=connect("demo").query("select * from SCORES  where SUBJECT=?",arg1)

2

return A1

return A1.(SCORE)

 

 

A

 

1

=callx("test.dfx",["English","Math","PE"];["192.168.0.204:8081","192.168.0.205:8081"])

服务器并行,将3个任务分给两台并行机

2

=callx("test.dfx",["English","Math","PE"];["192.168.0.204:8081","192.168.0.205:8281","192.168.0.206:8081"])

参数和服务器列表个数相同则严格依次分配

3

=callx("test.dfx",["English","Math","PE"];)

本地并行,文件存放在工具->选项->【环境】菜单下的寻址路径

4

=callx("test.dfx",["English","Math","PE"];["192.168.0.204:8081","192.168.0.205:8081"],[[1],[2,3])

分配作业给固定分机,分机192.168.0.204:8081执行第1个作业,192.168.0.205:8081执行第23个作业

5

=callx("test.dfx":~~|~,["English","Math","PE"])

本地并行计算,汇总表达式为:~~|~ ,返回分机结果序列

(二)  多个参数

 

A

 

1

=connect("demo")

 

 

2

=A1.query("select * from EMPLOYEE where EID in (?) and GENDER=?",arg1,arg2)

 

 

3

=A1.close()

 

 

4

returnt A2

 

 

 

 

A

 

1

=callx("test.dfx",[[1,20,6,14,5]],"F";"192.168.0.204:8081")

向一台节点机传递2个参数,参数类型为字符串和序列

2

=callx("test.dfx",[[1,20,6,14,5],[22,33,44]],"F";["192.168.0.204:8081","192.168.0.205:8081"])

向多台节点机传递多个参数,当接收的同一参数值相同时可用单值形式传递

3

=callx("test.dfx",[[1,20,6,14,5],[22,33,44]],["F","M"];["192.168.0.204:8081","192.168.0.205:8081"])

多个节点机接收到的同一参数值不同时需以序列形式传递