Re: [OMPI users] windows + threads

2012-10-11 Thread Biddiscombe, John A.
Just to follow up my earlier post, checking out master and building that gives 
me the same lock up in ompi_info

>  ompi_info.exe!opal_atomic_lifo_push(opal_atomic_lifo_t * lifo, 
> opal_list_item_t * item) Line 73 C
  ompi_info.exe!ompi_free_list_grow(ompi_free_list_t * flist, unsigned 
__int64 num_elements) Line 257   C
  ompi_info.exe!ompi_rb_tree_init(ompi_rb_tree_t * tree, int (void *, void 
*) * comp) Line 77 C
  ompi_info.exe!mca_mpool_base_tree_init() Line 88   C
  ompi_info.exe!mca_mpool_base_open() Line 86 C
  ompi_info.exe!ompi_info_register_components(opal_pointer_array_t * 
mca_types, opal_pointer_array_t * component_map) Line 264C
  ompi_info.exe!main(int argc, char * * argv) Line 158   C
  ompi_info.exe!__tmainCRTStartup() Line 536  C
  ompi_info.exe!mainCRTStartup() Line 377  C
  kernel32.dll!07feac87167e()   Unknown
  ntdll.dll!07feae4cc3f1()  Unknown

at the line below with the * at the start. Well actually I guess it's sitting 
in a spin lock. Should I continue playing or is master unstable?

Thanks
JB

/* Add one element to the LIFO. We will return the last head of the list
* to allow the upper level to detect if this element is the first one in the
* list (if the list was empty before this operation).
*/
static inline opal_list_item_t* opal_atomic_lifo_push( opal_atomic_lifo_t* lifo,
   opal_list_item_t* item )
{
#if OPAL_ENABLE_MULTI_THREADS
do {
*   item->opal_list_next = lifo->opal_lifo_head;
opal_atomic_wmb();
if( opal_atomic_cmpset_ptr( &(lifo->opal_lifo_head),
(void*)item->opal_list_next,
item ) ) {
opal_atomic_cmpset_32((volatile int32_t*)&item->item_free, 1, 0);
return (opal_list_item_t*)item->opal_list_next;
}
/* DO some kind of pause to release the bus */
} while( 1 );
#else
item->opal_list_next = lifo->opal_lifo_head;
lifo->opal_lifo_head = item;
return (opal_list_item_t*)item->opal_list_next;
#endif  /* OPAL_ENABLE_MULTI_THREADS */
}



[OMPI users] windows + threads

2012-10-11 Thread Biddiscombe, John A.
Hi list,

I searched the archives, but didn't turn anything up...

I have a new machine which I've installed windows 8 x64 + MSVC 2012 (MSVC 11) 
and have compiled openmpi from the git svn clone(on branch origin/v1.6)  using 
these settings ...
cmake -DOMPI_ENABLE_THREAD_MULTIPLE=true -DOPAL_ENABLE_MULTI_THREADS=true 
-DOMPI_WANT_CXX_BINDINGS=false -DCMAKE_C_FLAGS:STRING=/MP 
-DCMAKE_CXX_FLAGS:STRING=/MP -DCMAKE_INSTALL_PREFIX="%MPI_DIR%" 
D:\Code\ompi-svn-mirror -DCMAKE_GENERATOR="Visual Studio 11 Win64"

The compilation succeeds, but when I run my app, I see that THREADS_MULTIPLE is 
not set. So I tried running ompi_info and I see that it outputs the following 
(at bottom of post), but locks up.
The stack trace when it locks up is as follows...

libmpid.dll!opal_atomic_cmpset_ptr(volatile void * addr, void * oldval, 
void * newval) Line 198   C++
libmpid.dll!opal_atomic_lifo_push(opal_atomic_lifo_t * lifo, 
opal_list_item_t * item) Line 77 C++
libmpid.dll!ompi_free_list_grow(ompi_free_list_t * flist, unsigned __int64 
num_elements) Line 237 C++
libmpid.dll!ompi_rb_tree_init(ompi_rb_tree_t * tree, int (void *, void *) * 
comp) Line 77   C++
libmpid.dll!mca_mpool_base_tree_init() Line 88  C++
libmpid.dll!mca_mpool_base_open() Line 86  C++
ompi_info.exe!ompi_info_open_components() Line 515   C++
ompi_info.exe!main(int argc, char * * argv) Line 285 C
ompi_info.exe!__tmainCRTStartup() Line 536 C
ompi_info.exe!mainCRTStartup() Line 377C
kernel32.dll!07feac87167e() Unknown
ntdll.dll!07feae4cc3f1()Unknown

My question is : has anyone tested msvc 12 and openmpi and can they recommend a 
source version I can use to compile and enable threads. If this combination of 
compilers etc is not yet supported, how can I help fix this. The fact that 
ompi_info reports "Thread support: no" indicates to me that either the cmake 
config is failing, or I've messed up with options. I tried the v1.7 branch, but 
the cmake support appears flaky. I'm willing to either fix the 1.7 cmake or the 
1.6 thread lock, if necessary, but I don't want to waste my time if it isn't 
going to work within a reasonable amount of debugging. I welcome any advice on 
how to get this compiling and working and offer cmake related help if you need 
it to work on this platform.
NB. I think I said my program runs, but actually, with threads enabled it bombs 
out during  MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - it 
runs without threads, but I need them.

Thanks

JB

output of ompi_info

 Package: Open MPI biddisco@CRUSCA Distribution
Open MPI: 1.6.3a1-1
   Open MPI SVN revision: -1
   Open MPI release date: Unreleased developer copy
Open RTE: 1.6.3a1-1
   Open RTE SVN revision: -1
   Open RTE release date: Unreleased developer copy
OPAL: 1.6.3a1-1
   OPAL SVN revision: -1
   OPAL release date: Unreleased developer copy
 MPI API: 2.1
Ident string: 1.6.3a1
  Prefix: D:\build\openmpi\Debug/..
Configured architecture: Windows-6.2 64 bit
  Configure host: CRUSCA
   Configured by: biddisco
   Configured on: 07:52 11/10/2012
  Configure host: CRUSCA
Built by: biddisco
Built on: 07:52 11/10/2012
  Built host: CRUSCA
  C bindings: yes
C++ bindings: yes
  Fortran77 bindings: no
  Fortran90 bindings: no
Fortran90 bindings size: na
  C compiler: cl
 C compiler absolute: C:/Program Files (x86)/Microsoft Visual Studio
  11.0/VC/bin/x86_amd64/cl.exe
  C compiler family name: MICROSOFT
  C compiler version: 1700
C++ compiler: cl
  C++ compiler absolute: C:/Program Files (x86)/Microsoft Visual Studio
  11.0/VC/bin/x86_amd64/cl.exe
  Fortran77 compiler: none
  Fortran77 compiler abs: none
  Fortran90 compiler: none
  Fortran90 compiler abs: none
 C profiling: yes
   C++ profiling: yes
 Fortran77 profiling: no
 Fortran90 profiling: no
  C++ exceptions: no
  Thread support: no
   Sparse Groups: no
  Internal debug support: no
  MPI interface warnings: no
 MPI parameter check: never
Memory profiling support: no
Memory debugging support: no
 libltdl support: no
   Heterogeneous support: no
mpirun default --prefix: yes
 MPI I/O support: yes
   MPI_WTIME support: gettimeofday
 Symbol vis. support: yes
   Host topology support: no
  MPI extensions: none
   FT Checkpoint support: yes (checkpoint thread: no)
 VampirTrace support: no
  MPI_MAX_PROCESSOR_NAME: 256
MPI_MAX_ERROR_STRING: 256
 MPI_MAX_OBJECT_NAME: 64
MPI_MAX_INFO_KEY: 36
MPI_MAX_INFO_VAL: 256
   MPI_MAX_PORT_NAME: 1024
  MPI_MAX_DATAREP_STRING: 128