描述:
并行计算网格文件dfx,返回多任务的结果集拼成的序列。
语法:
callx(dfx;x,…;h,s)
备注:
无h与s参数时,本地多线程执行脚本dfx,…为参数,序列参数拆分,单值参数复制,序列长度表示作业数。如果有分进程则执行多进程计算。实际并行数为本机适合作业数,多出作业等待执行。
有h参数时,向分机进程序列h分配任务并行执行脚本dfx,继承任务空间。
作业数与h长度相同时,则一一对应分配,忽略x;作业数大于h长度时,将h按计算力排序,为第1个分配其适合作业数的作业,再重算算力排序,再分配,直到剩余作业数小于某个阈值,然后启动分机计算,分机将已分配作业完成后再向主机索要剩余可执行作业,直到所有作业全部完成。
s是数列构成的序列,每个数列为对应分机可执行的作业序号序列,在分配作业时要确保分机只能执行可执行的作业,s省略则不判断。
x为reduce动作,无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执行第2、3个作业 |
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"]) |
多个节点机接收到的同一参数值不同时需以序列形式传递 |