From: Luke Kenneth Casson Leighton Date: Tue, 8 Oct 2019 04:38:11 +0000 (+0100) Subject: add comment about vector length / dot-product X-Git-Tag: convert-csv-opcode-to-binary~3873 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cb0a257ad8a5c39c8634e066f8145ab9cadd011c;p=libreriscv.git add comment about vector length / dot-product --- diff --git a/simple_v_extension/vector_ops/discussion.mdwn b/simple_v_extension/vector_ops/discussion.mdwn index 968dccbd9..9f8875904 100644 --- a/simple_v_extension/vector_ops/discussion.mdwn +++ b/simple_v_extension/vector_ops/discussion.mdwn @@ -16,27 +16,27 @@ From def rotation_mode(x, y, z, coord_mode, iterations): a = 0.607252935; # = 1/K - + x_val_list = [] y_val_list = [] z_val_list = [] iterations_list = [] i = 0; # Keeps count on number of iterations - - current_x = x # Value of X on ith iteration + + current_x = x # Value of X on ith iteration current_y = y # Value of Y on ith iteration current_z = z # Value of Z on ith iteration - + di = 0 - + if (coord_mode == hyperbolic): i = 1 else: i = 0 - + flag = 0 - + if (iterations > 0): while (i < iterations): if (current_z < 0): @@ -46,7 +46,7 @@ From next_z = current_z - di * ROM_lookup(i, coord_mode) next_x = current_x - coord_mode * di * current_y * (2**(-1*i)) next_y = current_y + di * current_x * 2**(-1*i) - + current_x = next_x current_y = next_y current_z = next_z @@ -54,9 +54,9 @@ From x_val_list.append(current_x) y_val_list.append(current_y) z_val_list.append(current_z) - + iterations_list.append(i) - + if (coord_mode == hyperbolic): if ((i != 4) & (i != 13) & (i!=40)): i = i+1 @@ -72,36 +72,36 @@ From def vector_mode(x, y, z, coord_mode, iterations): a = 1.2075; # = 1/K - + x_val_list = [] y_val_list = [] z_val_list = [] iterations_list = [] i = 0; # Keeps count on number of iterations - - current_x = x # Value of X on ith iteration + + current_x = x # Value of X on ith iteration current_y = y # Value of Y on ith iteration current_z = z # Value of Z on ith iteration - + di = 0 - - # This is neccesary since result for i=0 doesn't exists for hyperbolic + + # This is neccesary since result for i=0 doesn't exists for hyperbolic # co-ordinate system. if (coord_mode == hyperbolic): i = 1 else: i = 0 - + flag = 0 - + if (iterations > 0): while (i < iterations): di = -1*math.copysign(1, current_y);#*current_x); next_x = current_x - coord_mode * di * current_y * (2**(-1*i)) next_y = current_y + di * current_x * 2**(-1*i) next_z = current_z - di * ROM_lookup(i, coord_mode) - + current_x = next_x current_y = next_y current_z = next_z @@ -109,9 +109,9 @@ From x_val_list.append(current_x) y_val_list.append(current_y) z_val_list.append(current_z) - + iterations_list.append(i) - + if (coord_mode == hyperbolic): if ((i != 4) & (i != 13) & (i!=40)): i = i+1 @@ -124,3 +124,16 @@ From i = i+1 return { 'x':x_val_list, 'y':y_val_list, 'z':z_val_list, 'iteration':iterations_list } + +# Vector Length + +> With VLENGTH being also expressible as dotproduct followed by scalar +> sqrt, is it reasonable to have both normalisation as well as VLENGTH +> as macro op fused sequences? + +Vector length would presumably involve dotting a vector with itself. +The potential advantage I see is that the dot product might be tempted +to read that vector twice; whereas the length would only read it once. +If some other mechanism eliminates the duplicate read, they would be +pretty well equivalent. +