100 likes | 222 Vues
This document provides a comprehensive overview of the Charm++ Machine Layer, focusing on parallel programming techniques, startup processes, and initialization protocols. It covers essential topics such as low-level communication methods, supporting platforms, and thread management strategies. Additionally, the document outlines various implementations across different operating systems and compilers, including Linux, Windows, and MacOS, as well as communication APIs like UDP, MPI, and shared memory. The information is geared towards developers aiming to leverage Charm++ for efficient parallel computing.
E N D
Introduction toCharm++ Machine Layer Gengbin Zheng Parallel Programming Lab 4/3/2002
Machine Layer Overview • Startup and initialization; • Low level communication • CmiFreeSendFn, etc • CmiSyncBroadcastAllFn(), etc • SMP support • Multiple worker threads and one comm thread; • Thread creation and state initialization;
Supported Platforms Charm version OS Communication Compiler ------------------- --------- ------------------- -------------------- net-linux PC Linux UDP/Myrinet GNU compiler net-linux-ia64 IA64 Linux UDP/Myrinet GNU compiler net-axp Alpha UDP GNU compiler net-cygwin Win32/cygwin UDP GNU compiler net-win32 Win32 UDP MS Visual C++ net-sol Solaris UDP GNU compiler net-irix IRIX UDP GNU compiler net-hp HP-UX UDP GNU compiler net-ppc-darwin MacOS X UDP GNU C++ compiler mpi-linux PC Linux MPI GNU compiler mpi-linux-ia64 IA64 Linux MPI GNU compiler mpi-axp Alpha MPI GNU compiler mpi-linux-axp Alpha Linux MPI GNU compiler mpi-origin Origin2000 MPI C++ compiler mpi-sp AIX MPI AIX xlC Compiler origin2000 Origin2000 shared-mem SGI C++ compiler t3e Cray T3E shared-mem Cray C++ compiler
Communication API (Send/Recv) MPI Net Shmem UDP (machine-eth.c) TCP (machine-tcp.c) Myrinet (machine-gm.c) Communication Architecture
Machine Layer Files Layout • Configuration files for each main platform: • conv-mach.h • conv-common.h • conv-mach-opt.h from: • smp, scyld, bluegene, gm, vmi, tcp … • cc, cxx, kcc, cc64, acc, ecc … • Implementations: • common.net, common.mpi, common.shmem • machine.c
How ‘build’ works • build charm++ net-linux gm smp kcc bluegene • Sort gm, smp and bluegene • Mkdir net-linux-bluegene-gm-smp-kcc • Cat conv-mach-[kcc|bluegene|gm|smp].h to conv-mach-opt.h • Cat conv-mach-[kcc|bluegene|gm|smp].sh to conv-mach-opt.sh • Gather files from common.net, etc (Makefile) • Make charm++ under • net-linux-bluegene-gm-smp-kcc/tmp
Parallel Program Startup • Net version - nodelist Rsh/ssh (IP, port) Rsh/ssh (IP, port) Charmrun node compute node compute node my node (IP, port) Broadcast all nodes (IP, port)
Converse life • ConverseInit • Global variables initialization; • Start worker threads; • ConverseRunPE for each Charm PE • Per thread initialization; • Loop into scheduler: CsdScheduler()
handler xhandler Dgram Header length Message formats • Net version #define CMK_MSG_HEADER_BASIC { CmiUInt2 d0,d1,d2,d3,d4,d5,hdl,d7; } • MPI version #define CMK_MSG_HEADER_BASIC { CmiUInt2 rank, root, hdl,xhdl,info,d3; } rank root handler xhandler info d3
SMP support • MPI-smp as an example • Create threads: CmiStartThreads • Worker threads work cycle • See code in mahcine-smp.c • Communication thread work cycle • See code in machine-smp.c