Parent Directory | Revision Log | Revision Graph
Changes to restore/introduce true shared memory (i.e. pure SMP model) support for lat-lon, cartesian and cube. o Threads support restored for global_sum, global_max. Needed COMMON blocks in place of stack variables for work space. o COMMON added for temps that are exchanged shap_filt, solve_for_pressure o exch...template edits to allow multithreaded calling of cube exchanges. Cube exchanges are done single threaded, sequential at the moment and are hard coded for six-tile, one tile per face configuration. o Threading support only tested on Sun SMP (6500) system. o Default is SYSTEM() exists (check_threads.F), and barrier and memsync are used for threaded exchanges (ini_communications_patterns). o Killed K-level plot (ini_masks_etc.F). Overlaps not set in multi-threads (local array), so fails in plot_field(). o Fixed t-ave of phihyd ( DYNAMICS() ). Can only do it for first tile. o Added commented out nTx settings to hs94.cs-32x32x5 eedata. #nTx=2 #nTx=3 #nTx=6 Need to activate for setenv PARALLEL o Multi-threaded pickup is 100% validated. Testing notes o Code passes "testscript" tests. o To get "hs94.cs-32x32x5" to run OK need to patch dynamics.F. Patch is in hs94.cs-32x32x5/code/dynamics.patch. o Multithreading only tested on Sun 6500 SMP for hs94.cs and hs94.128. hs94.128 was OK at c37 but has a problem under multi-threading at pre38 at the moment. o Under Solaris need one of setenv PARALLEL 2 setenv PARALLEL 3 setenv PARALLEL 6 setenv PARALLEL 8 ( hs94.128 only ) - and - setenv STACKSIZE 16384 o Under Solaris f77 need to remove -u from Makefile FOPTS for compiling fftpack.o. Need to declare everything in fftpack or have custom compile options for fftpack.F to fix this.
1 | C $Header: /u/gcmpack/models/MITgcmUV/eesupp/inc/BARRIER.h,v 1.3 2001/02/04 14:38:41 cnh Exp $ |
2 | C $Name: checkpoint37 $ |
3 | C |
4 | C /==========================================================\ |
5 | C | GLOBA:_SUM.h | |
6 | C | o Globals used by Fortran global sum routine. | |
7 | C |==========================================================| |
8 | C | The global sum shared memory scheme uses global heap data| |
9 | C | structures (.i.e COMMON blocks ). Each thread writes to | |
10 | C | an its own element of the shared memory array and then | |
11 | C | one thread reads all the entries and sums them. The sum | |
12 | C | result is then read by all threads. | |
13 | C | Remember - you are working with regions of memory that | |
14 | C | are being updated concurrently by different threads. | |
15 | C | What happens, when it happens and who gets to see what | |
16 | C | happens at what stage depends on the computer systems | |
17 | C | memory model. Every computer has a different memory model| |
18 | C | and they are never simple. In all current platforms it is| |
19 | C | possible for one thread to see events happening in a | |
20 | C | different order from the order they are written in the | |
21 | C | code. | |
22 | C | Unless you understand this it is not a good idea to | |
23 | C | make modifications te way these header files are setup or| |
24 | C | the way the global sum routines work. | |
25 | C \==========================================================/ |
26 | COMMON / GSUM_COMMON_R8 / phiGSRL |
27 | Real*8 phiGSRL(lShare8, MAX_NO_THREADS ) |
28 | |
29 | COMMON / GSUM_COMMON_R4 / phiGSRS |
30 | Real*4 phiGSRS(lShare4, MAX_NO_THREADS ) |
31 | |
32 | COMMON / GSUM_COMMON_I / phiGSI |
33 | INTEGER phiGSI (lShare4, MAX_NO_THREADS ) |
ViewVC Help | |
Powered by ViewVC 1.1.22 |