// ************************************************************************** // // // // 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 // // // // ************************************************************************** // [32]nat x; thread ParallelPrefixTree_32 { // up-level 0 x[1] = x[0] + x[1]; x[3] = x[2] + x[3]; x[5] = x[4] + x[5]; x[7] = x[6] + x[7]; x[9] = x[8] + x[9]; x[11] = x[10] + x[11]; x[13] = x[12] + x[13]; x[15] = x[14] + x[15]; x[17] = x[16] + x[17]; x[19] = x[18] + x[19]; x[21] = x[20] + x[21]; x[23] = x[22] + x[23]; x[25] = x[24] + x[25]; x[27] = x[26] + x[27]; x[29] = x[28] + x[29]; x[31] = x[30] + x[31]; // up-level 1 x[3] = x[1] + x[3]; x[7] = x[5] + x[7]; x[11] = x[9] + x[11]; x[15] = x[13] + x[15]; x[19] = x[17] + x[19]; x[23] = x[21] + x[23]; x[27] = x[25] + x[27]; x[31] = x[29] + x[31]; // up-level 2 x[7] = x[3] + x[7]; x[15] = x[11] + x[15]; x[23] = x[19] + x[23]; x[31] = x[27] + x[31]; // up-level 3 x[15] = x[7] + x[15]; x[31] = x[23] + x[31]; // up-level 4 x[31] = x[15] + x[31]; // up-level 5 // down-level 6 // down-level 7 x[23] = x[15] + x[23]; // down-level 8 x[11] = x[7] + x[11]; x[19] = x[15] + x[19]; x[27] = x[23] + x[27]; // down-level 9 x[5] = x[3] + x[5]; x[9] = x[7] + x[9]; x[13] = x[11] + x[13]; x[17] = x[15] + x[17]; x[21] = x[19] + x[21]; x[25] = x[23] + x[25]; x[29] = x[27] + x[29]; // down-level 10 x[2] = x[1] + x[2]; x[4] = x[3] + x[4]; x[6] = x[5] + x[6]; x[8] = x[7] + x[8]; x[10] = x[9] + x[10]; x[12] = x[11] + x[12]; x[14] = x[13] + x[14]; x[16] = x[15] + x[16]; x[18] = x[17] + x[18]; x[20] = x[19] + x[20]; x[22] = x[21] + x[22]; x[24] = x[23] + x[24]; x[26] = x[25] + x[26]; x[28] = x[27] + x[28]; x[30] = x[29] + x[30]; }