Skip to content

Commit

Permalink
Updates the akx computation spec file
Browse files Browse the repository at this point in the history
The akx computation now uses a two dimensional data array (x) to store the
result of each iteration of the kernel rather than just storing the last and
final result.
  • Loading branch information
Alan LaMielle committed Nov 30, 2010
1 parent 2bbc751 commit 1e30a50
Showing 1 changed file with 8 additions and 51 deletions.
59 changes: 8 additions & 51 deletions examples/akx_comp.spec
@@ -1,12 +1,8 @@
# ------------------------------------------------------------------------------
# for(iter=0; iter<k; iter++) {
# for(row=0; row<nrows; row++) {
#S0: y[row]=0.0;
# }
# for(nzid=0; nzid<nnz; i++) {
#S1: y[row[nzid]] += x[col[nzid]] * val[nzid];
#S0: x[iter][row[nzid]] += x[iter-1][col[nzid]] * val[nzid];
# }
#S2: temp=x; x=y; y=temp;
# }
# ------------------------------------------------------------------------------

Expand All @@ -16,23 +12,11 @@ spec.add_symbolic(name='nnz',type='int %s',lower_bound=1)
spec.add_symbolic(name='nrows',type='int %s',lower_bound=1)
spec.add_symbolic(name='ncols',type='int %s',lower_bound=1)

spec.add_data_array(
name='y',
type='double * %s',
elem_size='sizeof(double)',
bounds='{[k]: 0<=k and k<nrows}')

spec.add_data_array(
name='x',
type='double * %s',
type='double ** %s',
elem_size='sizeof(double)',
bounds='{[k]: 0<=k and k<ncols}')

spec.add_data_array(
name='temp',
type='double * %s',
elem_size='sizeof(double)',
bounds='{[k]: 0<=k and k<nrows}')
bounds='{[iter,c]: 0<=iter and iter<k and 0<=c and c<ncols}')

spec.add_data_array(
name='val',
Expand All @@ -52,50 +36,23 @@ spec.add_index_array(
input_bounds='{[k]: 0<=k and k<nnz}',
output_bounds='{[k]: 0<=k and k<ncols}')

# for(iter=0; iter<k; iter++) {
# for(nzid=0; nzid<nnz; i++) {
#S0: y[row[nzid]] += x[col[nzid]] * val[nzid];
# }
#S1: temp=x; x=y; y=temp;
# for(row=0; row<nrows; row++) {
#S2: y[row]=0.0;
# }
# }

spec.add_statement(
name='zero_y',
text='y[%(a4)s]=0.0;',
iter_space='{[iter,row]: 0<=iter and iter<k and 0<=row and row<nrows}',
scatter='{[iter,row]->[c0,iter,c0,row,c0]: c0=0}')
spec.add_access_relation(
statement_name='zero_y',
name='a4',
data_array='y',
iter_to_data='{[iter,row]->[ar]: ar=row}')

spec.add_statement(
name='mul_sum',
text='y[%(a1)s] += x[%(a2)s] * val[%(a3)s];',
text='x[%(a1)s] += x[%(a2)s] * val[%(a3)s];',
iter_space='{[iter,nzid]: 0<=iter and iter<k and 0<=nzid and nzid<nnz}',
scatter='{[iter,nzid]->[c0,iter,c1,nzid,c0]: c0=0 and c1=1}')
scatter='{[iter,nzid]->[c0,iter,c0,nzid,c0]: c0=0}')
spec.add_access_relation(
statement_name='mul_sum',
name='a1',
data_array='y',
iter_to_data='{[iter,nzid]->[ar]: ar=row(nzid)}')
data_array='x',
iter_to_data='{[iter,nzid]->[ar1,ar2]: ar1=iter and ar2=row(nzid)}')
spec.add_access_relation(
statement_name='mul_sum',
name='a2',
data_array='x',
iter_to_data='{[iter,nzid]->[ar]: ar=col(nzid)}')
iter_to_data='{[iter,nzid]->[ar1,ar2]: ar1=iter-1 and ar2=col(nzid)}')
spec.add_access_relation(
statement_name='mul_sum',
name='a3',
data_array='val',
iter_to_data='{[iter,nzid]->[ar]: ar=nzid}')

spec.add_statement(
name='swap_vecs',
text='temp=x; x=y; y=temp;',
iter_space='{[iter]: 0<=iter and iter<k}',
scatter='{[iter]->[c0,iter,c2,c0,c0]: c0=0 and c2=2}')

0 comments on commit 1e30a50

Please sign in to comment.