Sanchayan Maity
0f4b39775c
During the last commit of splash2 benchmark it seems before committing when we ran "make clean", it effectively undid what the patch at below link did http://www.capsl.udel.edu/splash/Download.html Fix this since without this it is not possible to build the arcane splash2 benchmark.
114 lines
3.3 KiB
C
114 lines
3.3 KiB
C
/*************************************************************************/
|
|
/* */
|
|
/* Copyright (c) 1994 Stanford University */
|
|
/* */
|
|
/* All rights reserved. */
|
|
/* */
|
|
/* Permission is given to use, copy, and modify this software for any */
|
|
/* non-commercial purpose as long as this copyright notice is not */
|
|
/* removed. All other uses, including redistribution in whole or in */
|
|
/* part, are forbidden without prior written permission. */
|
|
/* */
|
|
/* This software is provided with absolutely no warranty and no */
|
|
/* support. */
|
|
/* */
|
|
/*************************************************************************/
|
|
|
|
EXTERN_ENV
|
|
|
|
#include <math.h>
|
|
#include "matrix.h"
|
|
|
|
#define MISS_COST 4.74
|
|
#define ALPHA 100
|
|
#define BETA 10
|
|
#define TIME(ops,misses) (ops+(misses)*MISS_COST)/(1.0+MISS_COST/BS)
|
|
|
|
extern BMatrix LB;
|
|
extern long P;
|
|
extern long BS;
|
|
double *opStats = NULL;
|
|
double seq_time, seq_ops, seq_misses;
|
|
|
|
void PDIV(long src_col, long src_nz, double *ops, double *misses, double *runtime)
|
|
{
|
|
long super_size, passes;
|
|
double this_ops, this_misses;
|
|
|
|
super_size = src_col*src_nz - src_col*(src_col-1)/2;
|
|
this_ops = 1.0*src_col*(src_col+1)*(2*src_col+1)/6;
|
|
this_ops += 1.0*src_col*src_col*(src_nz-src_col);
|
|
*ops += this_ops;
|
|
|
|
passes = (src_col+BS-1)/BS;
|
|
this_misses = 2.0*passes/3*super_size;
|
|
*misses += this_misses;
|
|
|
|
*runtime += TIME(this_ops, this_misses);
|
|
}
|
|
|
|
|
|
void PMOD(long src_col, long dest_col, long dest_nz, double *ops, double *misses, double *runtime)
|
|
{
|
|
long update_size, passes_src, passes_dest;
|
|
double this_ops, this_misses;
|
|
|
|
update_size = dest_col*dest_nz - dest_col*(dest_col-1)/2;
|
|
this_ops = 2.0*src_col*update_size;
|
|
*ops += this_ops;
|
|
|
|
passes_src = (src_col+BS-1)/BS;
|
|
passes_dest = (dest_col+BS-1)/BS;
|
|
if (passes_src == 1 && passes_dest == 1)
|
|
/* just miss on source and dest once */
|
|
this_misses = 1.0*src_col*dest_nz + 1.0*update_size;
|
|
else
|
|
this_misses = 1.0*passes_dest*src_col*dest_nz + 1.0*passes_src*update_size;
|
|
*misses += this_misses;
|
|
|
|
*runtime += TIME(this_ops, this_misses);
|
|
}
|
|
|
|
void PADD(long cols, long rows, double *misses, double *runtime)
|
|
{
|
|
double this_misses;
|
|
|
|
this_misses = 2*(rows*cols-cols*(cols-1)/2);
|
|
*misses += this_misses;
|
|
|
|
*runtime += TIME(0, this_misses);
|
|
}
|
|
|
|
|
|
void AssignBlocksNow()
|
|
{
|
|
long i, j;
|
|
|
|
if (P == 1) {
|
|
for (j=0; j<LB.n; j+=LB.partition_size[j])
|
|
if (!LB.domain[j])
|
|
for (i=LB.col[j]; i<LB.col[j+1]; i++)
|
|
BLOCK(i)->owner = 0;
|
|
} else {
|
|
EmbedBlocks();
|
|
}
|
|
}
|
|
|
|
|
|
void EmbedBlocks()
|
|
{
|
|
long j, block;
|
|
extern long scatter_decomposition;
|
|
|
|
/* number the block partitions */
|
|
|
|
for (j=0; j<LB.n; j+=LB.partition_size[j])
|
|
if (!LB.domain[j]) {
|
|
for (block=LB.col[j]; block<LB.col[j+1]; block++) {
|
|
BLOCK(block)->owner = EmbeddedOwner(block);
|
|
}
|
|
}
|
|
|
|
scatter_decomposition = 1;
|
|
}
|
|
|