[ofa-general] Re: your mail

Sasha Khapyorsky sashak at voltaire.com
Sun Nov 23 22:17:25 PST 2008


Hi Bob,

On 11:10 Tue 11 Nov     , Robert Pearson wrote:
> 
> Here is the sixth patch implementing the mesh analysis algorithm.

Could you provide description for this [PATCH 6]?

Also note that your mailer breaks long lines and corrupts patches (not
in the case of this patch but with anothers where long lines are used).

Sasha

> 
> This patch implements
>       - a table of polynomials for all 2D and 3D regular Cartesian meshes
>       - a routine to classify each switch based on the table
> 
> Regards,
> 
> Bob Pearson
> 
> Signed-off-by: Bob Pearson <rpearson at systemfabricworks.com>
> ----
> diff --git a/opensm/opensm/osm_mesh.c b/opensm/opensm/osm_mesh.c
> index 9254de3..30d09c2 100644
> --- a/opensm/opensm/osm_mesh.c
> +++ b/opensm/opensm/osm_mesh.c
> @@ -48,6 +48,76 @@
>  #include <opensm/osm_mesh.h>
>  #include <opensm/osm_ucast_lash.h>
>  
> +#define MAX_DIMENSION (4)
> +#define MAX_DEGREE (10)
> +
> +/*
> + * characteristic polynomials for 2d and 3d regular tori
> + * since 4 == 2x2 we choose to take 2x2
> + */
> +struct _mesh_info {
> +	int dimension;			/* dimension of the torus */
> +	int size[MAX_DIMENSION];	/* size of the torus */
> +	int degree;			/* degree of polynomial */
> +	int poly[MAX_DEGREE+1];		/* polynomial */
> +} mesh_info[] = {
> +	{0, {0},       0, {0},					},
> +
> +	{2, {2, 2},    2, {-4, 0, 1},				},
> +	{2, {3, 2},    3, {8, 9, 0, -1},			},
> +	//{2, {4, 2},    3, {16, 12, 0, -1},			},
> +	{2, {5, 2},    3, {24, 17, 0, -1},			},
> +	{2, {6, 2},    3, {32, 24, 0, -1},			},
> +	{2, {3, 3},    4, {-15, -32, -18, 0, 1},		},
> +	//{2, {4, 3},    4, {-28, -48, -21, 0, 1},		},
> +	{2, {5, 3},    4, {-39, -64, -26, 0, 1},		},
> +	{2, {6, 3},    4, {-48, -80, -33, 0, 1},		},
> +	//{2, {4, 4},    4, {-48, -64, -24, 0, 1},		},
> +	//{2, {5, 4},    4, {-60, -80, -29, 0, 1},		},
> +	//{2, {6, 4},    4, {-64, -96, -36, 0, 1},		},
> +	{2, {5, 5},    4, {-63, -96, -34, 0, 1},		},
> +	{2, {6, 5},    4, {-48, -112, -41, 0, 1},		},
> +	{2, {6, 6},    4, {0, -128, -48, 0, 1},			},
> +
> +	{3, {2, 2, 2}, 3, {16, 12, 0, -1},			},
> +	{3, {3, 2, 2}, 4, {-28, -48, -21, 0, 1},		},
> +	{3, {4, 2, 2}, 4, {-48, -64, -24, 0, 1},		},
> +	{3, {5, 2, 2}, 4, {-60, -80, -29, 0, 1},		},
> +	{3, {6, 2, 2}, 4, {-64, -96, -36, 0, 1},		},
> +	{3, {3, 3, 2}, 5, {48, 127, 112, 34, 0, -1},		},
> +	{3, {4, 3, 2}, 5, {80, 180, 136, 37, 0, -1},		},
> +	{3, {5, 3, 2}, 5, {96, 215, 160, 42, 0, -1},		},
> +	{3, {6, 3, 2}, 5, {96, 232, 184, 49, 0, -1},		},
> +	{3, {4, 4, 2}, 5, {128, 240, 160, 40, 0, -1},		},
> +	{3, {5, 4, 2}, 5, {144, 276, 184, 45, 0, -1},		},
> +	{3, {6, 4, 2}, 5, {128, 288, 208, 52, 0, -1},		},
> +	{3, {5, 5, 2}, 5, {144, 303, 208, 50, 0, -1},		},
> +	{3, {6, 5, 2}, 5, {96, 296, 232, 57, 0, -1},		},
> +	{3, {6, 6, 2}, 5, {0, 256, 256, 64, 0, -1},		},
> +	{3, {3, 3, 3}, 6, {-81, -288, -381, -224, -51, 0, 1},	},
> +	{3, {4, 3, 3}, 6, {-132, -416, -487, -256, -54, 0, 1},	},
> +	{3, {5, 3, 3}, 6, {-153, -480, -557, -288, -59, 0, 1},	},
> +	{3, {6, 3, 3}, 6, {-144, -480, -591, -320, -66, 0, 1},	},
> +	{3, {4, 4, 3}, 6, {-208, -576, -600, -288, -57, 0, 1},	},
> +	{3, {5, 4, 3}, 6, {-228, -640, -671, -320, -62, 0, 1},	},
> +	{3, {6, 4, 3}, 6, {-192, -608, -700, -352, -69, 0, 1},	},
> +	{3, {5, 5, 3}, 6, {-225, -672, -733, -352, -67, 0, 1},	},
> +	{3, {6, 5, 3}, 6, {-144, -576, -743, -384, -74, 0, 1},	},
> +	{3, {6, 6, 3}, 6, {0, -384, -720, -416, -81, 0, 1},	},
> +	{3, {4, 4, 4}, 6, {-320, -768, -720, -320, -60, 0, 1},	},
> +	{3, {5, 4, 4}, 6, {-336, -832, -792, -352, -65, 0, 1},	},
> +	{3, {6, 4, 4}, 6, {-256, -768, -816, -384, -72, 0, 1},	},
> +	{3, {5, 5, 4}, 6, {-324, -864, -855, -384, -70, 0, 1},	},
> +	{3, {6, 5, 4}, 6, {-192, -736, -860, -416, -77, 0, 1},	},
> +	{3, {6, 6, 4}, 6, {0, -512, -832, -448, -84, 0, 1},	},
> +	{3, {5, 5, 5}, 6, {-297, -864, -909, -416, -75, 0, 1},	},
> +	{3, {6, 5, 5}, 6, {-144, -672, -895, -448, -82, 0, 1},	},
> +	{3, {6, 6, 5}, 6, {0, -384, -848, -480, -89, 0, 1},	},
> +	{3, {6, 6, 6}, 6, {0, 0, -768, -512, -96, 0, 1},	},
> +
> +	{-1, {0,}, 0, {0, },					},
> +};
> +
>  /*
>   * poly_alloc
>   * 
> @@ -489,6 +559,30 @@ static void classify_switch(lash_t *p_lash, int sw)
>  }
>  
>  /*
> + * classify_mesh_type
> + *
> + * try to look up node polynomial in table
> + */
> +static void classify_mesh_type(lash_t *p_lash, int sw)
> +{
> +	int i;
> +	switch_t *s = p_lash->switches[sw];
> +	struct _mesh_info *t;
> +
> +	for (i = 1; (t = &mesh_info[i])->dimension != -1; i++) {
> +		if (poly_diff(t->degree, t->poly, s))
> +			continue;
> +
> +		s->node->type = i;
> +		s->node->dimension = t->dimension;
> +		return;
> +	}
> +
> +	s->node->type = 0;
> +	return;
> +}
> +
> +/*
>   * get_local_geometry
>   *
>   * analyze the local geometry around each switch
> @@ -500,6 +594,7 @@ static void get_local_geometry(lash_t *p_lash)
>  	for (sw = 0; sw < p_lash->num_switches; sw++) {
>  		get_switch_metric(p_lash, sw);
>  		classify_switch(p_lash, sw);
> +		classify_mesh_type(p_lash, sw);
>  	}
>  }
>  
> 
> 



More information about the general mailing list