// ************************************************************************** // // // // eses eses // // eses eses // // eses eseses esesese eses Embedded Systems Group // // ese ese ese ese ese // // ese eseseses eseseses ese Department of Computer Science // // eses eses ese eses // // eses eseses eseseses eses University of Kaiserslautern // // eses eses // // // // ************************************************************************** // [64]nat x; thread ParallelPrefixTree_64 { [64]nat y; y[0] = x[0]; y[1] = x[1]; y[2] = x[2]; y[3] = x[3]; y[4] = x[4]; y[5] = x[5]; y[6] = x[6]; y[7] = x[7]; y[8] = x[8]; y[9] = x[9]; y[10] = x[10]; y[11] = x[11]; y[12] = x[12]; y[13] = x[13]; y[14] = x[14]; y[15] = x[15]; y[16] = x[16]; y[17] = x[17]; y[18] = x[18]; y[19] = x[19]; y[20] = x[20]; y[21] = x[21]; y[22] = x[22]; y[23] = x[23]; y[24] = x[24]; y[25] = x[25]; y[26] = x[26]; y[27] = x[27]; y[28] = x[28]; y[29] = x[29]; y[30] = x[30]; y[31] = x[31]; y[32] = x[32]; y[33] = x[33]; y[34] = x[34]; y[35] = x[35]; y[36] = x[36]; y[37] = x[37]; y[38] = x[38]; y[39] = x[39]; y[40] = x[40]; y[41] = x[41]; y[42] = x[42]; y[43] = x[43]; y[44] = x[44]; y[45] = x[45]; y[46] = x[46]; y[47] = x[47]; y[48] = x[48]; y[49] = x[49]; y[50] = x[50]; y[51] = x[51]; y[52] = x[52]; y[53] = x[53]; y[54] = x[54]; y[55] = x[55]; y[56] = x[56]; y[57] = x[57]; y[58] = x[58]; y[59] = x[59]; y[60] = x[60]; y[61] = x[61]; y[62] = x[62]; y[63] = x[63]; // up-level 0 y[1] = y[0] + y[1]; y[3] = y[2] + y[3]; y[5] = y[4] + y[5]; y[7] = y[6] + y[7]; y[9] = y[8] + y[9]; y[11] = y[10] + y[11]; y[13] = y[12] + y[13]; y[15] = y[14] + y[15]; y[17] = y[16] + y[17]; y[19] = y[18] + y[19]; y[21] = y[20] + y[21]; y[23] = y[22] + y[23]; y[25] = y[24] + y[25]; y[27] = y[26] + y[27]; y[29] = y[28] + y[29]; y[31] = y[30] + y[31]; y[33] = y[32] + y[33]; y[35] = y[34] + y[35]; y[37] = y[36] + y[37]; y[39] = y[38] + y[39]; y[41] = y[40] + y[41]; y[43] = y[42] + y[43]; y[45] = y[44] + y[45]; y[47] = y[46] + y[47]; y[49] = y[48] + y[49]; y[51] = y[50] + y[51]; y[53] = y[52] + y[53]; y[55] = y[54] + y[55]; y[57] = y[56] + y[57]; y[59] = y[58] + y[59]; y[61] = y[60] + y[61]; y[63] = y[62] + y[63]; // up-level 1 y[3] = y[1] + y[3]; y[7] = y[5] + y[7]; y[11] = y[9] + y[11]; y[15] = y[13] + y[15]; y[19] = y[17] + y[19]; y[23] = y[21] + y[23]; y[27] = y[25] + y[27]; y[31] = y[29] + y[31]; y[35] = y[33] + y[35]; y[39] = y[37] + y[39]; y[43] = y[41] + y[43]; y[47] = y[45] + y[47]; y[51] = y[49] + y[51]; y[55] = y[53] + y[55]; y[59] = y[57] + y[59]; y[63] = y[61] + y[63]; // up-level 2 y[7] = y[3] + y[7]; y[15] = y[11] + y[15]; y[23] = y[19] + y[23]; y[31] = y[27] + y[31]; y[39] = y[35] + y[39]; y[47] = y[43] + y[47]; y[55] = y[51] + y[55]; y[63] = y[59] + y[63]; // up-level 3 y[15] = y[7] + y[15]; y[31] = y[23] + y[31]; y[47] = y[39] + y[47]; y[63] = y[55] + y[63]; // up-level 4 y[31] = y[15] + y[31]; y[63] = y[47] + y[63]; // up-level 5 y[63] = y[31] + y[63]; // up-level 6 // down-level 7 // down-level 8 y[47] = y[31] + y[47]; // down-level 9 y[23] = y[15] + y[23]; y[39] = y[31] + y[39]; y[55] = y[47] + y[55]; // down-level 10 y[11] = y[7] + y[11]; y[19] = y[15] + y[19]; y[27] = y[23] + y[27]; y[35] = y[31] + y[35]; y[43] = y[39] + y[43]; y[51] = y[47] + y[51]; y[59] = y[55] + y[59]; // down-level 11 y[5] = y[3] + y[5]; y[9] = y[7] + y[9]; y[13] = y[11] + y[13]; y[17] = y[15] + y[17]; y[21] = y[19] + y[21]; y[25] = y[23] + y[25]; y[29] = y[27] + y[29]; y[33] = y[31] + y[33]; y[37] = y[35] + y[37]; y[41] = y[39] + y[41]; y[45] = y[43] + y[45]; y[49] = y[47] + y[49]; y[53] = y[51] + y[53]; y[57] = y[55] + y[57]; y[61] = y[59] + y[61]; // down-level 12 y[2] = y[1] + y[2]; y[4] = y[3] + y[4]; y[6] = y[5] + y[6]; y[8] = y[7] + y[8]; y[10] = y[9] + y[10]; y[12] = y[11] + y[12]; y[14] = y[13] + y[14]; y[16] = y[15] + y[16]; y[18] = y[17] + y[18]; y[20] = y[19] + y[20]; y[22] = y[21] + y[22]; y[24] = y[23] + y[24]; y[26] = y[25] + y[26]; y[28] = y[27] + y[28]; y[30] = y[29] + y[30]; y[32] = y[31] + y[32]; y[34] = y[33] + y[34]; y[36] = y[35] + y[36]; y[38] = y[37] + y[38]; y[40] = y[39] + y[40]; y[42] = y[41] + y[42]; y[44] = y[43] + y[44]; y[46] = y[45] + y[46]; y[48] = y[47] + y[48]; y[50] = y[49] + y[50]; y[52] = y[51] + y[52]; y[54] = y[53] + y[54]; y[56] = y[55] + y[56]; y[58] = y[57] + y[58]; y[60] = y[59] + y[60]; y[62] = y[61] + y[62]; x[0] = y[0]; x[1] = y[1]; x[2] = y[2]; x[3] = y[3]; x[4] = y[4]; x[5] = y[5]; x[6] = y[6]; x[7] = y[7]; x[8] = y[8]; x[9] = y[9]; x[10] = y[10]; x[11] = y[11]; x[12] = y[12]; x[13] = y[13]; x[14] = y[14]; x[15] = y[15]; x[16] = y[16]; x[17] = y[17]; x[18] = y[18]; x[19] = y[19]; x[20] = y[20]; x[21] = y[21]; x[22] = y[22]; x[23] = y[23]; x[24] = y[24]; x[25] = y[25]; x[26] = y[26]; x[27] = y[27]; x[28] = y[28]; x[29] = y[29]; x[30] = y[30]; x[31] = y[31]; x[32] = y[32]; x[33] = y[33]; x[34] = y[34]; x[35] = y[35]; x[36] = y[36]; x[37] = y[37]; x[38] = y[38]; x[39] = y[39]; x[40] = y[40]; x[41] = y[41]; x[42] = y[42]; x[43] = y[43]; x[44] = y[44]; x[45] = y[45]; x[46] = y[46]; x[47] = y[47]; x[48] = y[48]; x[49] = y[49]; x[50] = y[50]; x[51] = y[51]; x[52] = y[52]; x[53] = y[53]; x[54] = y[54]; x[55] = y[55]; x[56] = y[56]; x[57] = y[57]; x[58] = y[58]; x[59] = y[59]; x[60] = y[60]; x[61] = y[61]; x[62] = y[62]; x[63] = y[63]; }