1
1
- allocate enough memory to hold fifo array

This commit was SVN r5423.
Этот коммит содержится в:
Tim Woodall 2005-04-18 21:13:30 +00:00
родитель cd76153a74
Коммит f4c25492f3
2 изменённых файлов: 33 добавлений и 32 удалений

Просмотреть файл

@ -419,7 +419,7 @@ int mca_ptl_sm_add_procs_same_base_addr(
*/
my_fifos=( ompi_fifo_t *)
mca_ptl_sm_component.sm_mpool->mpool_alloc
(n_to_allocate*sizeof(ompi_fifo_t *), CACHE_LINE_SIZE);
(n_to_allocate*sizeof(ompi_fifo_t), CACHE_LINE_SIZE);
if ( NULL == my_fifos ) {
return_code=OMPI_ERR_OUT_OF_RESOURCE;
goto CLEANUP;
@ -826,24 +826,21 @@ int mca_ptl_sm_send(
send_fifo=&(mca_ptl_sm_component.fifo
[my_local_smp_rank][peer_local_smp_rank]);
/* lock for thread safety - using atomic lock, not mutex, since
* we need shared memory access to these lock, and in some pthread
* implementation, such mutex's don't work correctly */
if( ompi_using_threads() ) {
ompi_atomic_lock(&(send_fifo->head_lock));
}
if(OMPI_CB_FREE == send_fifo->head){
/* thread lock */
if(ompi_using_threads())
ompi_atomic_lock(&send_fifo->head_lock);
if(OMPI_CB_FREE == send_fifo->head) {
/* no queues have been allocated - allocate now */
return_status=ompi_fifo_init_same_base_addr(
mca_ptl_sm_component.size_of_cb_queue,
mca_ptl_sm_component.cb_lazy_free_freq,
/* at this stage we are not doing anything with memory
* locality */
0,0,0,
send_fifo, mca_ptl_sm_component.sm_mpool);
mca_ptl_sm_component.size_of_cb_queue,
mca_ptl_sm_component.cb_lazy_free_freq,
/* at this stage we are not doing anything with memory
* locality */
0,0,0,
send_fifo, mca_ptl_sm_component.sm_mpool);
if( return_status != OMPI_SUCCESS ) {
ompi_atomic_unlock(&(send_fifo->head_lock));
if(ompi_using_threads())
ompi_atomic_unlock(&(send_fifo->head_lock));
return return_status;
}
}
@ -855,11 +852,8 @@ int mca_ptl_sm_send(
MCA_PTL_SM_SIGNAL_PEER(ptl_peer);
return_status=OMPI_SUCCESS;
}
/* release thread lock */
if( ompi_using_threads() ) {
ompi_atomic_unlock(&(send_fifo->head_lock));
}
if(ompi_using_threads())
ompi_atomic_unlock(&send_fifo->head_lock);
/* if this is the entire message - signal request is complete */
if(sendreq->req_bytes_packed == size) {
@ -963,17 +957,17 @@ int mca_ptl_sm_send_continue(
peer_local_smp_rank=ptl_peer->peer_smp_rank;
send_fifo=&(mca_ptl_sm_component.fifo
[my_local_smp_rank][peer_local_smp_rank]);
/* since the first fragment has already been posted,
* the queue has already been initialized, so no need to check */
/* post descriptor */
/* lock for thread safety - using atomic lock, not mutex, since
* we need shared memory access to these lock, and in some pthread
* implementation, such mutex's don't work correctly */
if( ompi_using_threads() ) {
ompi_atomic_lock(&(send_fifo->head_lock));
}
if(ompi_using_threads())
ompi_atomic_lock(&send_fifo->head_lock);
/* post descriptor */
return_status=ompi_fifo_write_to_head_same_base_addr(send_frag,
send_fifo, mca_ptl_sm_component.sm_mpool);
if( 0 <= return_status ) {
@ -981,10 +975,8 @@ int mca_ptl_sm_send_continue(
return_status=OMPI_SUCCESS;
}
/* release threa lock */
if( ompi_using_threads() ) {
ompi_atomic_unlock(&(send_fifo->head_lock));
}
/* return */
/* release thread lock */
if(ompi_using_threads())
ompi_atomic_unlock(&send_fifo->head_lock);
return return_status;
}

Просмотреть файл

@ -133,8 +133,13 @@ void mca_ptl_sm_matched(
send_fifo=&(mca_ptl_sm_component.fifo
[my_local_smp_rank][peer_local_smp_rank]);
/* lock as multiple processes can attempt to init the head */
if(ompi_using_threads())
ompi_atomic_lock(&send_fifo->head_lock);
/* check to see if fifo is allocated */
if(OMPI_CB_FREE == send_fifo->head){
if(OMPI_CB_FREE == send_fifo->head) {
/* no queues have been allocated - allocate now */
return_status=ompi_fifo_init_same_base_addr(
mca_ptl_sm_component.size_of_cb_queue,
@ -144,7 +149,8 @@ void mca_ptl_sm_matched(
0,0,0,
send_fifo, mca_ptl_sm_component.sm_mpool);
if( return_status != OMPI_SUCCESS ) {
ompi_atomic_unlock(&(send_fifo->head_lock));
if(ompi_using_threads())
ompi_atomic_unlock(&send_fifo->head_lock);
return;
}
}
@ -159,6 +165,9 @@ void mca_ptl_sm_matched(
return_status=ompi_fifo_write_to_head_same_base_addr(sm_frag_desc,
send_fifo, mca_ptl_sm_component.sm_mpool);
if(ompi_using_threads())
ompi_atomic_unlock(&send_fifo->head_lock);
/* if can't ack, put on list for later delivery */
if( 0 > return_status ) {
OMPI_THREAD_LOCK(&(mca_ptl_sm_component.sm_pending_ack_lock));