Omni OpenMP Compiler System (ver. 1.6) Unviersity of Tsukuba and PC Cluster Consortium JAPAN -- 1.6 - serval bug fix in omf77 - This is the final update in 1.x. The next release will be 2.x, which will include new SCASH, F95. -- 1.5 - Move to PC Cluster Consortium --- 1.4a - Bug fix - SCASH/Omni support SMP (SMP BUG fixed) - fixed SCASH/Omni runtime bug(when program run on 1 node cluster, make segmentation fault). --- 1.4 minor update SCASH/Omni for new SCASH library. SCASH/Omni unsupport SMP(It's BUG). --- 1.3s minor update for SCASH/Omni --- 1.3, Update from 1.2s - Bug fix - Omni OpenMP extension of data mapping and affinity scheduling for SCASH. - Update for Score 3.3.2, in which SCASH for SMP nodes are available. - omf77 multiple precision support by GNU MP. - Source distribution for Win-NT implementation on the cygus environment. - Installtion with jexc, out of beta state. - Stackthreads implementation improved by polling codes. --- 1.2s, Update from 1.2 (minor update) - Several bugs in SCASH implementation were fixed for Score 3.2. - Fixed bugs and update in omf77/omcc - threadprivate common. - external dummy procedure. - adjustable local array is supported. - local variables in main are allocated statically. - spin lock for alpha and IBM - jexc (java byte code to C translator for Exc java toolkit) is ready for a binary version. - RPM (binary) is available for linux (x86 and alpha, Redhad 6.2). - Win-NT implementation on the cygus environment (beta state, binary only) --- 1.2, Update from 1.1 - Several bugs in OpenMP C/Fortran 77 compiler were fixed. - Adjustable array in private clause of F77 OpenMP is supported. - Complex reduction in F77 is supported. - Performance improvement from 1.1. - Kaffe JVM (1.0.5) can be used to run our compiler. - Supporting multiple configurations including scash, shmem, StackThreads, sproc(on irix) - Cluster-enabled OpenMP implementation on software distributed shared memory SCASH, a beta version is available. - StackThreads runtime implementation for nested irregular parallelism is available. - Omni installation creates all runtime libraries (combination of lock mechanism and parallel execution mechanism) available on the platform. - New compile drivers, omcc/omf77, are available for multiple runtime configuration (shmem, scash, StackThreads, etc...). You can specify those runtimes by "-omniconfig" option. - 64 bit machine beta support. See also omni64bit.html for detail. - INTEGER*8 support in Fortran 77 if backend C compiler supports 64 bit integer. --- Update from 1.0 - Several bugs in OpenMP C compiler, ompcc, were fixed. - OpenMP Fortran 77, ompf77, now supports almost features, which were not supported in the previous beta version. - The front-end of C and f77 can successfully compile major benchmark programs including SPECint95, SPECfp95, SPEChpc (SPECseis, SPECchem, SPECclimate), NPB 2.3 serial version. - A serious performance bug of thread scheduling for linux pthread was fixed. "sched_yield" of linux may cause large overhead. - A performance bug in case of the mixture of OpenMP and MPI under pthread environment was fixed. The idle threads are suspended by using "pthread_cond_wait". The "spin" version may cause performance bug when using with MPICH. - In profiling mode, blocks of tlog records are output in the order of timestamp. A large tlog file is automatically truncated (2000 records) in viewing with tlogview. - IBM AIX with POSIX thread is supported. --- Contents: 1) What is RWCP Omni Compiler? 2) Other software that you will need 3) Unpacking this distribution file 4) Platforms 5) Installation 6) Compile and run your OpenMP program 7) Unsupported features and bugs 8) Where to find more information 9) Reporting bugs and requesting features IMPORTANT: Please make sure you understand the Copyright and License information in the files named COPYRIGHT and LICENSE before installing this release. --- 1) What is RWCP Omni Compiler? RWCP Omni Compiler Software is a collection of programs and libraries, written in C and Java, that allow researchers to build code transformation systems (compilers). Omni OpenMP compiler is a part of this software that translates C and Fortran 77 programs with OpenMP pragmas into C code suitable for compiling with a native compiler linked with the Omni OpenMP runtime library. The software consist of two major parts: front end programs (C-front and F-front) that translates OpenMP C and Fortran 77 programs into a intermediate code (called Xobject), and Java libraries (Exc Java tool kit) that transform Xobject code and generate C code. This distribution contains all the pieces necessary to compile OpenMP programs for a shared memory multiprocessor supporting a thread library (POSIX thread and Solaris thread). 2) Other software that you will need To compile and run OpenMP programs using Omni OpenMP Compiler, the following software is required: - C compiler (having "long long int" or sizeof(long int) == 8 preferred for INTEGER*8 in Fortran 77) - gnu bison or yacc to make the parser. - Java Development Kit, JDK (later than 1.1.3, 1.2.2 preferred), or Kaffe (1.0.5 or later). If you have no java enivornment, you can try installation with jexc(java to C translater). - Thread library. Solaris thread or POSIX thread library. On SGI IRIX, sproc can also be used. 3) Unpacking this distribution file When you unpack our distribution file, you will find the following directories and files: Omni/ -- top directory doc/ -- documentation C-front/ -- C parser F-front/ -- Fortran 77 parser exc-tools-java/ -- Exc Java tool kit tests/ -- test and example of openMP programs lib/ -- runtime library libompc/ -- Omni OpenMP runtime library libtlog/ -- Profile library libf2c/ -- Fortran runtime library libompsm/ -- "shmem" model runtime library libompst/ -- stackthreads runtime library runtime/ -- tools/ jexc/ -- Java bytecode to C translator for exc-toolkit-java driver/ -- C, Fortran77 Compile driver jmpstat/ -- java version of Solaris "mpstat" tlogview/ -- Omni profile visualization tool utils/ -- misc. configure -- configure command to make and install 4) Platforms OpenMP is a programming model for shared memory multiprocessor. The current version of the Omni OpenMP compiler has been tested on the following platforms: -- Sun Solaris 5.6 (SPARC and x86) with Solaris threads and POSIX threads. -- Linux 2.2.7 (redhat-6.0, x86 SMP) with linux-threads. -- IRIX 6.5 (Origin 2000) with POSIX threads and shared process (AKA sproc). 64 bit process model is supported as beta. -- Linux 2.2.14 (redhat-6.2, Alpha SMP) with linux-threads (beta) -- IBM AIX with POSIX threads -- HPUX with POSIX threads -- Windows NT/2000 with cygwin Note that you can install the software to any platform with POSIX thread library (even in a single processor machine). Version 1.3 supports the following runtime and platform: -- StackThreads implmentations for nested irregular parallelism -- SCASH implemenation for cluster-enabled OpenMP 5) Installation Belows are general installation procedures. See also Install.html for more detail. 1. Get the Omni distribution,"Omni.tar.gz". Unpack the distribution file. gzip -dc Omni.tar.gz | tar xvf - 2. Change the current directory to Omni directory. cd Omni 3. Run "configure". configure or configure --prefix= More detailed feature options, see Install.html. 4. Run "make" to compile the sources. make 5. Run "make install" to install the compiler. make install 6. Make sure that the command path includes install_directory/bin. 6) Compile and run your OpenMP program The command to compile OpenMP C programs is "omcc". For the description and options of "omcc", see doc/omcc.html. The command to compile OpenMP Fortran77 programs is "omf77". For the description and options of "omf77", see doc/omf77.html. The directory "tests" contains some small programs to test the OpenMP compiler. To run the OpenMP program, just execute the compiled executable on your SMP platform. The number of processor (or operating system threads) used is controlled as follows: -- The environment variable OMPC_NUM_PROCS specifies the number of threads to execute the program. For example, you want to use 4 threads, setenv OMPC_NUM_PROCS 4 -- If the environment variable OMPC_NUM_PROCS is not set, check the number of physical processors in your platform. The same number of threads are created as the number of physical processor. In Linux and Solaris platforms, the runtime system checks the number of processors. Otherwise, the current version uses a compile-time constant N_PROC_DEFALUT (currently 4) in "ompclib.h" as the number of threads. -- If the environment variable OMP_NUM_THREADS is set and its value is greater than the number of threads described above, the value of OMP_NUM_THREADS is used as the max number of threads. -- If the environment variable OMPC_BIND_PROCS and the max number of threads is less than or equal to the max number of threads, the threads are bind to the processor under solaris platforms. It works only in Solaris thread environment. You can monitor the parallel execution the following command: -- mpstat in Solaris (also jmpstat, Java version of "mpstat" in tools directory for Solaris platforms) -- xcpustate in Linux 7) Unsupported features and bugs See the documents under "doc" directory attached in the release. 8) Where to Find More Information For the documents about OpenMP specification, you can get them from the OpenMP official web site: http://www.openmp.org/ The directory "doc" contains some documents about the Omni Compiler Software. You can obtain the most recent documents and software release at our web site: http://pdplab.trc.rwcp.or.jp/Omni/ 9) Reporting bugs and requesting features To report bugs or features requests, send E-mail to: pdp-openmp@trc.rwcp.or.jp Your feedback and bug reports will be greatly appreciated. -- Enjoy!