bohn%VKPMZC@VKPMZB.Physik.Uni-Mainz.DE (Markus Bohn) (10/15/90)
Dear Hsin chia Fu,
to your question about using the 3L-config for Master-Worker-Applications,
I will post the following example for help:
I don't know any details of the B008-Board and have no experiences with
it, but this example should show the general things to be done.
First thing is, to boot the root-transputer (directly connected to the host)
with an application-programm to program the C004-linkswitch.
/******************************************************************************
This program generates the following configuration of the TOP-Node, Link_2 of
the TOP_HT is hard-wired to the config-link of the C004.
+------+
| HOST |
+------+
|
|
|
########## ####0##### ##########
# # # # # #
# SUB1HT 0------1 TOP_HT 3------0 SUB3HT #
# # # # # #
########## ####2##### ##########
|
|
|
|
********
* C004 *
********
******************************************************************************/
#include <chan.h>
#include <timer.h>
#define CONNECT 1 /* C004 Commands */
#define REQUEST 2
#define END 3
#define RESET 4
#define HT_L1 10 /* C004 Linknumbers, */
#define HT_L3 11 /* must be adapted */
#define SUB1_HT 12 /* to local needs ! */
#define SUB3_HT 14
main(argc, argv, envp, in_ports, ins, out_ports, outs)
int argc, ins, outs;
char *argv[], *envp[];
CHAN *in_ports[], *out_ports[];
{
int i;
char b, on, link;
static char msg[512]= {
RESET,
CONNECT, HT_L1, SUB1_HT,
CONNECT, HT_L3, SUB3_HT,
END,
};
chan_out_message(strlen(msg), msg, out_ports[2]);
}
/***************************************************************************/
This program must be compiled and linked, then configured with the following
configuration-file:
/**************************************************************************/
processor host
processor top_ht
processor C004 type=PC
wire ? host[0] top_ht[0]
wire ? top_ht[2] C004[0]
task afserver ins=1 outs=1
task filter ins=2 outs=2 data=10k
task conftop ins=3 outs=3 data=20k
task linkswitch ins=1 outs=1
connect ? afserver[0] filter[0]
connect ? filter[0] afserver[0]
connect ? filter[1] conftop[1]
connect ? conftop[1] filter[1]
connect ? conftop[2] linkswitch[0]
connect ? linkswitch[0] conftop[2]
place afserver host
place filter top_ht
place conftop top_ht
place linkswitch C004
/*************************************************************************/
You can boot the root transputer with this conftop.app and the C004
should have the desired connections. You have to be sure that there is
no RESET-Signal on the linkswitch while booting the next application,
otherwise this programming will be lost !!!
Now, the main part, the configuring of the master-worker-application:
The Master- and Worker-Tasks can be written, compiled and linked as
discribed in the 3L-Manual. Instead of the 'fconfig'-command, you must
use the 'config' with somthing similar to the following *.cfg file. Most
important thing to notice, is the BIND-statement for the unused channels
and the URGENT attribute for the frouter-task.
The use of the channels of the frouter is described in the 3L-manual,
"data sheet: frouter". Channels no. 0-2 are the "down"-links. They may
be connected either to the "up"-link of a deeper node frouter, or set to
zero by the BIND-statement. Channel 3 is the "up"-link. If this node is
NOT the root, these "up"-ports are connected to a "down"-port of
a router of a higher node and Channel 4 ist bound to zero.
If it IS the root, port 3 is set to zero and channel 4 is attached to the
master-task. Port 5 MUST be connected to the worker-task.
The following *.cfg file was created for use with an 11-transputer-
application, it should be not to difficult to adapt it to your needs.
/***********************************************************************/
processor host
processor trpa
processor trpb
processor trpc
processor trpd
processor trpe
processor trpf
processor trpg
processor trph
processor trpi
processor trpj
processor trpk
wire ? host[0] trpa[0]
wire ? trpa[3] trpb[0]
wire ? trpb[1] trpc[0]
wire ? trpb[2] trpd[0]
wire ? trpa[2] trpe[0]
wire ? trpe[1] trpf[0]
wire ? trpe[3] trpg[0]
wire ? trpf[1] trph[0]
wire ? trpf[3] trpi[0]
wire ? trpg[1] trpj[0]
wire ? trpg[3] trpk[0]
task afserver ins=1 outs=1
task filter ins=2 outs=2 data=10k
task master ins=2 outs=2 data=500k
task worker1 file="worker.b4" ins=1 outs=1 data=50k
task frouter1 file="frouter.b4" ins=6 outs=6 data=11k urgent
task worker2 file="worker.b4" ins=1 outs=1 data=50k
task frouter2 file="frouter.b4" ins=6 outs=6 data=11k urgent
task worker3 file="worker.b4" ins=1 outs=1 data=50k
task frouter3 file="frouter.b4" ins=6 outs=6 data=11k urgent
task worker4 file="worker.b4" ins=1 outs=1 data=50k
task frouter4 file="frouter.b4" ins=6 outs=6 data=11k urgent
task worker5 file="worker.b4" ins=1 outs=1 data=50k
task frouter5 file="frouter.b4" ins=6 outs=6 data=11k urgent
task worker6 file="worker.b4" ins=1 outs=1 data=50k
task frouter6 file="frouter.b4" ins=6 outs=6 data=11k urgent
task worker7 file="worker.b4" ins=1 outs=1 data=50k
task frouter7 file="frouter.b4" ins=6 outs=6 data=11k urgent
task worker8 file="worker.b4" ins=1 outs=1 data=50k
task frouter8 file="frouter.b4" ins=6 outs=6 data=11k urgent
task worker9 file="worker.b4" ins=1 outs=1 data=50k
task frouter9 file="frouter.b4" ins=6 outs=6 data=11k urgent
task worker10 file="worker.b4" ins=1 outs=1 data=50k
task frouter10 file="frouter.b4" ins=6 outs=6 data=11k urgent
task worker11 file="worker.b4" ins=1 outs=1 data=50k
task frouter11 file="frouter.b4" ins=6 outs=6 data=11k urgent
connect ? afserver[0] filter[0]
connect ? filter[0] afserver[0]
connect ? filter[1] master[1]
connect ? master[1] filter[1]
connect ? master[0] frouter1[4]
connect ? frouter1[4] master[0]
connect ? frouter1[5] worker1[0]
connect ? frouter2[5] worker2[0]
connect ? frouter3[5] worker3[0]
connect ? frouter4[5] worker4[0]
connect ? frouter5[5] worker5[0]
connect ? frouter6[5] worker6[0]
connect ? frouter7[5] worker7[0]
connect ? frouter8[5] worker8[0]
connect ? frouter9[5] worker9[0]
connect ? frouter10[5] worker10[0]
connect ? frouter11[5] worker11[0]
connect ? worker1[0] frouter1[5]
connect ? worker2[0] frouter2[5]
connect ? worker3[0] frouter3[5]
connect ? worker4[0] frouter4[5]
connect ? worker5[0] frouter5[5]
connect ? worker6[0] frouter6[5]
connect ? worker7[0] frouter7[5]
connect ? worker8[0] frouter8[5]
connect ? worker9[0] frouter9[5]
connect ? worker10[0] frouter10[5]
connect ? worker11[0] frouter11[5]
connect ? frouter1[0] frouter2[3]
connect ? frouter2[3] frouter1[0]
connect ? frouter2[0] frouter3[3]
connect ? frouter3[3] frouter2[0]
connect ? frouter2[1] frouter4[3]
connect ? frouter4[3] frouter2[1]
connect ? frouter1[1] frouter5[3]
connect ? frouter5[3] frouter1[1]
connect ? frouter5[0] frouter6[3]
connect ? frouter6[3] frouter5[0]
connect ? frouter5[1] frouter7[3]
connect ? frouter7[3] frouter5[1]
connect ? frouter6[0] frouter8[3]
connect ? frouter8[3] frouter6[0]
connect ? frouter6[1] frouter9[3]
connect ? frouter9[3] frouter6[1]
connect ? frouter7[0] frouter10[3]
connect ? frouter10[3] frouter7[0]
connect ? frouter7[1] frouter11[3]
connect ? frouter11[3] frouter7[1]
bind input frouter1[2] value=0
bind input frouter1[3] value=0
bind output frouter1[2] value=0
bind output frouter1[3] value=0
bind input frouter2[4] value=0
bind input frouter2[2] value=0
bind output frouter2[4] value=0
bind output frouter2[2] value=0
bind input frouter3[0] value=0
bind input frouter3[1] value=0
bind input frouter3[2] value=0
bind input frouter3[4] value=0
bind output frouter3[0] value=0
bind output frouter3[1] value=0
bind output frouter3[2] value=0
bind output frouter3[4] value=0
bind input frouter4[0] value=0
bind input frouter4[1] value=0
bind input frouter4[2] value=0
bind input frouter4[4] value=0
bind output frouter4[0] value=0
bind output frouter4[1] value=0
bind output frouter4[2] value=0
bind output frouter4[4] value=0
bind input frouter5[4] value=0
bind input frouter5[2] value=0
bind output frouter5[4] value=0
bind output frouter5[2] value=0
bind input frouter6[2] value=0
bind input frouter6[4] value=0
bind output frouter6[2] value=0
bind output frouter6[4] value=0
bind input frouter7[2] value=0
bind input frouter7[4] value=0
bind output frouter7[2] value=0
bind output frouter7[4] value=0
bind input frouter8[0] value=0
bind input frouter8[1] value=0
bind input frouter8[2] value=0
bind input frouter8[4] value=0
bind output frouter8[0] value=0
bind output frouter8[1] value=0
bind output frouter8[2] value=0
bind output frouter8[4] value=0
bind input frouter9[0] value=0
bind input frouter9[1] value=0
bind input frouter9[2] value=0
bind input frouter9[4] value=0
bind output frouter9[0] value=0
bind output frouter9[1] value=0
bind output frouter9[2] value=0
bind output frouter9[4] value=0
bind input frouter10[0] value=0
bind input frouter10[1] value=0
bind input frouter10[2] value=0
bind input frouter10[4] value=0
bind output frouter10[0] value=0
bind output frouter10[1] value=0
bind output frouter10[2] value=0
bind output frouter10[4] value=0
bind input frouter11[0] value=0
bind input frouter11[1] value=0
bind input frouter11[2] value=0
bind input frouter11[4] value=0
bind output frouter11[0] value=0
bind output frouter11[1] value=0
bind output frouter11[2] value=0
bind output frouter11[4] value=0
place afserver host
place filter trpa
place master trpa
place worker1 trpa
place frouter1 trpa
place worker2 trpb
place frouter2 trpb
place worker3 trpc
place frouter3 trpc
place worker4 trpd
place frouter4 trpd
place worker5 trpe
place frouter5 trpe
place worker6 trpf
place frouter6 trpf
place worker7 trpg
place frouter7 trpg
place worker8 trph
place frouter8 trph
place worker9 trpi
place frouter9 trpi
place worker10 trpj
place frouter10 trpj
place worker11 trpk
place frouter11 trpk
/**************************************************************************/
Last, a usefull hint: try a smaller configuration first to get familiar with
this "unfrendly"-concept, it took me several days to find all out, but it
works !!!
Hope this will help you,
Greetings,
Markus Bohn
###########################################################################
# #
# Markus Bohn bohn@dmznat51.bitnet #
# Inst. f. Kernphysik #
# Univ. Mainz #
# D-6500 Mainz #
# Germany #
# #
###########################################################################