blob: 43d19d8f5ccb0d02e22f8446db281e5f7a385a30 [file] [log] [blame]
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <math.h>
#include "instrument.h"
/* Default problem size. */
#ifndef NX
# define NX 8000
#endif
#ifndef NY
# define NY 8000
#endif
/* Default data type is double. */
#ifndef DATA_TYPE
# define DATA_TYPE double
#endif
/* Array declaration. Enable malloc if POLYBENCH_TEST_MALLOC. */
#ifndef POLYBENCH_TEST_MALLOC
DATA_TYPE A[NX][NY];
DATA_TYPE r[NX];
DATA_TYPE s[NX];
DATA_TYPE p[NX];
DATA_TYPE q[NX];
#else
DATA_TYPE** A = (DATA_TYPE**)malloc(NX * sizeof(DATA_TYPE*));
DATA_TYPE* r = (DATA_TYPE*)malloc(NX * sizeof(DATA_TYPE));
DATA_TYPE* s = (DATA_TYPE*)malloc(NX * sizeof(DATA_TYPE));
DATA_TYPE* p = (DATA_TYPE*)malloc(NX * sizeof(DATA_TYPE));
DATA_TYPE* q = (DATA_TYPE*)malloc(NX * sizeof(DATA_TYPE));
{
int i;
for (i = 0; i < NX; ++i)
A[i] = (DATA_TYPE*)malloc(NY * sizeof(DATA_TYPE));
}
#endif
inline
void init_array()
{
int i, j;
for (i = 0; i < NX; i++) {
r[i] = i * M_PI;
p[i] = i * M_PI;
for (j = 0; j < NY; j++) {
A[i][j] = ((DATA_TYPE) i*j)/NX;
}
}
}
/* Define the live-out variables. Code is not executed unless
POLYBENCH_DUMP_ARRAYS is defined. */
inline
void print_array(int argc, char** argv)
{
int i, j;
#ifndef POLYBENCH_DUMP_ARRAYS
if (argc > 42 && ! strcmp(argv[0], ""))
#endif
{
for (i = 0; i < NX; i++) {
fprintf(stderr, "%0.2lf ", s[i]);
fprintf(stderr, "%0.2lf ", q[i]);
if (i%80 == 20) fprintf(stderr, "\n");
}
fprintf(stderr, "\n");
}
}
#ifndef SCOP_PARAM
void scop_func() {
long nx = NX;
long ny = NY;
#else
void scop_func(long nx, long ny) {
#endif
long i, j;
#pragma scop
#pragma live-out s, q
for (i = 0; i < ny; i++)
s[i] = 0;
for (i = 0; i < nx; i++)
{
q[i] = 0;
for (j = 0; j < ny; j++)
{
s[j] = s[j] + r[i] * A[i][j];
q[i] = q[i] + A[i][j] * p[j];
}
}
#pragma endscop
}
int main(int argc, char** argv)
{
int i, j;
int nx = NX;
int ny = NY;
/* Initialize array. */
init_array();
/* Start timer. */
polybench_start_instruments;
#ifndef SCOP_PARAM
scop_func();
#else
scop_func(nx, ny);
#endif
/* Stop and print timer. */
polybench_stop_instruments;
polybench_print_instruments;
print_array(argc, argv);
return 0;
}