-
-
Save Lugatod/3d8ddf73d1aedfaea15878b61558143a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifndef TACO_C_HEADERS | |
#define TACO_C_HEADERS | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <math.h> | |
#define TACO_MIN(_a,_b) ((_a) < (_b) ? (_a) : (_b)) | |
#endif | |
int assemble(void** inputPack) { | |
void** a = &(inputPack[0]); | |
void** b = &(inputPack[3]); | |
void** c = &(inputPack[6]); | |
int a1_ptr; | |
int* restrict b_L0_idx = (int*)b[1]; | |
int i; | |
int b1_ptr; | |
int* restrict c_L0_ptr = (int*)c[0]; | |
int* restrict b_L0_ptr = (int*)b[0]; | |
int ib; | |
int c1_ptr; | |
int* restrict a_L0_idx = (int*)a[1]; | |
int* restrict a_L0_ptr = (int*)a[0]; | |
int ic; | |
int* restrict c_L0_idx = (int*)c[1]; | |
/* a(i) = (b(i) + c(i)) */ | |
a1_ptr = a_L0_ptr[0]; | |
b1_ptr = b_L0_ptr[0]; | |
c1_ptr = c_L0_ptr[0]; | |
while ((b1_ptr < b_L0_ptr[(0 + 1)]) && (c1_ptr < c_L0_ptr[(0 + 1)])) { | |
ib = b_L0_idx[b1_ptr]; | |
ic = c_L0_idx[c1_ptr]; | |
i = TACO_MIN(ib,ic); | |
if ((ib == i) && (ic == i)) { | |
a_L0_idx[a1_ptr] = i; | |
a1_ptr = (a1_ptr + 1); | |
if ((0 == ((a1_ptr + 1) & a1_ptr)) && (32 <= (a1_ptr + 1))) | |
a_L0_idx = (int*)realloc(a_L0_idx, sizeof(int) * (2 * (a1_ptr + 1))); | |
} | |
else if (ib == i) { | |
a_L0_idx[a1_ptr] = i; | |
a1_ptr = (a1_ptr + 1); | |
if ((0 == ((a1_ptr + 1) & a1_ptr)) && (32 <= (a1_ptr + 1))) | |
a_L0_idx = (int*)realloc(a_L0_idx, sizeof(int) * (2 * (a1_ptr + 1))); | |
} | |
else { | |
a_L0_idx[a1_ptr] = i; | |
a1_ptr = (a1_ptr + 1); | |
if ((0 == ((a1_ptr + 1) & a1_ptr)) && (32 <= (a1_ptr + 1))) | |
a_L0_idx = (int*)realloc(a_L0_idx, sizeof(int) * (2 * (a1_ptr + 1))); | |
} | |
if (ib == i) | |
b1_ptr = (b1_ptr + 1); | |
if (ic == i) | |
c1_ptr = (c1_ptr + 1); | |
} | |
while (b1_ptr < b_L0_ptr[(0 + 1)]) { | |
ib = b_L0_idx[b1_ptr]; | |
a_L0_idx[a1_ptr] = ib; | |
a1_ptr = (a1_ptr + 1); | |
if ((0 == ((a1_ptr + 1) & a1_ptr)) && (32 <= (a1_ptr + 1))) | |
a_L0_idx = (int*)realloc(a_L0_idx, sizeof(int) * (2 * (a1_ptr + 1))); | |
b1_ptr = (b1_ptr + 1); | |
} | |
while (c1_ptr < c_L0_ptr[(0 + 1)]) { | |
ic = c_L0_idx[c1_ptr]; | |
a_L0_idx[a1_ptr] = ic; | |
a1_ptr = (a1_ptr + 1); | |
if ((0 == ((a1_ptr + 1) & a1_ptr)) && (32 <= (a1_ptr + 1))) | |
a_L0_idx = (int*)realloc(a_L0_idx, sizeof(int) * (2 * (a1_ptr + 1))); | |
c1_ptr = (c1_ptr + 1); | |
} | |
a_L0_ptr[(0 + 1)] = a1_ptr; | |
((int**)a)[1] = (int*)a_L0_idx; | |
((int**)a)[0] = (int*)a_L0_ptr; | |
return 0; | |
} | |
int compute(void** inputPack) { | |
void** a = &(inputPack[0]); | |
void** b = &(inputPack[3]); | |
void** c = &(inputPack[6]); | |
int ib; | |
int b1_ptr; | |
int c1_ptr; | |
int ic; | |
int a1_ptr; | |
int i; | |
int* restrict b_L0_ptr = (int*)b[0]; | |
double* restrict a_vals = a[2]; | |
int* restrict a_L0_ptr = (int*)a[0]; | |
int* restrict c_L0_ptr = (int*)c[0]; | |
int* restrict b_L0_idx = (int*)b[1]; | |
int* restrict c_L0_idx = (int*)c[1]; | |
double* restrict c_vals = c[2]; | |
double* restrict b_vals = b[2]; | |
/* a(i) = (b(i) + c(i)) */ | |
a1_ptr = a_L0_ptr[0]; | |
b1_ptr = b_L0_ptr[0]; | |
c1_ptr = c_L0_ptr[0]; | |
while ((b1_ptr < b_L0_ptr[(0 + 1)]) && (c1_ptr < c_L0_ptr[(0 + 1)])) { | |
ib = b_L0_idx[b1_ptr]; | |
ic = c_L0_idx[c1_ptr]; | |
i = TACO_MIN(ib,ic); | |
if ((ib == i) && (ic == i)) { | |
a_vals[a1_ptr] = (b_vals[b1_ptr] + c_vals[c1_ptr]); | |
a1_ptr = (a1_ptr + 1); | |
} | |
else if (ib == i) { | |
a_vals[a1_ptr] = b_vals[b1_ptr]; | |
a1_ptr = (a1_ptr + 1); | |
} | |
else { | |
a_vals[a1_ptr] = c_vals[c1_ptr]; | |
a1_ptr = (a1_ptr + 1); | |
} | |
if (ib == i) | |
b1_ptr = (b1_ptr + 1); | |
if (ic == i) | |
c1_ptr = (c1_ptr + 1); | |
} | |
while (b1_ptr < b_L0_ptr[(0 + 1)]) { | |
ib = b_L0_idx[b1_ptr]; | |
a_vals[a1_ptr] = b_vals[b1_ptr]; | |
a1_ptr = (a1_ptr + 1); | |
b1_ptr = (b1_ptr + 1); | |
} | |
while (c1_ptr < c_L0_ptr[(0 + 1)]) { | |
ic = c_L0_idx[c1_ptr]; | |
a_vals[a1_ptr] = c_vals[c1_ptr]; | |
a1_ptr = (a1_ptr + 1); | |
c1_ptr = (c1_ptr + 1); | |
} | |
((int**)a)[0] = (int*)a_L0_ptr; | |
((double**)a)[2] = a_vals; | |
return 0; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifndef TACO_C_HEADERS | |
#define TACO_C_HEADERS | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <math.h> | |
#define TACO_MIN(_a,_b) ((_a) < (_b) ? (_a) : (_b)) | |
#endif | |
int assemble(void** inputPack) { | |
void** a = &(inputPack[0]); | |
void** b = &(inputPack[3]); | |
void** c = &(inputPack[6]); | |
int* restrict a_L0_ptr = (int*)a[0]; | |
int* restrict c_L0_idx = (int*)c[1]; | |
int* restrict b_L0_idx = (int*)b[1]; | |
int* restrict b_L0_ptr = (int*)b[0]; | |
int* restrict c_L0_ptr = (int*)c[0]; | |
int* restrict a_L0_idx = (int*)a[1]; | |
/* a(i) = (b(i) + c(i)) */ | |
a1_ptr = a_L0_ptr[0]; | |
b1_ptr = b_L0_ptr[0]; | |
c1_ptr = c_L0_ptr[0]; | |
while ((b1_ptr < b_L0_ptr[(0 + 1)]) && (c1_ptr < c_L0_ptr[(0 + 1)])) { | |
ib = b_L0_idx[b1_ptr]; | |
ic = c_L0_idx[c1_ptr]; | |
i = TACO_MIN(ib,ic); | |
if ((ib == i) && (ic == i)) { | |
a_L0_idx[a1_ptr] = i; | |
a1_ptr = (a1_ptr + 1); | |
if ((0 == ((a1_ptr + 1) & a1_ptr)) && (32 <= (a1_ptr + 1))) | |
a_L0_idx = (int*)realloc(a_L0_idx, sizeof(int) * (2 * (a1_ptr + 1))); | |
} | |
else if (ib == i) { | |
a_L0_idx[a1_ptr] = i; | |
a1_ptr = (a1_ptr + 1); | |
if ((0 == ((a1_ptr + 1) & a1_ptr)) && (32 <= (a1_ptr + 1))) | |
a_L0_idx = (int*)realloc(a_L0_idx, sizeof(int) * (2 * (a1_ptr + 1))); | |
} | |
else { | |
a_L0_idx[a1_ptr] = i; | |
a1_ptr = (a1_ptr + 1); | |
if ((0 == ((a1_ptr + 1) & a1_ptr)) && (32 <= (a1_ptr + 1))) | |
a_L0_idx = (int*)realloc(a_L0_idx, sizeof(int) * (2 * (a1_ptr + 1))); | |
} | |
if (ib == i) | |
b1_ptr = (b1_ptr + 1); | |
if (ic == i) | |
c1_ptr = (c1_ptr + 1); | |
} | |
while (b1_ptr < b_L0_ptr[(0 + 1)]) { | |
ib = b_L0_idx[b1_ptr]; | |
a_L0_idx[a1_ptr] = ib; | |
a1_ptr = (a1_ptr + 1); | |
if ((0 == ((a1_ptr + 1) & a1_ptr)) && (32 <= (a1_ptr + 1))) | |
a_L0_idx = (int*)realloc(a_L0_idx, sizeof(int) * (2 * (a1_ptr + 1))); | |
b1_ptr = (b1_ptr + 1); | |
} | |
while (c1_ptr < c_L0_ptr[(0 + 1)]) { | |
ic = c_L0_idx[c1_ptr]; | |
a_L0_idx[a1_ptr] = ic; | |
a1_ptr = (a1_ptr + 1); | |
if ((0 == ((a1_ptr + 1) & a1_ptr)) && (32 <= (a1_ptr + 1))) | |
a_L0_idx = (int*)realloc(a_L0_idx, sizeof(int) * (2 * (a1_ptr + 1))); | |
c1_ptr = (c1_ptr + 1); | |
} | |
a_L0_ptr[(0 + 1)] = a1_ptr; | |
((int**)a)[1] = (int*)a_L0_idx; | |
((int**)a)[0] = (int*)a_L0_ptr; | |
return 0; | |
} | |
int compute(void** inputPack) { | |
void** a = &(inputPack[0]); | |
void** b = &(inputPack[3]); | |
void** c = &(inputPack[6]); | |
int* restrict a_L0_ptr = (int*)a[0]; | |
double* restrict a_vals = a[2]; | |
int* restrict b_L0_idx = (int*)b[1]; | |
int* restrict c_L0_idx = (int*)c[1]; | |
int* restrict b_L0_ptr = (int*)b[0]; | |
int* restrict c_L0_ptr = (int*)c[0]; | |
double* restrict c_vals = c[2]; | |
double* restrict b_vals = b[2]; | |
/* a(i) = (b(i) + c(i)) */ | |
a1_ptr = a_L0_ptr[0]; | |
b1_ptr = b_L0_ptr[0]; | |
c1_ptr = c_L0_ptr[0]; | |
while ((b1_ptr < b_L0_ptr[(0 + 1)]) && (c1_ptr < c_L0_ptr[(0 + 1)])) { | |
ib = b_L0_idx[b1_ptr]; | |
ic = c_L0_idx[c1_ptr]; | |
i = TACO_MIN(ib,ic); | |
if ((ib == i) && (ic == i)) { | |
a_vals[a1_ptr] = (b_vals[b1_ptr] + c_vals[c1_ptr]); | |
a1_ptr = (a1_ptr + 1); | |
} | |
else if (ib == i) { | |
a_vals[a1_ptr] = b_vals[b1_ptr]; | |
a1_ptr = (a1_ptr + 1); | |
} | |
else { | |
a_vals[a1_ptr] = c_vals[c1_ptr]; | |
a1_ptr = (a1_ptr + 1); | |
} | |
if (ib == i) | |
b1_ptr = (b1_ptr + 1); | |
if (ic == i) | |
c1_ptr = (c1_ptr + 1); | |
} | |
while (b1_ptr < b_L0_ptr[(0 + 1)]) { | |
ib = b_L0_idx[b1_ptr]; | |
a_vals[a1_ptr] = b_vals[b1_ptr]; | |
a_vals[a1_ptr] = b_vals[b1_ptr]; | |
a1_ptr = (a1_ptr + 1); | |
b1_ptr = (b1_ptr + 1); | |
} | |
while (c1_ptr < c_L0_ptr[(0 + 1)]) { | |
ic = c_L0_idx[c1_ptr]; | |
a_vals[a1_ptr] = c_vals[c1_ptr]; | |
a1_ptr = (a1_ptr + 1); | |
c1_ptr = (c1_ptr + 1); | |
} | |
((int**)a)[0] = (int*)a_L0_ptr; | |
((double**)a)[2] = a_vals; | |
return 0; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment