adding templates for developing new machine architecture layers.
authorFilippo Gioachin <gioachin@illinois.edu>
Sat, 5 Mar 2005 05:52:23 +0000 (05:52 +0000)
committerFilippo Gioachin <gioachin@illinois.edu>
Sat, 5 Mar 2005 05:52:23 +0000 (05:52 +0000)
also present a README with basic instructions.

src/arch/template/README [new file with mode: 0644]
src/arch/template/conv-common.h [new file with mode: 0644]
src/arch/template/conv-mach.h [new file with mode: 0644]
src/arch/template/conv-mach.sh [new file with mode: 0644]

diff --git a/src/arch/template/README b/src/arch/template/README
new file mode 100644 (file)
index 0000000..90858f5
--- /dev/null
@@ -0,0 +1,69 @@
+This directory contains a template machine layer, with a description of what
+each file should contain.
+
+In order to create a new machine layer, create a new directory with the name of
+the architecture. Copy the four files contained in this directory, and edit them
+to implement the desired functions. To implement all the functions other files
+may be created, but being careful that no one collide with anyone already in
+charm.
+
+Instead, in order to add a new suboption to an existing machine, for example
+adding a new option "smp" to the architecture "elan", create two new files
+inside the directory elan called "conv-mach-smp.h" and "conv-mach-smp.sh" with
+the same meaning as the two conv-mach files. In this case, the normal
+"conv-mach.h" file will be included into the code, followed by the specific
+"conv-mach-smp.h" file. Thus, this second file need to take care of the
+definitions already made by the former one.
+
+The files contain the following information:
+
+* conv-mach.sh
+
+       contains the definitions of the compailers available in the building
+system, and the additional flags and options to pass to the commands. This file
+is read by the buils shell script.
+
+
+* conv-common.h
+
+       contains the common definitions of the architecture, specified as
+"define". The main options are described in the template. This file will be
+included into the code by conv-config.h which is itself included into converse.h
+(together with conv-mach.h and the other generated configurations).
+
+
+* conv-mach.h
+
+       this file is similar to conv-common.h as structure, but it allows to
+specify subarchitectures (like 'gm' in "./build charm++ net-linux gm"). In this
+way, a single conv-common.h will contain the common definitions for all the
+architectures, a single machine.c will contain the common code, and the flags in
+this file can select the code to be compiled.
+
+
+* machine.c
+
+       this file contains the implementation of the architecture in its
+totality, meaning that subarchitectures (specified with "conv-mach-option.h"
+files) will all link to this file, and it will need to have switches to
+selectively compile the code. These are tipically in the form of:
+ "#if CMK_OPTION_IN_CONV_MACH_H". the template file contains the description of
+the methods that should be implemented, also considering the values set into the
+two header files (conv-common/conv-mach).
+
+
+Other three files are needed during the charm build: conv-mach-pre.h,
+conv-mach-opt.h and conv-mach-opt.sh which are automatically generated by the
+build script with the properties retrieved from the system and the compile time
+options specified.
+
+
+*** A more detailed description on which files are linked into charm. ***
+
+When charm builds, the tmp directory is created and all source files are linked
+inside it. Regarding the arch files, only two directories are linked: the base
+directory and the architecture directory. With an example, if compiling
+"net-linux", the base directory will be "net" and the architecture directory
+"net-linux". This implies that the machine.c file present in the "net" directory
+will be linked (together will all the conv-mach* files and conv-common.h), but
+those present in "net-linux" will eventually overwrite them.
diff --git a/src/arch/template/conv-common.h b/src/arch/template/conv-common.h
new file mode 100644 (file)
index 0000000..8b3fe16
--- /dev/null
@@ -0,0 +1,58 @@
+/* if set to 1 it uses the default scheduler (Csd) defined in convcore.c,
+   otherwise machine.c has to provide its own scheduler. Should be 1 in almost
+   every machine. */
+#define CMK_CMIDELIVERS_USE_COMMON_CODE                    1
+
+/* specifies if the functions CmiPrintf, CmiError and CmiScanf are implemented
+   in machine.c (1), or if the standard definitions in convcore.c should be used
+   (0). */
+#define CMK_CMIPRINTF_IS_A_BUILTIN                         0
+
+/* define the converse headers. For most of the purposes, only the UNIQUE header
+   needs to be modified, the others will follow. BLUEGENE may need to be
+   adapted. */
+#define CMK_MSG_HEADER_UNIQUE    CmiUInt4 size; CmiUInt2 hdl,xhdl,info;
+
+#define CMK_MSG_HEADER_BASIC  CMK_MSG_HEADER_EXT
+#define CMK_MSG_HEADER_EXT            { CMK_MSG_HEADER_UNIQUE }
+#define CMK_MSG_HEADER_BLUEGENE {CMK_MSG_HEADER_UNIQUE int nd, n; double rt; CmiInt2 tID; CmiUInt2 hID; char t; int msgID; int srcPe;}
+
+/* defines different parameters of groups of processors. (next 4 definitions)
+   used in converse.h (the first) and convcore.c (the others). a value of 1
+   means that convcore.c defines the methods, otherwise it is up to machine.c to
+   define them */
+
+/* basic structure of a CmiGroup (defined in converse.h) */
+#define CMK_MULTICAST_GROUP_TYPE                struct { unsigned pe, id; }
+/* definitions of establishment and lookup of groups */
+#define CMK_MULTICAST_DEF_USE_COMMON_CODE                  1
+/* definitions of List sending functions */
+#define CMK_MULTICAST_LIST_USE_COMMON_CODE                 1
+/* definitions of Multicast sending functions */
+#define CMK_MULTICAST_GROUP_USE_COMMON_CODE                1
+
+/* define the entity of the spanning tree used (it is 4 in all configurations)
+   definese also if the code in converse.h will be used (1) or not and
+   implemented in machine.c (0). At the momement all configurations use the
+   common code. */
+#define CMK_SPANTREE_MAXSPAN                               4
+#define CMK_SPANTREE_USE_COMMON_CODE                       1
+
+/* Specifies if the routines which send multiple messages (vectors of messages)
+   to a processors are implemented in convcore.c (1) or in machine.c (1). */
+#define CMK_VECTOR_SEND_USES_COMMON_CODE                   1
+
+/* Enable the CCS protocol if set to 1. */
+#define CMK_CCS_AVAILABLE                                  1
+
+/* Defines if there is a "charmrun" program running on the system, which
+   interacts with possible connecting clients (0), or if there is no such
+   program, and processor 0 does the job (1). Currently only net- versions have
+   this set to 0, all the others have it to 1. */
+#define NODE_0_IS_CONVHOST                                 1
+
+/* Enables the persistent communication protocol if set to 1. */
+#define CMK_PERSISTENT_COMM                                0
+
+/* Enables support for immediate messages if set to 1. */
+#define CMK_IMMEDIATE_MSG                                 0
diff --git a/src/arch/template/conv-mach.h b/src/arch/template/conv-mach.h
new file mode 100644 (file)
index 0000000..597e40c
--- /dev/null
@@ -0,0 +1,95 @@
+#ifndef _CONV_MACH_H
+#define _CONV_MACH_H
+
+/* define the default linker, together with its options */
+#define CMK_DLL_CC   "g++ -shared -O3 -o "
+
+/* 1 if the machine has a function called "getpagesize()", 0 otherwise .
+   used in the memory files of converse */
+#define CMK_GETPAGESIZE_AVAILABLE                          0
+
+/* defines which version of memory handlers should be used.
+   used in conv-core/machine.c */
+#define CMK_MALLOC_USE_GNU_MALLOC                          0
+#define CMK_MALLOC_USE_OS_BUILTIN                          1
+
+#define CMK_MEMORY_PAGESIZE                                8192
+#define CMK_MEMORY_PROTECTABLE                             1
+
+/* specifies if there is a node queue. it is used in convcore.c and it is
+   tipically set to 1 in smp versions */
+#define CMK_NODE_QUEUE_AVAILABLE                           0
+
+/* the following definitions set the type of shared variables to be used. only
+   one of them should be 1, all the others 0. The different implementations are
+   in convserve.h */
+#define CMK_SHARED_VARS_UNAVAILABLE                        1
+#define CMK_SHARED_VARS_UNIPROCESSOR                       0
+#define CMK_SHARED_VARS_EXEMPLAR                           0
+#define CMK_SHARED_VARS_SUN_THREADS                        0
+#define CMK_SHARED_VARS_POSIX_THREADS_SMP                  0
+#define CMK_SHARED_VARS_PTHREADS                           0
+#define CMK_SHARED_VARS_NT_THREADS                         0
+
+/* the following define if signal handlers should be used, both equal to zero
+   means that signals will not be used. only one of the following can be 1, the
+   other must be 0. they differ in the fact that the second (_WITH_RESTART)
+   enables retry on interrupt (a function is recalled upon interrupt and does
+   not return EINTR as in the first case) */
+#define CMK_SIGNAL_USE_SIGACTION                           1
+#define CMK_SIGNAL_USE_SIGACTION_WITH_RESTART              0
+
+/* specifies whether the CthCpv variables should be defined as Cpv (0) or
+   directly as normal c variables (1) */
+#define CMK_THREADS_REQUIRE_NO_CPV                         0
+
+/* decide which is the default implementation of the threads (see threads.c)
+   Only one of the following can be 1. If none of them is selected, qthreads
+   will be used as default. This default can be overwritten at compile time
+   using -DCMK_THREADS_BUILD_"type"=1 */
+#define CMK_THREADS_USE_CONTEXT                            0
+#define CMK_THREADS_USE_JCONTEXT                           0
+#define CMK_THREADS_USE_PTHREADS                           0
+
+/* Specifies what kind of timer to use, and the correspondent headers will be
+   included in convcore.c. If none is selected, then the machine.c file needs to
+   implement the timer primitives. */
+#define CMK_TIMER_USE_RTC                                  0
+#define CMK_TIMER_USE_RDTSC                                0
+#define CMK_TIMER_USE_GETRUSAGE                            0
+#define CMK_TIMER_USE_SPECIAL                              0
+#define CMK_TIMER_USE_TIMES                                0
+
+
+/* In order to have a type with a fixed length across machines, these define the
+   different size integers, unsigned integers, and floats as the machine
+   specific types corresponding to the given sizes (2, 4, 8 bytes) */
+#define CMK_TYPEDEF_INT2 short
+#define CMK_TYPEDEF_INT4 int
+#define CMK_TYPEDEF_INT8 long
+#define CMK_TYPEDEF_UINT2 unsigned short
+#define CMK_TYPEDEF_UINT4 unsigned int
+#define CMK_TYPEDEF_UINT8 unsigned long long
+#define CMK_TYPEDEF_FLOAT4 float
+#define CMK_TYPEDEF_FLOAT8 double
+
+/* Specifies what the processor will do when it is idle, either sleep (1) or go
+   into busy waiting mode (0). In convcore.c there are a few files included if
+   sleeping mode, but the real distinct implementation is in the machine.c
+   file. */
+#define CMK_WHEN_PROCESSOR_IDLE_USLEEP                     1
+
+/* specifies weather there is a web server collecting utilization statistics (1)
+   or not (0) */
+#define CMK_WEB_MODE                                       1
+
+#define CMK_DEBUG_MODE                                     0
+
+/* enables the load balancer framework. set to 1 for almost all the machines */
+#define CMK_LBDB_ON                                       1
+
+/* snables smp support if set to 1 */
+#define CMK_SMP                                            0
+
+#endif
+
diff --git a/src/arch/template/conv-mach.sh b/src/arch/template/conv-mach.sh
new file mode 100644 (file)
index 0000000..5993429
--- /dev/null
@@ -0,0 +1,16 @@
+CMK_CPP_CHARM='/lib/cpp -P'
+CMK_CPP_C='gcc -E'
+CMK_CC='gcc -D_REENTRANT -I/usr/opt/rms/include '
+CMK_CXX='g++ -D_REENTRANT -I/usr/opt/rms/include '
+CMK_CXXPP="$CMK_CXX -x c++ -E  "
+CMK_LD="eval $CMK_CC "
+CMK_CF77='f77 -automatic'
+CMK_CF90='f90 -automatic'
+CMK_RANLIB='ranlib'
+CMK_LIBS='-lckqt'
+CMK_LD_LIBRARY_PATH="-rpath $CHARMLIBSO/"
+CMK_QT='gcc'
+CMK_XIOPTS='-ansi'
+CMK_F90LIBS="-lUfor -lfor -lFutil"
+CMK_F77LIBS="$CMK_F90LIBS"
+CMK_MOD_EXT="mod"