|
| 1 | + |
| 2 | +import gc |
| 3 | +import numpy as np |
| 4 | +import time |
| 5 | + |
| 6 | +# contiguous_array[i-1] |
| 7 | +# contiguous_array[i] |
| 8 | +# contiguous_array[i+1] |
| 9 | +# new_array1 = np.ones(np.shape(contiguous_array)) |
| 10 | + |
| 11 | +print("Configuration") |
| 12 | +# Python float is 64 bit / 8 byte |
| 13 | +ARRAY_SIZE = 1000 * 1000 * 1 |
| 14 | +print("- Size of data array: {} MB".format(ARRAY_SIZE * 8 / (1000 * 1000))) |
| 15 | + |
| 16 | +N = 10 |
| 17 | +print("- Number of iterations to average: {}".format(N)) |
| 18 | + |
| 19 | +def SETUP(): |
| 20 | + array1 = np.ones(ARRAY_SIZE) |
| 21 | + array2 = np.ones(ARRAY_SIZE) |
| 22 | + buffer_array = np.empty(ARRAY_SIZE) |
| 23 | + return array1, array2, buffer_array |
| 24 | + |
| 25 | + |
| 26 | +if __name__=="__main__": |
| 27 | + # gc.disable() |
| 28 | + |
| 29 | + print("{:45}{:<15}{:<15}".format("Case description", "Total time", "Per-iteration time")) |
| 30 | + |
| 31 | + array1, array2, buffer_array = SETUP() |
| 32 | + index_map = np.random.randint(0, ARRAY_SIZE - 1, size=ARRAY_SIZE) |
| 33 | + elapsed_time = 0.0 |
| 34 | + for _ in range(N): |
| 35 | + start = time.time() |
| 36 | + |
| 37 | + for i in index_map: |
| 38 | + buffer_array[i] = array1[i] + array2[i] |
| 39 | + |
| 40 | + end = time.time() |
| 41 | + elapsed_time += end - start |
| 42 | + average = elapsed_time / N |
| 43 | + print("{:45}{:<15.6f}{:<15.6f}".format("Non-contiguous access, no vectorization", elapsed_time, average)) |
| 44 | + |
| 45 | + |
| 46 | + array1, array2, buffer_array = SETUP() |
| 47 | + elapsed_time = 0.0 |
| 48 | + for _ in range(N): |
| 49 | + start = time.time() |
| 50 | + |
| 51 | + for i in range(ARRAY_SIZE): |
| 52 | + buffer_array[i] = array1[i] + array2[i] |
| 53 | + |
| 54 | + end = time.time() |
| 55 | + elapsed_time += end - start |
| 56 | + average = elapsed_time / N |
| 57 | + print("{:45}{:<15.6f}{:<15.6f}".format("Contiguous access, no vectorization", elapsed_time, average)) |
| 58 | + |
| 59 | + |
| 60 | + array1, array2, buffer_array = SETUP() |
| 61 | + index_map = np.random.randint(0, ARRAY_SIZE - 1, size=ARRAY_SIZE) |
| 62 | + elapsed_time = 0.0 |
| 63 | + for _ in range(N): |
| 64 | + start = time.time() |
| 65 | + |
| 66 | + buffer_array = array1[index_map] + array2[index_map] |
| 67 | + |
| 68 | + end = time.time() |
| 69 | + elapsed_time += end - start |
| 70 | + average = elapsed_time / N |
| 71 | + print("{:45}{:<15.6f}{:<15.6f}".format("Non-contiguous access, vectorization", elapsed_time, average)) |
| 72 | + |
| 73 | + |
| 74 | + array1, array2, buffer_array = SETUP() |
| 75 | + index_map = np.arange(0, ARRAY_SIZE) |
| 76 | + elapsed_time = 0.0 |
| 77 | + for _ in range(N): |
| 78 | + start = time.time() |
| 79 | + |
| 80 | + buffer_array = array1[index_map] + array2[index_map] |
| 81 | + |
| 82 | + end = time.time() |
| 83 | + elapsed_time += end - start |
| 84 | + average = elapsed_time / N |
| 85 | + print("{:45}{:<15.6f}{:<15.6f}".format("Contiguous access, vectorization", elapsed_time, average)) |
0 commit comments