1
1

Force the useful data to be aligned on special boundary. It is 32 bits

right now. Some testing on large NUMA machines should be done in order
to make sure that we need to export this variable out to the MCA layer.

This commit was SVN r9868.
Этот коммит содержится в:
George Bosilca 2006-05-09 21:46:10 +00:00
родитель a386fccccc
Коммит 9b985c3216

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

@ -18,11 +18,31 @@
#include "ompi_config.h"
#include "btl_sm_frag.h"
/**
* Internal alignment for the SM BTL. Don't know yet if it's interesting to export it
* via the MCA parameters. It might make sense on some NUMA machines to have the
* fragments aligned on 64 bits instead ...
* What we really need here is to have the header on the same cache line to
* speed-up the access to the header information.
*/
#define BTL_SM_ALIGNMENT_TO 32
static inline void mca_btl_sm_frag_constructor(mca_btl_sm_frag_t* frag)
{
size_t alignment;
frag->segment.seg_addr.pval = frag+1;
frag->segment.seg_len = frag->size;
alignment = (size_t)((unsigned long)frag->segment.seg_addr.pval &
(unsigned long)(BTL_SM_ALIGNMENT_TO - 1));
if( 0 != alignment ) {
unsigned long ptr = (unsigned long)frag->segment.seg_addr.pval;
alignment = BTL_SM_ALIGNMENT_TO - alignment;
printf( "SM fragment realignment by %ld from %lx to %lx\n", alignment,
ptr, ptr + alignment );
ptr += alignment;
frag->segment.seg_addr.pval = (void*)ptr;
}
frag->segment.seg_len = frag->size - alignment;
frag->base.des_src = &frag->segment;
frag->base.des_src_cnt = 1;
frag->base.des_dst = &frag->segment;