├── .gitignore ├── CMakeLists.txt ├── README.md ├── convolve.c ├── convolve.h ├── convolve_2d.c ├── convolve_2d.h ├── get_terminal_size.py ├── multiple_convolve.c ├── pretty_print_times.py ├── py_test_convolve.py ├── test_convolve.c ├── test_data.c └── test_data.h /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | CMakeCache.txt 3 | CMakeFiles 4 | cmake_install.cmake 5 | Makefile 6 | *.so 7 | *.o 8 | *.swp 9 | test_convolve 10 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # Update the module path to include any extra CMAKE modules we might ship. 2 | set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules") 3 | 4 | project(SSE_CONV_TEST) 5 | 6 | # Set the minimum required version of cmake 7 | CMAKE_MINIMUM_REQUIRED(VERSION 2.6) 8 | 9 | # Enable warnings and make them errors 10 | #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror") 11 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") 12 | 13 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror") 14 | 15 | # Magic to set GCC-specific compile flags (to turn on optimisation). 16 | set(GCC_FLAGS "-std=c99 -Wall -O3 -msse3 -mavx -march=native") 17 | add_definitions( -DSSE3 ) 18 | add_definitions( -DAVX ) 19 | 20 | if(CMAKE_COMPILER_IS_GNUCC) 21 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_FLAGS}") 22 | endif(CMAKE_COMPILER_IS_GNUCC) 23 | if(CMAKE_COMPILER_IS_GNUCXX) 24 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_FLAGS}") 25 | endif(CMAKE_COMPILER_IS_GNUCXX) 26 | 27 | # On x86_64 we need to compile with -fPIC 28 | if(UNIX AND NOT WIN32) 29 | find_program(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin ) 30 | if(CMAKE_UNAME) 31 | exec_program(uname ARGS -m OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR) 32 | set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR} 33 | CACHE INTERNAL "processor type (i386 and x86_64)") 34 | if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") 35 | add_definitions(-fPIC) 36 | endif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") 37 | endif(CMAKE_UNAME) 38 | endif(UNIX AND NOT WIN32) 39 | 40 | # Find the pkg-config support macros 41 | find_package(PkgConfig) 42 | 43 | # Attempt to locate and use GLib. 44 | pkg_check_modules(GLIB REQUIRED glib-2.0) 45 | include_directories(${GLIB_INCLUDE_DIRS}) 46 | link_directories(${GLIB_LIBRARY_DIRS}) 47 | set(CMAKE_CFLAGS "${CMAKE_CFLAGS} ${GLIB_CFLAGS}") 48 | set(CMAKE_CXXFLAGS "${CMAKE_CXXFLAGS} ${GLIB_CFLAGS}") 49 | 50 | add_library(convolve_funcs SHARED convolve.h convolve.c 51 | convolve_2d.h convolve_2d.c multiple_convolve.c) 52 | 53 | set(_test_convolve_sources 54 | test_data.h test_data.c 55 | test_convolve.c multiple_convolve.c 56 | ) 57 | 58 | add_executable(test_convolve ${_test_convolve_sources}) 59 | target_link_libraries(test_convolve 60 | convolve_funcs 61 | ${GLIB_LIBRARIES}) 62 | 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | SSE-convolution 2 | =============== 3 | 4 | A demonstration of speeding up a 1D convolution using SSE 5 | 6 | Information about the implementations is provided in convolve.c, which 7 | contains the interesting code. 8 | 9 | Build it using `cmake .` 10 | 11 | Test it with the python script `py_test_convolve.py`. This checks the output 12 | and prints out the times taken for each implementation and the flops estimate. 13 | 14 | The test_convolve c script seems to be broken (feel free to submit a patch). 15 | -------------------------------------------------------------------------------- /convolve.c: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2012 Henry Gomersall 2 | * 3 | * All rights reserved. 4 | * 5 | * Redistribution and use in source and binary forms, with or without 6 | * modification, are permitted provided that the following conditions are met: 7 | * * Redistributions of source code must retain the above copyright 8 | * notice, this list of conditions and the following disclaimer. 9 | * * Redistributions in binary form must reproduce the above copyright 10 | * notice, this list of conditions and the following disclaimer in the 11 | * documentation and/or other materials provided with the distribution. 12 | * * Neither the name of the organization nor the 13 | * names of its contributors may be used to endorse or promote products 14 | * derived from this software without specific prior written permission. 15 | * 16 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY 17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | */ 27 | 28 | #include "convolve.h" 29 | #include 30 | #include 31 | 32 | #define SSE_SIMD_LENGTH 4 33 | #define AVX_SIMD_LENGTH 8 34 | #define KERNEL_LENGTH 16 35 | 36 | /* A set of convolution routines, all of which present the same interface 37 | * (albeit, with some of them having restrictions on the size and shape of 38 | * the input data) 39 | * 40 | * ``out'' is filled with the same values as would be returned by 41 | * numpy.convolve(in, kernel, mode='valid'). 42 | * 43 | * All the convolve functions have the same signature and interface. 44 | * 45 | * */ 46 | 47 | 48 | /* A simple implementation of a 1D convolution that just iterates over 49 | * scalar values of the input array. 50 | * 51 | * Returns the same as numpy.convolve(in, kernel, mode='valid') 52 | * */ 53 | int convolve_naive(float* in, float* out, int length, 54 | float* kernel, int kernel_length) 55 | { 56 | for(int i=0; i<=length-kernel_length; i++){ 57 | 58 | out[i] = 0.0; 59 | for(int k=0; k 2 | * 3 | * All rights reserved. 4 | * 5 | * Redistribution and use in source and binary forms, with or without 6 | * modification, are permitted provided that the following conditions are met: 7 | * * Redistributions of source code must retain the above copyright 8 | * notice, this list of conditions and the following disclaimer. 9 | * * Redistributions in binary form must reproduce the above copyright 10 | * notice, this list of conditions and the following disclaimer in the 11 | * documentation and/or other materials provided with the distribution. 12 | * * Neither the name of the organization nor the 13 | * names of its contributors may be used to endorse or promote products 14 | * derived from this software without specific prior written permission. 15 | * 16 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY 17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | */ 27 | 28 | #ifndef _CONVOLVE_H 29 | #define _CONVOLVE_H 30 | 31 | #if defined SSE3 || defined AVX 32 | #include 33 | #endif 34 | 35 | 36 | /* A macro that outputs a wrapper for each of the convolution routines. 37 | * The macro passed a name conv_func will output a function called 38 | * conv_func_multiple and it will have signature: 39 | * conv_func_multiple(float* in, float* out, int length, 40 | * float* kernel, int kernel_length, int N) 41 | * 42 | * The additional N defines how many times to run the convolution function 43 | * conv_func(float* in, float* out, int length, 44 | * float* kernel, int kernel_length) 45 | * */ 46 | #ifndef MULTIPLE_CONVOLVE 47 | #define MULTIPLE_CONVOLVE_PROTO(FUNCTION_NAME) \ 48 | int FUNCTION_NAME ## _multiple(float* in, float* out, int length, \ 49 | float* kernel, int kernel_length, int N); 50 | #endif 51 | 52 | int convolve_naive(float* in, float* out, int length, 53 | float* kernel, int kernel_length); 54 | MULTIPLE_CONVOLVE_PROTO(convolve_naive); 55 | 56 | int convolve_reversed_naive(float* in, float* out, int length, 57 | float* kernel, int kernel_length); 58 | MULTIPLE_CONVOLVE_PROTO(convolve_reversed_naive); 59 | 60 | #ifdef SSE3 61 | int convolve_sse_simple(float* in, float* out, int length, 62 | float* kernel, int kernel_length); 63 | MULTIPLE_CONVOLVE_PROTO(convolve_sse_simple); 64 | 65 | int convolve_sse_partial_unroll(float* in, float* out, int length, 66 | float* kernel, int kernel_length); 67 | MULTIPLE_CONVOLVE_PROTO(convolve_sse_partial_unroll); 68 | 69 | int convolve_sse_in_aligned(float* in, float* out, int length, 70 | float* kernel, int kernel_length); 71 | MULTIPLE_CONVOLVE_PROTO(convolve_sse_in_aligned); 72 | 73 | int convolve_sse_in_aligned_fixed_kernel(float* in, float* out, int length, 74 | float* kernel, int kernel_length); 75 | MULTIPLE_CONVOLVE_PROTO(convolve_sse_in_aligned_fixed_kernel); 76 | 77 | int convolve_sse_unrolled_avx_vector(float* in, float* out, int length, 78 | float* kernel, int kernel_length); 79 | MULTIPLE_CONVOLVE_PROTO(convolve_sse_unrolled_avx_vector); 80 | 81 | int convolve_sse_unrolled_vector(float* in, float* out, int length, 82 | float* kernel, int kernel_length); 83 | MULTIPLE_CONVOLVE_PROTO(convolve_sse_unrolled_vector); 84 | 85 | #endif 86 | 87 | #ifdef AVX 88 | int convolve_avx_unrolled_vector(float* in, float* out, int length, 89 | float* kernel, int kernel_length); 90 | MULTIPLE_CONVOLVE_PROTO(convolve_avx_unrolled_vector); 91 | 92 | int convolve_avx_unrolled_vector_unaligned(float* in, float* out, int length, 93 | float* kernel, int kernel_length); 94 | MULTIPLE_CONVOLVE_PROTO(convolve_avx_unrolled_vector_unaligned); 95 | 96 | int convolve_avx_unrolled_vector_unaligned_fma(float* in, float* out, 97 | int length, float* kernel, int kernel_length); 98 | MULTIPLE_CONVOLVE_PROTO(convolve_avx_unrolled_vector_unaligned_fma); 99 | 100 | int convolve_avx_unrolled_vector_m128_load(float* in, float* out, int length, 101 | float* kernel, int kernel_length); 102 | MULTIPLE_CONVOLVE_PROTO(convolve_avx_unrolled_vector_m128_load); 103 | 104 | int convolve_avx_unrolled_vector_aligned( 105 | float* in, float* out, int length, 106 | float* kernel, int kernel_length); 107 | MULTIPLE_CONVOLVE_PROTO(convolve_avx_unrolled_vector_aligned); 108 | 109 | int convolve_avx_unrolled_vector_partial_aligned( 110 | float* in, float* out, int length, 111 | float* kernel, int kernel_length); 112 | MULTIPLE_CONVOLVE_PROTO(convolve_avx_unrolled_vector_partial_aligned); 113 | 114 | int convolve_avx_unrolled_vector_local_output(float* in, float* out, int length, 115 | float* kernel, int kernel_length); 116 | MULTIPLE_CONVOLVE_PROTO(convolve_avx_unrolled_vector_local_output); 117 | 118 | #endif 119 | 120 | #endif /*Header guard*/ 121 | -------------------------------------------------------------------------------- /convolve_2d.c: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2012 Henry Gomersall 2 | * 3 | * All rights reserved. 4 | * 5 | * Redistribution and use in source and binary forms, with or without 6 | * modification, are permitted provided that the following conditions are met: 7 | * * Redistributions of source code must retain the above copyright 8 | * notice, this list of conditions and the following disclaimer. 9 | * * Redistributions in binary form must reproduce the above copyright 10 | * notice, this list of conditions and the following disclaimer in the 11 | * documentation and/or other materials provided with the distribution. 12 | * * Neither the name of the organization nor the 13 | * names of its contributors may be used to endorse or promote products 14 | * derived from this software without specific prior written permission. 15 | * 16 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY 17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | */ 27 | 28 | #include "convolve_2d.h" 29 | #include 30 | #include 31 | 32 | #ifdef SSE3 33 | #define KERNEL_LENGTH 16 34 | 35 | static inline 36 | int _convolve_along_rows_with_transpose(float* in, float* out, int cols, 37 | int rows, float* kernel) 38 | { 39 | float kernel_block[4] __attribute__ ((aligned (16))); 40 | float in_aligned[4][cols] __attribute__ ((aligned (16))); 41 | 42 | __m128 kernel_reverse[KERNEL_LENGTH] __attribute__ ((aligned (16))); 43 | __m128 data_block __attribute__ ((aligned (16))); 44 | 45 | __m128 prod __attribute__ ((aligned (16))); 46 | __m128 acc __attribute__ ((aligned (16))); 47 | 48 | // Repeat the kernel across the vector 49 | for(int i=0; i 2 | * 3 | * All rights reserved. 4 | * 5 | * Redistribution and use in source and binary forms, with or without 6 | * modification, are permitted provided that the following conditions are met: 7 | * * Redistributions of source code must retain the above copyright 8 | * notice, this list of conditions and the following disclaimer. 9 | * * Redistributions in binary form must reproduce the above copyright 10 | * notice, this list of conditions and the following disclaimer in the 11 | * documentation and/or other materials provided with the distribution. 12 | * * Neither the name of the organization nor the 13 | * names of its contributors may be used to endorse or promote products 14 | * derived from this software without specific prior written permission. 15 | * 16 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY 17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | */ 27 | 28 | #ifndef _CONVOLVE_2D_H 29 | #define _CONVOLVE_2D_H 30 | 31 | #ifdef SSE3 32 | #include 33 | #include 34 | #endif 35 | 36 | /* A macro that outputs a wrapper for each of the convolution routines. 37 | * The macro passed a name conv_func will output a function called 38 | * conv_func_multiple and it will have signature: 39 | * conv_func_multiple(float* in, float* out, int length, 40 | * float* kernel, int kernel_length, int N) 41 | * 42 | * The additional N defines how many times to run the convolution function 43 | * conv_func(float* in, float* out, int length, 44 | * float* kernel, int kernel_length) 45 | * */ 46 | 47 | #ifndef MULTIPLE_CONVOLVE_2D 48 | #define MULTIPLE_CONVOLVE_2D(FUNCTION_NAME) \ 49 | int FUNCTION_NAME ## _multiple(float* in, float* out, float* workspace, \ 50 | int cols, int rows, float* kernel, int kernel_length, int N) \ 51 | { \ 52 | for(int i=0; i func_str_length: 44 | func_str_length = len(each_function) 45 | 46 | func_str_length += 1 47 | 48 | number_length = max(len('%1.3g' % (1/3.0*1e-6)), 49 | max(len(str(length)) for length in lengths)) + 1 50 | 51 | sub_table_width = min( 52 | len(lengths), 53 | (t_width - func_str_length)//number_length) 54 | sub_table_entries = [sub_table_width] 55 | 56 | if sub_table_width == 0: 57 | raise ConsoleError('Console is too narrow to display the results') 58 | 59 | while sub_table_entries[-1] < len(lengths): 60 | sub_table_width = min( 61 | (t_width - func_str_length)//number_length, 62 | len(lengths) - sub_table_entries[-1]) 63 | 64 | sub_table_entries.append(sub_table_entries[-1] + sub_table_width) 65 | 66 | def print_sub_table(start_idx, end_idx): 67 | 68 | sys.stdout.write(' '.ljust(func_str_length)) 69 | 70 | for each_length in lengths[start_idx:end_idx]: 71 | sys.stdout.write(colour(str(each_length).rjust(number_length), 72 | 'cyan')) 73 | 74 | sys.stdout.write('\n') 75 | 76 | for n, (each_function, each_timeset) in enumerate(zip(functions, times)): 77 | sys.stdout.write(bold(each_function.ljust(func_str_length))) 78 | for idx in range(start_idx,end_idx): 79 | each_time = each_timeset[idx] 80 | time_str = '%1.3g' % each_time 81 | if highlighter is not None and n == highlight_positions[idx]: 82 | print_str = highlighter(time_str.rjust(number_length)) 83 | else: 84 | print_str = time_str.rjust(number_length) 85 | 86 | sys.stdout.write(print_str) 87 | 88 | sys.stdout.write('\n') 89 | 90 | print_sub_table(0, sub_table_entries[0]) 91 | for n in range(1, len(sub_table_entries)): 92 | sys.stdout.write('\n') 93 | print_sub_table(sub_table_entries[n-1], sub_table_entries[n]) 94 | 95 | sys.stdout.write('\n') 96 | 97 | -------------------------------------------------------------------------------- /py_test_convolve.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | # Copyright (C) 2012 Henry Gomersall 4 | # 5 | # All rights reserved. 6 | # 7 | # Redistribution and use in source and binary forms, with or without 8 | # modification, are permitted provided that the following conditions are met: 9 | # * Redistributions of source code must retain the above copyright 10 | # notice, this list of conditions and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright 12 | # notice, this list of conditions and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the organization nor the 15 | # names of its contributors may be used to endorse or promote products 16 | # derived from this software without specific prior written permission. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY 19 | # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 22 | # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | 29 | import numpy 30 | import ctypes 31 | from pretty_print_times import pretty_print_times, colour 32 | 33 | def check_convolution(input_array, test_output, kernel): 34 | 35 | correct_output = numpy.convolve(input_array, kernel, mode='valid') 36 | 37 | return numpy.allclose(correct_output, test_output, rtol=1e-4, atol=1e-5) 38 | 39 | def get_function_wrapper(function_name, input_array, output_array, kernel, 40 | n_loops): 41 | 42 | if output_array.ndim != 1 or input_array.ndim != 1 or kernel.ndim != 1: 43 | raise ValueError('All the arrays should be dimension 1.') 44 | 45 | if len(kernel) > len(input_array): 46 | raise ValueError('The kernel should be shorter than the input ' 47 | 'array') 48 | 49 | if (input_array.dtype != 'float32' or output_array.dtype != 'float32' 50 | or kernel.dtype != 'float32'): 51 | raise ValueError('All the arrays should be of type \'float32\'') 52 | 53 | if len(output_array) != len(input_array) - len(kernel) + 1: 54 | raise ValueError('Output array should be of length ' 55 | 'len(input_array) - len(kernel) + 1') 56 | 57 | if len(input_array)%4 != 0: 58 | raise ValueError('The input array length should be divisible by 4.') 59 | 60 | if len(kernel)%4 != 0: 61 | raise ValueError('The kernel length should be divisible by 4.') 62 | 63 | lib = numpy.ctypeslib.load_library('libconvolve_funcs', '.') 64 | 65 | c_function = getattr(lib, function_name) 66 | c_function.restype = ctypes.c_int 67 | c_function.argtypes = [ 68 | ctypes.POINTER(ctypes.c_float), 69 | ctypes.POINTER(ctypes.c_float), 70 | ctypes.c_int, 71 | ctypes.POINTER(ctypes.c_float), 72 | ctypes.c_int, 73 | ctypes.c_int] 74 | 75 | input_pointer = input_array.ctypes.data_as( 76 | ctypes.POINTER(ctypes.c_float)) 77 | output_pointer = output_array.ctypes.data_as( 78 | ctypes.POINTER(ctypes.c_float)) 79 | 80 | length = len(input_array) 81 | kernel_pointer = kernel.ctypes.data_as( 82 | ctypes.POINTER(ctypes.c_float)) 83 | kernel_length = len(kernel) 84 | 85 | def function_wrapper(): 86 | c_function(input_pointer, output_pointer, length, kernel_pointer, 87 | kernel_length, n_loops) 88 | 89 | return function_wrapper 90 | 91 | timeit_vars = [] 92 | #lengths = [256, 512, 1024, 2048, 4096, 8192, 16384, 32768] 93 | lengths = [256, 512, 1024, 2048, 4096, 8192] 94 | functions = [ 95 | 'convolve_naive_multiple', 96 | 'convolve_sse_simple_multiple', 97 | 'convolve_sse_partial_unroll_multiple', 98 | 'convolve_sse_in_aligned_multiple', 99 | 'convolve_sse_in_aligned_fixed_kernel_multiple', 100 | 'convolve_sse_unrolled_avx_vector_multiple', 101 | 'convolve_sse_unrolled_vector_multiple', 102 | 'convolve_avx_unrolled_vector_multiple', 103 | 'convolve_avx_unrolled_vector_unaligned_multiple', 104 | 'convolve_avx_unrolled_vector_unaligned_fma_multiple', 105 | 'convolve_avx_unrolled_vector_m128_load_multiple', 106 | 'convolve_avx_unrolled_vector_aligned_multiple', 107 | 'convolve_avx_unrolled_vector_local_output_multiple', 108 | 'convolve_avx_unrolled_vector_partial_aligned_multiple' 109 | ] 110 | 111 | def time_convolutions(): 112 | import timeit 113 | 114 | def make_setup_script(func): 115 | 116 | del timeit_vars[:] 117 | timeit_vars.append(input_array) 118 | timeit_vars.append(output_array) 119 | timeit_vars.append(kernel) 120 | timeit_vars.append(loops) 121 | 122 | script = 'import ' + __name__ + ' as module;' 123 | script += 'timeit_vars = module.timeit_vars;' 124 | script += 'function = module.get_function_wrapper(\'' + func 125 | script += '\', timeit_vars[0], timeit_vars[1], ' 126 | script += 'timeit_vars[2], timeit_vars[3]);' 127 | 128 | return script 129 | 130 | 131 | kernel = numpy.float32(numpy.random.randn(16)) 132 | times = numpy.zeros((len(functions), len(lengths))) 133 | flops = numpy.zeros((len(functions), len(lengths))) 134 | loops = 1000 135 | 136 | for k, each_length in enumerate(lengths): 137 | input_array = numpy.float32(numpy.random.randn(each_length)) 138 | output_array = numpy.empty( 139 | len(input_array) - len(kernel) + 1, dtype='float32') 140 | 141 | for l, each_function in enumerate(functions): 142 | 143 | print(each_function, each_length) 144 | 145 | time = min(timeit.repeat('function()', 146 | setup=make_setup_script(each_function), 147 | repeat=20, number=1)) 148 | 149 | print('valid:', check_convolution(input_array, output_array, kernel)) 150 | 151 | # empty the output array 152 | output_array[:] = 0 153 | 154 | times[l, k] = time/loops 155 | flops[l, k] = (len(kernel) * len(output_array) * loops)/time 156 | 157 | return times, flops 158 | 159 | 160 | if __name__ == '__main__': 161 | 162 | times, flops = time_convolutions() 163 | 164 | # Chop off each "convolve_" and "_multiple" from each function name 165 | function_type = [each[9:-9] for each in functions] 166 | 167 | print(colour('\nTime in seconds\n', 'red')) 168 | pretty_print_times(times, lengths, function_type, highlight='min') 169 | 170 | print(colour('\nFlops\n', 'red')) 171 | pretty_print_times(flops, lengths, function_type, highlight='max') 172 | 173 | -------------------------------------------------------------------------------- /test_convolve.c: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2012 Henry Gomersall 2 | * 3 | * All rights reserved. 4 | * 5 | * Redistribution and use in source and binary forms, with or without 6 | * modification, are permitted provided that the following conditions are met: 7 | * * Redistributions of source code must retain the above copyright 8 | * notice, this list of conditions and the following disclaimer. 9 | * * Redistributions in binary form must reproduce the above copyright 10 | * notice, this list of conditions and the following disclaimer in the 11 | * documentation and/or other materials provided with the distribution. 12 | * * Neither the name of the organization nor the 13 | * names of its contributors may be used to endorse or promote products 14 | * derived from this software without specific prior written permission. 15 | * 16 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY 17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | */ 27 | #include 28 | #include 29 | #include 30 | #include 31 | 32 | #include "convolve.h" 33 | #include "convolve_2d.h" 34 | 35 | #include "test_data.h" 36 | 37 | #define INPUT_LENGTH 1024 38 | #define KERNEL_LENGTH 16 39 | #define N_LOOPS 100 40 | #define N_TESTS 10 41 | 42 | #define ROWS 128 43 | 44 | #define INPUT_ARRAY input_data_1024 45 | #define KERNEL kernel_16 46 | #define TEST_OUTPUT_CORRECT output_in1024_kernel16 47 | 48 | long time_delta(struct timeval* now, struct timeval* then) 49 | { 50 | long delta = 0l; 51 | 52 | delta += (now->tv_sec - then->tv_sec) * 1000000; 53 | delta += (now->tv_usec - then->tv_usec); 54 | 55 | return delta; 56 | } 57 | 58 | int main() 59 | { 60 | float* test_output = malloc( 61 | sizeof(float)*(INPUT_LENGTH-KERNEL_LENGTH+1)*ROWS); 62 | 63 | float* workspace = malloc( 64 | sizeof(float)*(INPUT_LENGTH-KERNEL_LENGTH+1)*ROWS); 65 | 66 | float* input_array; 67 | if (ROWS > 1) { 68 | input_array = malloc(sizeof(float)*(INPUT_LENGTH*ROWS)); 69 | for (int col=0; col 2 | * 3 | * All rights reserved. 4 | * 5 | * Redistribution and use in source and binary forms, with or without 6 | * modification, are permitted provided that the following conditions are met: 7 | * * Redistributions of source code must retain the above copyright 8 | * notice, this list of conditions and the following disclaimer. 9 | * * Redistributions in binary form must reproduce the above copyright 10 | * notice, this list of conditions and the following disclaimer in the 11 | * documentation and/or other materials provided with the distribution. 12 | * * Neither the name of the organization nor the 13 | * names of its contributors may be used to endorse or promote products 14 | * derived from this software without specific prior written permission. 15 | * 16 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY 17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | */ 27 | 28 | #include 29 | 30 | uint32_t _kernel_16[] = { 31 | 0x3e4a3d61LU, 0xbf9a7f92LU, 0x3f5b1550LU, 0xbe6b6987LU, 32 | 0x3f66db20LU, 0xbf334d04LU, 0x3f3716c6LU, 0xbefc6c4bLU, 33 | 0x3f90de70LU, 0x3efdea13LU, 0x3f5af73eLU, 0x3eb89ea4LU, 34 | 0x3f072c71LU, 0xbf4d1d2cLU, 0x3f01f817LU, 0x3e02129cLU 35 | }; 36 | 37 | float* kernel_16 = (float*)(_kernel_16); 38 | 39 | uint32_t _input_data_1024[] = { 40 | 0x3f344bf1LU, 0xbdf69b3fLU, 0x3f01afdeLU, 0xbf69b037LU, 41 | 0x3f706a51LU, 0x3e5c083dLU, 0x3db3eedaLU, 0x3f751a27LU, 42 | 0xbf1fa7c1LU, 0xc0093993LU, 0xbf7206cbLU, 0xbce35818LU, 43 | 0x3ed5d308LU, 0x3fa0d608LU, 0x3edba12aLU, 0x3f094445LU, 44 | 0x3f50efd9LU, 0xbdf03374LU, 0x3e95561aLU, 0x3f095a39LU, 45 | 0xbf6805c4LU, 0x3e0bafbdLU, 0x3e82e189LU, 0x3f587026LU, 46 | 0xbe006264LU, 0xbe440080LU, 0xbf508893LU, 0x3e865212LU, 47 | 0xbffe9779LU, 0x3e37f2b6LU, 0xc00740e9LU, 0xc011bc69LU, 48 | 0xbfa7e57bLU, 0x3f82153fLU, 0xbe6536b2LU, 0xbefb9ccdLU, 49 | 0x3fff3d3fLU, 0x3ee719cfLU, 0xbf4d083aLU, 0xc00844afLU, 50 | 0xbf68ca78LU, 0x3f771200LU, 0x3e973f87LU, 0xbe9931f0LU, 51 | 0x3eb49e5cLU, 0xbef89976LU, 0xbe7f65daLU, 0xbf086508LU, 52 | 0xbe896b71LU, 0xbfd64ba8LU, 0xbf5352d6LU, 0x3f9b68c7LU, 53 | 0x3f8af300LU, 0x3f30467cLU, 0x3dea509eLU, 0xbed95ca5LU, 54 | 0xbf7f090fLU, 0xbea66267LU, 0xbfb707deLU, 0xbf020587LU, 55 | 0x3fc4c9c6LU, 0xbe153958LU, 0x3f5b6f46LU, 0xbe89c4cbLU, 56 | 0xbfb926a7LU, 0xbef04b29LU, 0x3f84c5e0LU, 0x3f4ebeaeLU, 57 | 0x3f5ba645LU, 0xbe985d9aLU, 0xbf9f3cd3LU, 0xbeef232eLU, 58 | 0xc006235eLU, 0xc013d11fLU, 0x3f87b15fLU, 0xbe4b3163LU, 59 | 0xbfab735bLU, 0xbfb58291LU, 0x3faa3e9eLU, 0xbf8a39f3LU, 60 | 0x3dc831b2LU, 0x3f5418adLU, 0xbdb72466LU, 0x3f89c30cLU, 61 | 0x3fc6ea82LU, 0x3f6d6014LU, 0xbf8a4b4bLU, 0x3f660e49LU, 62 | 0xbf12ba99LU, 0x3fee8deeLU, 0xbd937380LU, 0xbf142efeLU, 63 | 0xc00a3994LU, 0xbf0b7383LU, 0x3f65d6f0LU, 0x3f0c5d51LU, 64 | 0xbf4e9660LU, 0xbe24ddcfLU, 0x3e089294LU, 0xbcdb4325LU, 65 | 0xbeffa153LU, 0x3fbbf02eLU, 0xbf6b630bLU, 0xbe4507b9LU, 66 | 0x3fc594abLU, 0x3df27f38LU, 0xc03eb510LU, 0x3f8056d4LU, 67 | 0x3e27ba6dLU, 0x3b6c459cLU, 0xbfb7f1c9LU, 0x3f828395LU, 68 | 0xbf82e034LU, 0x3ee5d3adLU, 0xbef23f1bLU, 0x3f18d91aLU, 69 | 0xbf703d14LU, 0xbf323761LU, 0xbf4b811eLU, 0xbdba6a67LU, 70 | 0x3f0d9118LU, 0xbec3ed31LU, 0x3f290d63LU, 0xbdb9b160LU, 71 | 0xbf197432LU, 0x3fafa36fLU, 0x3fc5ec3dLU, 0x3e17cd80LU, 72 | 0x3ecc50c0LU, 0x3ed4be4aLU, 0xbfb38eafLU, 0xbf6ae320LU, 73 | 0x3fd618b7LU, 0x3f85b75bLU, 0x40216be7LU, 0xbf011a56LU, 74 | 0x3e978c25LU, 0x3e64f90cLU, 0x3eda0997LU, 0x3f6f411cLU, 75 | 0x3e91375aLU, 0xbec33b91LU, 0xbe876327LU, 0xbe84aff5LU, 76 | 0x3faba025LU, 0xbfed3856LU, 0x3f547bd4LU, 0x3f91dd41LU, 77 | 0xbcfdfd4dLU, 0x3f67c0e4LU, 0x3f6adae0LU, 0x3fe50385LU, 78 | 0x3f76c270LU, 0xbf5bc53fLU, 0xbe0bfa77LU, 0x3e5c9679LU, 79 | 0xbf491313LU, 0xbead8d6bLU, 0x3e44beb5LU, 0xbf9e70d4LU, 80 | 0x3f1aec0fLU, 0xbf1816d1LU, 0xbe19497aLU, 0xbf99ff1fLU, 81 | 0xbf6ea50cLU, 0x3e81cb55LU, 0x3f865923LU, 0x3f0644c6LU, 82 | 0xbf3ec3b5LU, 0xbf520739LU, 0x3fbc639aLU, 0x3f48cdabLU, 83 | 0xbf85414eLU, 0x3f2c4916LU, 0x3eea08a3LU, 0xbe97cfb8LU, 84 | 0x401bf0c2LU, 0x3f6b129fLU, 0x3f9aa8b1LU, 0xbec317a2LU, 85 | 0xbf38f08bLU, 0x3c94209eLU, 0x3ea9bca0LU, 0x3f148917LU, 86 | 0xbf5b0286LU, 0x3d4d3bd7LU, 0x3fdf7958LU, 0xbf934b39LU, 87 | 0x3f41b4a2LU, 0x3cc1ee58LU, 0xbe9b01ddLU, 0xbe7c209aLU, 88 | 0x3fdc5e00LU, 0xc03b73daLU, 0xbf0d7299LU, 0x3fbdfb11LU, 89 | 0xbe885491LU, 0x3f28e45aLU, 0xbeb1a815LU, 0x3edb2d80LU, 90 | 0xbf4ee28fLU, 0xbf502742LU, 0xbed47248LU, 0xbe3fc1c9LU, 91 | 0x3d144c7aLU, 0xbe0e2f4fLU, 0x3fcbe204LU, 0x3f0016aaLU, 92 | 0x3f0bbe9aLU, 0xbf61f713LU, 0xbf15dacaLU, 0xbf09d5f1LU, 93 | 0xbfa77c00LU, 0xbf64f7f2LU, 0x3f391c38LU, 0xbf24855dLU, 94 | 0xbf7c11beLU, 0xbfc7e200LU, 0xbf331b0aLU, 0xbdd92d33LU, 95 | 0x3e58324eLU, 0xbfe15510LU, 0x3d70c985LU, 0xbda15e9dLU, 96 | 0xbd785d21LU, 0xbf8f3954LU, 0xbf8dab28LU, 0x3e02b0dcLU, 97 | 0x3f6bb95dLU, 0x3fa9c7b1LU, 0x3fee1329LU, 0x40270c06LU, 98 | 0x3db68bc7LU, 0x3f0d2d6aLU, 0xbfc77e64LU, 0xbf31b5c4LU, 99 | 0x3f77abb6LU, 0xbd301032LU, 0x3e0546a2LU, 0xbefeac08LU, 100 | 0x3f390373LU, 0xbf1d4c09LU, 0xbe7a1883LU, 0x3f9dbd33LU, 101 | 0x3f3b992fLU, 0xbfc08242LU, 0x3ecbbb0fLU, 0xbe97ef8cLU, 102 | 0xbf599d62LU, 0xbf82a904LU, 0x3fe8ce8cLU, 0xbe8eb817LU, 103 | 0xbf7c72feLU, 0x3ffd0dd3LU, 0x3f96cf30LU, 0xbf53da6cLU, 104 | 0x3f51f85dLU, 0xbe1d60b8LU, 0xbe882aaeLU, 0x3fb21224LU, 105 | 0x3fae4f40LU, 0x3f8186edLU, 0xbf064e9bLU, 0x3f9386f4LU, 106 | 0xbf8ad57eLU, 0x3edf87d3LU, 0x3ebf2c9dLU, 0xbed5f5a3LU, 107 | 0xbe2a32c3LU, 0xbe766358LU, 0xbdaf061fLU, 0x3f625b03LU, 108 | 0xbcd49bc0LU, 0xbed89499LU, 0xbeb54f3cLU, 0xbefef19cLU, 109 | 0xbe242ce5LU, 0xbee6a97aLU, 0xbfad0a42LU, 0x3ecd1aaeLU, 110 | 0x3f82bc4aLU, 0xbc811659LU, 0x3eed9e2aLU, 0x3f369629LU, 111 | 0x3f4d4c77LU, 0x3edd3ea8LU, 0xbf8ac982LU, 0x3f0faf4eLU, 112 | 0x3e4e5985LU, 0x3d8668caLU, 0x3f8a1305LU, 0xbf8b29adLU, 113 | 0x4025bba4LU, 0xbfb159a3LU, 0xbf3ff309LU, 0xbf329a32LU, 114 | 0xbe4a5870LU, 0x3f912d16LU, 0x3d8b3c76LU, 0xbfaf16a2LU, 115 | 0x3efd28eeLU, 0x3fe1fcbdLU, 0xbe63e867LU, 0xbe59bc6aLU, 116 | 0xbf84214eLU, 0xbed6c062LU, 0xbfad9840LU, 0xbe901f96LU, 117 | 0x3fd08a4bLU, 0x3d2b45f6LU, 0xbfcdaf3dLU, 0xbcf1caa1LU, 118 | 0x3f84f299LU, 0x3f408947LU, 0xbdfa98caLU, 0x3fcc5922LU, 119 | 0xbfe05a30LU, 0xc0230f5aLU, 0xbea0d091LU, 0xbeb08600LU, 120 | 0xbe07e641LU, 0x3edc1d2fLU, 0xbf35f66eLU, 0x3ecdb541LU, 121 | 0x3e0103beLU, 0xbfaec3b8LU, 0x3da10c12LU, 0x3fedd0faLU, 122 | 0x3ff3b98aLU, 0x3f151137LU, 0x3f6d2d11LU, 0x3f675f32LU, 123 | 0x3f4b9978LU, 0xbf444fc0LU, 0x3f53e8edLU, 0xbfb04ae4LU, 124 | 0x3eb51b74LU, 0xbf56e924LU, 0xbf5ae5d4LU, 0x3e966585LU, 125 | 0x3f34e639LU, 0x3f1265d8LU, 0x3f5950dfLU, 0x3ea50ff5LU, 126 | 0xbd97cbb3LU, 0x4006e5f9LU, 0x3fc06719LU, 0x3f3f1146LU, 127 | 0x3ccd1e7fLU, 0xbf82af82LU, 0xbe7c289bLU, 0xbf9d375fLU, 128 | 0xbc4a5958LU, 0x3b411e6cLU, 0xbf26a6b6LU, 0x3faa55aeLU, 129 | 0xbed188aeLU, 0x3d58acf6LU, 0x3e5fb61aLU, 0xbf5a3905LU, 130 | 0xbd3a74c7LU, 0x3fe76ee7LU, 0x3f85fa6aLU, 0xbe898d1aLU, 131 | 0xbf4b7679LU, 0xbcf587ffLU, 0x3e458794LU, 0xbff40755LU, 132 | 0xbeaa0b27LU, 0x3fd2520fLU, 0x3f7b8287LU, 0x3f3a9077LU, 133 | 0x3eb4976fLU, 0x3e9bb25bLU, 0xbc057ca7LU, 0xc0557434LU, 134 | 0xbf5a77eaLU, 0xbfafd52fLU, 0xbf5ee7b4LU, 0xc022f69dLU, 135 | 0x3e9e06b0LU, 0xbf8ee60cLU, 0x3fad6e50LU, 0x3f12ed87LU, 136 | 0x3fb6af48LU, 0xbdc67d28LU, 0x3d87b85fLU, 0x3f554703LU, 137 | 0x3f6879eaLU, 0x3fbfb12eLU, 0x3fbfa3b7LU, 0x3eaa3934LU, 138 | 0xbfb3b6d3LU, 0xbf231a38LU, 0x3f9a62c8LU, 0x3e53106aLU, 139 | 0xbfdbfedbLU, 0x3e04e064LU, 0x3f6653a5LU, 0xbf0126cdLU, 140 | 0x3e992eb4LU, 0x3ee23bdcLU, 0x3f1a2a3fLU, 0xbe033b12LU, 141 | 0xbf28edb7LU, 0xbf747ca2LU, 0x3fed0442LU, 0x3ec5ddd7LU, 142 | 0x3ea07855LU, 0xbf746cb4LU, 0xbf663c0eLU, 0x3cb22a57LU, 143 | 0xbeb848edLU, 0xbfa02186LU, 0x3f419444LU, 0xbe795279LU, 144 | 0x3e94bd80LU, 0x3f1d90bfLU, 0xbef2b27aLU, 0x3e5cfe54LU, 145 | 0xbf434dc9LU, 0xbfb18411LU, 0x3cc7c7c4LU, 0x3f8721c6LU, 146 | 0xbf7cf2c1LU, 0xbf13d3dbLU, 0xbe236727LU, 0xbe6f59cdLU, 147 | 0xbf121f7aLU, 0xbef96eddLU, 0x3e9f4c62LU, 0xbf2394c4LU, 148 | 0xbe3db792LU, 0x3f12709aLU, 0xbfadc7ebLU, 0x3ec4ee22LU, 149 | 0x3ed02b1aLU, 0xbd63f329LU, 0x3f891cb6LU, 0x3f9dffcaLU, 150 | 0xbfa6113fLU, 0xbfb2e936LU, 0xbeab495bLU, 0x3ecef006LU, 151 | 0xbf032204LU, 0xbf137dd6LU, 0x3d9a8378LU, 0xbec19972LU, 152 | 0xbffaed5aLU, 0x3e0c6b36LU, 0xbef53c7eLU, 0xbf1245d1LU, 153 | 0xbf452498LU, 0x3f813b89LU, 0xbfdd2772LU, 0xbd7bc2b6LU, 154 | 0x3e6c44e0LU, 0x3ec138ecLU, 0xbd4dbc2aLU, 0xbeff12f2LU, 155 | 0xbdf67470LU, 0xbf8625dfLU, 0xbfad0f58LU, 0xbfdec515LU, 156 | 0x3e1ec296LU, 0xbfe04a8fLU, 0x3f3cc3beLU, 0x3f0abd73LU, 157 | 0x3e3d5013LU, 0x3f56523fLU, 0xbfc0070cLU, 0xbf479b3fLU, 158 | 0xbf3dce70LU, 0xbf183687LU, 0x3feedcbcLU, 0xbf9e9b6eLU, 159 | 0xbca3401aLU, 0x3fb20bf1LU, 0xbe0ee5c9LU, 0x3e4e7e70LU, 160 | 0xc0372498LU, 0x3fadd9b6LU, 0x3f8261abLU, 0xbe2d33a5LU, 161 | 0x3e421aeeLU, 0xbf89c06fLU, 0xbf384e83LU, 0x3d1bf1bcLU, 162 | 0x3f2322feLU, 0xc00348f1LU, 0xc045ef05LU, 0xbf847beaLU, 163 | 0xbe4d40e9LU, 0xbefb8839LU, 0x3ff5dcc8LU, 0xbd269d65LU, 164 | 0x3e07a0e3LU, 0xbd2a68a6LU, 0x3ee81097LU, 0xbe5e4131LU, 165 | 0xbeb91e81LU, 0xbf7760e8LU, 0x3f31bd70LU, 0x3f4cd647LU, 166 | 0x3f7f04c0LU, 0xc02f94fdLU, 0xc005b0bdLU, 0xbf801cecLU, 167 | 0x3e2f9b5aLU, 0x3e29335fLU, 0x3d9279c7LU, 0x3f2d9e65LU, 168 | 0xbfe4dd85LU, 0x3f8add0aLU, 0x3f63d0abLU, 0x3fa8b106LU, 169 | 0xbf5b798bLU, 0xbf554fc1LU, 0xbf800abdLU, 0x3f5daf78LU, 170 | 0xbf47afb4LU, 0xbfb2347cLU, 0x3fafa0e8LU, 0xbf048cfdLU, 171 | 0x3d08cacbLU, 0xbea11a2bLU, 0xbe497b92LU, 0xbce88b7fLU, 172 | 0xbffeb8f1LU, 0x3ec83f42LU, 0xbeebc83eLU, 0xbfdf80f2LU, 173 | 0xbefb0c43LU, 0x3f3ac63dLU, 0x3eb24a33LU, 0xbeb0497bLU, 174 | 0xbf2bd3baLU, 0xbf81bc86LU, 0x403a2f10LU, 0x3f1adb29LU, 175 | 0xbf6f1857LU, 0xbeae0560LU, 0xbef6c2bbLU, 0x3d2f9dafLU, 176 | 0x3e36d0b4LU, 0xbe3dbd95LU, 0xbf06b7baLU, 0x3faac924LU, 177 | 0xbfb8e458LU, 0x3e8c0b38LU, 0x3ebd87c6LU, 0xbf6f30fdLU, 178 | 0xbf40dda5LU, 0xbd2f224bLU, 0xbd270ba5LU, 0x4006daa0LU, 179 | 0xbeb61c84LU, 0x3fa8fb19LU, 0xbecac0aeLU, 0x3fae390aLU, 180 | 0x400d032cLU, 0x3ef9043dLU, 0x3e1c58f6LU, 0x3f91a6a8LU, 181 | 0xbf005b17LU, 0xc0044a49LU, 0xbfb9130bLU, 0x3e7dfc33LU, 182 | 0xbfbccd91LU, 0x4029491eLU, 0x40011c46LU, 0x3f5ec24fLU, 183 | 0x3f3dcd8cLU, 0xbf080e91LU, 0x3f5db056LU, 0xbf8eeb7fLU, 184 | 0x40155108LU, 0xbd126399LU, 0xbf3aeb3fLU, 0xbf590615LU, 185 | 0xbe6be6ddLU, 0x3f714037LU, 0xbeefc0c0LU, 0x3f3c338dLU, 186 | 0xbf5a9e34LU, 0x3f9826c9LU, 0x3e82dbd7LU, 0x3f3d114eLU, 187 | 0x3ee86698LU, 0xbf9fdcd6LU, 0x3e7a10dfLU, 0xbfc01acfLU, 188 | 0x3e06b07cLU, 0x3fb921b6LU, 0x3fc22b01LU, 0xbfa98381LU, 189 | 0xbf58735cLU, 0x3ffe2edaLU, 0xbf9a35adLU, 0xbf8d868bLU, 190 | 0xbfcf958aLU, 0xbe7d9116LU, 0xbe24ff26LU, 0x3f4ed573LU, 191 | 0x3e9da9c6LU, 0xc0340610LU, 0xbf0ed4c2LU, 0xbc484406LU, 192 | 0x3f5345f8LU, 0x3df4a583LU, 0x3f12dec1LU, 0xbd7c7b8fLU, 193 | 0xbf0a2b30LU, 0xbf1c3988LU, 0x3f03064bLU, 0x3eed6bd7LU, 194 | 0xbed6238bLU, 0xbf791298LU, 0xbfa3e254LU, 0xbea02e04LU, 195 | 0x3dc8e21dLU, 0x3d9a57e9LU, 0x3d67c794LU, 0x3f5b87e7LU, 196 | 0x3f715751LU, 0x3f5a9c91LU, 0x3f0f479eLU, 0x3f45dc10LU, 197 | 0x3d85592dLU, 0x3f0fab32LU, 0xbf71b44cLU, 0xbf1c6742LU, 198 | 0x3f5599ffLU, 0x3faba511LU, 0xbf168e29LU, 0xbeb9417bLU, 199 | 0xbe9b5bd4LU, 0x3f3534e7LU, 0x3f17f8e9LU, 0x3e881701LU, 200 | 0xbeacbc06LU, 0xbf090f4fLU, 0x3ff7920eLU, 0x3f1fc816LU, 201 | 0xbf59c2d5LU, 0xbfec8f6dLU, 0xbf46a8f2LU, 0x3f58ca54LU, 202 | 0xbdce6b9cLU, 0xbf138a37LU, 0xbfa37ad3LU, 0xbf70286cLU, 203 | 0xbc694c46LU, 0xbed18030LU, 0xbdce5a07LU, 0xbd3d832dLU, 204 | 0x3efd8021LU, 0x3f815b11LU, 0x3df73879LU, 0xbf0f8bb4LU, 205 | 0xbe92e541LU, 0xbdc97b6dLU, 0xbd38ca4cLU, 0xbf2ba30eLU, 206 | 0xbf1ee798LU, 0xbf28e078LU, 0xbe5fca9dLU, 0xbe6fc572LU, 207 | 0x3f5e348cLU, 0x3f3d4fefLU, 0xbf7ef5a8LU, 0xbf67c1e0LU, 208 | 0xbf56e166LU, 0x3f7ec28dLU, 0x3f291f65LU, 0xbe2cb7b6LU, 209 | 0x400be734LU, 0xbf810528LU, 0xbe778b63LU, 0x3feadcb5LU, 210 | 0x3f62b586LU, 0xbf15abf9LU, 0x400f898eLU, 0x3f259c83LU, 211 | 0x400a2603LU, 0x3ec7051eLU, 0xc01315f8LU, 0xbd96bdb2LU, 212 | 0x3f2120ecLU, 0xbf485ae6LU, 0x3e7a4354LU, 0x3f3beffcLU, 213 | 0x3fac8a88LU, 0xbf93c917LU, 0xbd70efb6LU, 0x3e04c3e4LU, 214 | 0x3f345212LU, 0x3f163e55LU, 0xbf4033a8LU, 0xbf382f62LU, 215 | 0x3fa58881LU, 0x3fb7fd5bLU, 0xbfe6a913LU, 0x3f2e513cLU, 216 | 0xbeba1bf9LU, 0xbf548f64LU, 0x400b1162LU, 0xbf1e622cLU, 217 | 0x3ef6f826LU, 0xbffce398LU, 0x3ef322bbLU, 0x3f7aed4bLU, 218 | 0xbf810332LU, 0x40108779LU, 0xbdadf921LU, 0xbe39d247LU, 219 | 0xbfedefedLU, 0xbcef620bLU, 0xbf5d8047LU, 0xbec63998LU, 220 | 0x3fab1ae9LU, 0x3f6303c6LU, 0xbe8aadaaLU, 0x3fc6eaacLU, 221 | 0x3fa1e9b5LU, 0xbeae5f50LU, 0xbf7d285bLU, 0xbf475100LU, 222 | 0x3ee90792LU, 0x3f61d021LU, 0x3e9cdb62LU, 0x3f1d5921LU, 223 | 0xbf48cc25LU, 0xbec910faLU, 0x3ec3cb4dLU, 0x3ea2b73dLU, 224 | 0xbec3f0beLU, 0x3f92519dLU, 0x3f413b99LU, 0x3fa10b68LU, 225 | 0xbfd675f6LU, 0x3f0e5296LU, 0x3fc495f3LU, 0xbfab182bLU, 226 | 0xbf4eeffeLU, 0xbf9ed11bLU, 0xbf1a808eLU, 0xbf8b4e52LU, 227 | 0xbfc770eaLU, 0xbe07cf3cLU, 0x3e5c6e0cLU, 0xbe5d6c50LU, 228 | 0x3ce7f18cLU, 0x3f26f93fLU, 0xbf3743a9LU, 0xbf3c7012LU, 229 | 0x3d58e619LU, 0xbf59741bLU, 0x3f65a426LU, 0xbf5ca6ddLU, 230 | 0x3f1ecbccLU, 0x3e2125e9LU, 0xbf8b3a00LU, 0xbf0a17fbLU, 231 | 0xbe6ea9b6LU, 0x3cf5a4c2LU, 0xbfdf5d95LU, 0xbf6b485cLU, 232 | 0x3e6ba105LU, 0xbd012ec6LU, 0xbf97a58dLU, 0xbab16bb9LU, 233 | 0x3fcf2dffLU, 0xbfd75657LU, 0xc001ec93LU, 0x3f4e2616LU, 234 | 0xbf8f3a27LU, 0x3f9501c3LU, 0x3f99d648LU, 0x3f94ee74LU, 235 | 0x3f67ec05LU, 0x3efffa17LU, 0xbe36e581LU, 0xbf668e73LU, 236 | 0x3f9ff4c5LU, 0x3f8f5e72LU, 0x3f81de2eLU, 0xbf1fafc4LU, 237 | 0xbfbe604dLU, 0x3fe1ca75LU, 0xbf0a0ab2LU, 0xbf3d48beLU, 238 | 0x3f2d775fLU, 0xbf71d221LU, 0x3faec55aLU, 0x3f650d9cLU, 239 | 0xbe80699fLU, 0x3f635836LU, 0x3daa57f8LU, 0xbee3bd62LU, 240 | 0x3f5160d8LU, 0x3e8fcdfaLU, 0xbf8cb581LU, 0xbfee6a86LU, 241 | 0x3fefb695LU, 0xbf1c1a09LU, 0x402d421bLU, 0xbf281d00LU, 242 | 0x3f231613LU, 0xbf9d945aLU, 0xbe46262bLU, 0x3e25e70fLU, 243 | 0xbd0f6135LU, 0x3f2d3938LU, 0xbe05d17fLU, 0x3eb685f9LU, 244 | 0xbfb3d32dLU, 0x3fe52580LU, 0xbf7a66a6LU, 0xbe59960aLU, 245 | 0xbefcc246LU, 0xbf189c1eLU, 0x3ec8f587LU, 0xbfeb0adbLU, 246 | 0xc0044026LU, 0x3d61aee5LU, 0xbc83c7a7LU, 0xbf9d8af7LU, 247 | 0xbf8b0dc4LU, 0x3e51a61dLU, 0x3f3a5f7fLU, 0x3f3ed2bdLU, 248 | 0xbef4d3d5LU, 0x3fac9eb9LU, 0xbf598511LU, 0x3fb6d3d3LU, 249 | 0x3fb5421bLU, 0x3c9b8686LU, 0xbea3053bLU, 0xbeb4677eLU, 250 | 0xbeaa3865LU, 0xbe624e4dLU, 0xbe506a4fLU, 0x3ea44a46LU, 251 | 0xbc95d29bLU, 0x3f900d1bLU, 0xbe7a32b2LU, 0xbf64e5dcLU, 252 | 0xbf90a822LU, 0xbea6aeb0LU, 0x3fef9f0fLU, 0x3e891812LU, 253 | 0xc01343abLU, 0xc0183384LU, 0x3f6c3154LU, 0x3f0195feLU, 254 | 0x3e6badeaLU, 0xbf5ab3b8LU, 0x3f682dfbLU, 0xbdddaabfLU, 255 | 0x3f174282LU, 0xbee860a8LU, 0x3e17b502LU, 0xbf9e3fe4LU, 256 | 0xbf77b9a7LU, 0xbfc2d6b3LU, 0xbf2ef575LU, 0x3e62a10cLU, 257 | 0x3fb2842bLU, 0x3f8c3c9cLU, 0x3d699f0dLU, 0xbe7feab3LU, 258 | 0x3f9282a7LU, 0x3fa88d89LU, 0x3f05b5ebLU, 0xbf136167LU, 259 | 0xbea72e2bLU, 0x3ff720c1LU, 0xbf993e93LU, 0x3ff6e8f2LU, 260 | 0xbf289d62LU, 0x3f08f0abLU, 0x3e4d0a5bLU, 0x3fb1850aLU, 261 | 0x3e0d3cb8LU, 0xbf86b328LU, 0xbf7fb3b7LU, 0x3f882586LU, 262 | 0x3ea71bdbLU, 0xbf2ad056LU, 0x3f5b293cLU, 0xbe4e486dLU, 263 | 0x3ff706e9LU, 0xbff2479aLU, 0xbf66bdacLU, 0xbe88d401LU, 264 | 0x400a1ce7LU, 0x3f301d97LU, 0xbfb77fd2LU, 0x3c7fd681LU, 265 | 0x3fee0e74LU, 0xbf33bbf4LU, 0x3e8f74f4LU, 0xbed02b65LU, 266 | 0x3ec87ecaLU, 0xbfb957a9LU, 0xbf2338feLU, 0xbe14f541LU, 267 | 0x3e9b8060LU, 0x3e80e2f1LU, 0x3de0de6cLU, 0x3d0ec2c9LU, 268 | 0xbd42a9a6LU, 0x40144f4aLU, 0xbeabff13LU, 0xbf3e2606LU, 269 | 0x402f9b8bLU, 0xbd005278LU, 0xbe27e840LU, 0x3f529c95LU, 270 | 0x3ea74966LU, 0xbd2d64d0LU, 0xbe06c4d2LU, 0xbe61947bLU, 271 | 0x3fbad03dLU, 0x3ee36182LU, 0xbffa2307LU, 0xbf1ac8e5LU, 272 | 0x3dcba9fcLU, 0xbf000caeLU, 0x3f8a4766LU, 0x3da2e5f3LU, 273 | 0xbf8ccb19LU, 0x3fa369fdLU, 0x3fe225c1LU, 0xbf89bfedLU, 274 | 0x3d9e1a5eLU, 0x3e2fdb91LU, 0x3ed6137eLU, 0xbecf5f95LU, 275 | 0x3fcee148LU, 0xbefc01f3LU, 0xbe086b80LU, 0xbf128124LU, 276 | 0x3f7a7900LU, 0xbf99e72fLU, 0xbeff0d95LU, 0x40085d9cLU, 277 | 0x3ff17b3eLU, 0x3f390089LU, 0xbfafae40LU, 0xbe4a5842LU, 278 | 0x400ee1c9LU, 0xbfc851f0LU, 0xbe1f0378LU, 0x3d64cb51LU, 279 | 0x3f376127LU, 0xbfdec75bLU, 0x3f002566LU, 0x3f89201aLU, 280 | 0x40241418LU, 0x3ccf85b8LU, 0x3ffe8941LU, 0xbcbab77eLU, 281 | 0x3eaf90deLU, 0xbf522499LU, 0x3e89735cLU, 0xbeacf0b6LU, 282 | 0x3edb743fLU, 0x3f6a7080LU, 0xbf64e1b6LU, 0xbf687836LU, 283 | 0x3e10f40eLU, 0xbf0f5417LU, 0x3ed01753LU, 0xbe98eb55LU, 284 | 0x3f5c3a01LU, 0xc01a9941LU, 0xbd8a383dLU, 0xbee1b109LU, 285 | 0xbf315144LU, 0x3f5237d7LU, 0x3cac0053LU, 0x3f8d0472LU, 286 | 0x3f37fd6cLU, 0xbe21e0ecLU, 0xbf738b1eLU, 0x3f3fd42bLU, 287 | 0xbe50c031LU, 0x3f814665LU, 0xbe53ee7fLU, 0x3f188bfeLU, 288 | 0x3f1602e0LU, 0xbebcc74bLU, 0xbed0cbfdLU, 0xc00ebf48LU, 289 | 0x3f304f2cLU, 0x3ed9daa3LU, 0x40112cc5LU, 0xbfd9c87eLU, 290 | 0xbf5e99edLU, 0xbe274742LU, 0xbf3910ffLU, 0xbf75c608LU, 291 | 0xbfa005a4LU, 0x3fa8f481LU, 0x3fd3191aLU, 0xbf1e361aLU, 292 | 0x3e1123e8LU, 0x3f76d898LU, 0xbe6dcb77LU, 0x3ebccd0fLU, 293 | 0xbf08c781LU, 0x3f1233d8LU, 0x3d8db717LU, 0x3efa7b54LU, 294 | 0x3f1b63c2LU, 0xbfb9849bLU, 0xbe4dd9cbLU, 0x3d3d9aa8LU, 295 | 0xbe759959LU, 0xbeeac7ceLU, 0x3fc9090cLU, 0xbfb0fe1aLU 296 | }; 297 | 298 | float* input_data_1024 = (float*)(_input_data_1024); 299 | 300 | uint32_t _output_in1024_kernel16[] = { 301 | 0x3f44c4d1LU, 0x3fe146ddLU, 0xc0123775LU, 0xbfbf1a47LU, 302 | 0xbfc6e33eLU, 0xc0299495LU, 0x4008c46fLU, 0x4008619cLU, 303 | 0x3fcc64caLU, 0xbe91a74fLU, 0x4036c94cLU, 0xbed5d4a2LU, 304 | 0x4066a994LU, 0xc00810e8LU, 0x4047ca2aLU, 0xc03fdfe3LU, 305 | 0x408d29feLU, 0xc0039662LU, 0x4083812bLU, 0xc0d471caLU, 306 | 0x3fe1454aLU, 0xc08380bcLU, 0xbfea329aLU, 0xc07052ccLU, 307 | 0xbff98b9eLU, 0xc03e3d9bLU, 0xc004a179LU, 0xc096349dLU, 308 | 0xbfabb7bbLU, 0x4026e2aeLU, 0x3f320527LU, 0xbe140d46LU, 309 | 0xbf892c11LU, 0xbec9ab78LU, 0xc091c901LU, 0x3fd96287LU, 310 | 0xbf280f31LU, 0x3eb1f55aLU, 0xbfff3510LU, 0xbfab50adLU, 311 | 0xbe9e514aLU, 0x3eb8d662LU, 0xbfabd297LU, 0xc02897a1LU, 312 | 0x3e650b37LU, 0xbef245cfLU, 0xbf5bbbf8LU, 0x4030179eLU, 313 | 0x3e587a40LU, 0xbeacc425LU, 0xbf51a3edLU, 0xbf40196bLU, 314 | 0xc093b902LU, 0xbe08702cLU, 0xbf1802acLU, 0x3ffff711LU, 315 | 0x401e444eLU, 0xbe9b69b7LU, 0xbfe1695eLU, 0x3fc0ac9eLU, 316 | 0xc04ce27fLU, 0x3f885bcaLU, 0x4027f88bLU, 0x3fe6d0c0LU, 317 | 0xc0c5d000LU, 0x3de6fbeeLU, 0xc0dfcd4fLU, 0xbf91f507LU, 318 | 0xc03e5950LU, 0xbfda729dLU, 0xc05f8444LU, 0x3f10236bLU, 319 | 0xbf93fb21LU, 0xc010ce15LU, 0x406284d7LU, 0xc0377779LU, 320 | 0x40238708LU, 0x3faa96faLU, 0x40feeb63LU, 0xc03caa2cLU, 321 | 0x4046d291LU, 0xc04dc0afLU, 0x40753acbLU, 0xbec02309LU, 322 | 0x40482449LU, 0xc06c33a0LU, 0x3f432067LU, 0xc0c03dc5LU, 323 | 0x4043824bLU, 0xbfb1f8baLU, 0x3f92ad03LU, 0xc00fe820LU, 324 | 0x407bcbbaLU, 0xc0938d9cLU, 0x40452bc3LU, 0xc035bb61LU, 325 | 0x408a04acLU, 0xc086a598LU, 0x40c5d73dLU, 0xc0ecdceeLU, 326 | 0x409937d7LU, 0xc0a6dbf6LU, 0x4029cfcdLU, 0xc0887416LU, 327 | 0x40bddb4aLU, 0xc0c70514LU, 0x3ed0bc10LU, 0xbfbd57f0LU, 328 | 0x3fab59d0LU, 0xc0074441LU, 0x3f5672d5LU, 0xc057b620LU, 329 | 0xc0104684LU, 0xbed4d76fLU, 0x3f3e1a71LU, 0x3ea07649LU, 330 | 0x40144348LU, 0x3ece9fc5LU, 0xc00d9833LU, 0x40161c43LU, 331 | 0xbf980a08LU, 0x40bd3ccfLU, 0x3f89ce75LU, 0x3fe5061aLU, 332 | 0xc088f4faLU, 0x4025b5d2LU, 0xbeddb343LU, 0x4097ce40LU, 333 | 0x4060d204LU, 0x4073fd86LU, 0xc0322dd4LU, 0x40a8a59fLU, 334 | 0xc04701b2LU, 0x408b1c76LU, 0xbf875935LU, 0x400a0160LU, 335 | 0xbfedb944LU, 0xbd2446a8LU, 0xbed6405cLU, 0x402232c1LU, 336 | 0x3fb37618LU, 0x3f4bba1bLU, 0x3f0a43d3LU, 0x408e816dLU, 337 | 0x3f831552LU, 0x406ac305LU, 0x3f88d5b9LU, 0x4000a2faLU, 338 | 0xbfad8c21LU, 0x3fb87d0eLU, 0xc0264d2aLU, 0x3fbef33bLU, 339 | 0xc08cf034LU, 0xbecf6417LU, 0x3e61b81aLU, 0x3f53b060LU, 340 | 0xc09285fbLU, 0xbf3efc7bLU, 0xbfa64226LU, 0xbd5b3766LU, 341 | 0xbdaa3d1dLU, 0x3fe2a453LU, 0xc00ab20dLU, 0x3f20fd06LU, 342 | 0xbf4eb514LU, 0x405dc8b2LU, 0x3f775b67LU, 0x404dbac0LU, 343 | 0xc0417de8LU, 0x40095b8eLU, 0x40a19cedLU, 0x401cc61aLU, 344 | 0x3dab6712LU, 0x4088ac01LU, 0xc04bf440LU, 0x400c8545LU, 345 | 0xbfba8a69LU, 0x40564c71LU, 0xc0862f82LU, 0x40dff565LU, 346 | 0xc0435b2fLU, 0x3f677f63LU, 0xbf6dd909LU, 0x3ff279f6LU, 347 | 0xc0141e3aLU, 0x401bcf1eLU, 0xbeb8bb63LU, 0xc00e3ff9LU, 348 | 0x3f6d939fLU, 0xbfd67389LU, 0xbf9d80adLU, 0x40468a21LU, 349 | 0xbfa3012fLU, 0xbfc9d2c9LU, 0xbf2fa402LU, 0x3f62b618LU, 350 | 0xbfd4b152LU, 0xbdf40fe8LU, 0xbf16396bLU, 0x400efe06LU, 351 | 0xbfbc5f25LU, 0x4029c83eLU, 0x3e4e0366LU, 0x4009d946LU, 352 | 0xc079c7c9LU, 0xbfb819bfLU, 0xc09b1a9aLU, 0x400de7e3LU, 353 | 0xc06b68adLU, 0xbf3bcfe2LU, 0xc0805c69LU, 0x3ea0437fLU, 354 | 0xc0982568LU, 0xbef4e6d4LU, 0xc0813ac4LU, 0xbf87661fLU, 355 | 0xc025b39aLU, 0xc0193c0bLU, 0x3ed2b352LU, 0xbf0183cbLU, 356 | 0x3fb37d41LU, 0xbff4882cLU, 0x3f886b1fLU, 0x3ff58604LU, 357 | 0x40c0bc2bLU, 0x407ec653LU, 0x3fc845d1LU, 0x40226c98LU, 358 | 0xbfc9f0dbLU, 0xbfce37a7LU, 0xbefd208eLU, 0x40419ba6LU, 359 | 0xbf054a55LU, 0x3fe86174LU, 0xc01cf635LU, 0x4027f9e2LU, 360 | 0xc08567edLU, 0x408808a2LU, 0xbfa92fb7LU, 0x3ece395cLU, 361 | 0xc002682cLU, 0x3f3601ceLU, 0xc046227bLU, 0x40330209LU, 362 | 0xbf914100LU, 0xbf2e9f30LU, 0x3e050f0aLU, 0x4043f5b4LU, 363 | 0x3f8bdef3LU, 0x3f164d80LU, 0x40aebca7LU, 0xc0806439LU, 364 | 0x4029cf9dLU, 0x3ff6665dLU, 0x4076845dLU, 0x3f4868f6LU, 365 | 0x406c6014LU, 0xc00be081LU, 0x3f812cfeLU, 0x3e9a1f44LU, 366 | 0x40099e8eLU, 0xbfe31888LU, 0x3f8e47beLU, 0xbfa5081bLU, 367 | 0x3f90651cLU, 0xbede6381LU, 0xbf7b8a37LU, 0xbe3c38f7LU, 368 | 0xbea451f0LU, 0xc0057f1aLU, 0xbf88111eLU, 0xbf88f2faLU, 369 | 0x3f0d078eLU, 0xbf7c239aLU, 0x3f0b9788LU, 0x3e207f4eLU, 370 | 0x40070c46LU, 0x402a31d1LU, 0xc036b0efLU, 0x40b15780LU, 371 | 0xbff5af1eLU, 0x40845b8bLU, 0xc082125eLU, 0x40219ce8LU, 372 | 0xbf49c3c6LU, 0x409014d8LU, 0xbf9a7cedLU, 0xbf7d71f6LU, 373 | 0xbfc53c49LU, 0x3fb782f0LU, 0xbfd17923LU, 0x3f8d59bcLU, 374 | 0x3fd7b15bLU, 0xbffbe360LU, 0xbe378dccLU, 0xbf7add68LU, 375 | 0x40671fb4LU, 0x3eef4205LU, 0xc032eabfLU, 0xc08bc73eLU, 376 | 0x3efe2d22LU, 0xc0288dc6LU, 0x408a5a8eLU, 0xbe2ea610LU, 377 | 0x3ef176f0LU, 0xc0137fdaLU, 0xbf2eb442LU, 0xbe586ef5LU, 378 | 0x4091a081LU, 0xbfa38fbbLU, 0xc0271d85LU, 0xbfefe654LU, 379 | 0xbfcc225aLU, 0xc0c1b38fLU, 0xbeda55eaLU, 0x3ffb059eLU, 380 | 0xbfa9328bLU, 0x3ef6f16cLU, 0xbfac59baLU, 0x3fa26ce1LU, 381 | 0xbeed8c7fLU, 0x40a55334LU, 0xbf020c7bLU, 0x40f838d5LU, 382 | 0x3edf2e18LU, 0x404ef92cLU, 0xc0148e9bLU, 0x40634cdfLU, 383 | 0xbfe51f8cLU, 0x3f5063e1LU, 0xbf618660LU, 0xbfd56bedLU, 384 | 0xc01ccf07LU, 0x3fbb4169LU, 0x3fb9117aLU, 0x40386724LU, 385 | 0x40150057LU, 0x3fd291b9LU, 0x3f15184fLU, 0x405df62eLU, 386 | 0x402736bcLU, 0x3fca7c16LU, 0x4021cfe9LU, 0xc0038e14LU, 387 | 0xbf412ceaLU, 0xbfaa22e6LU, 0x3ddce76eLU, 0xc0400b15LU, 388 | 0xbe674161LU, 0x3fd94652LU, 0x3fc5bdfeLU, 0xbf157f3bLU, 389 | 0x3e1cfd36LU, 0xbe141109LU, 0x3f98b869LU, 0xbddb0ef8LU, 390 | 0x3d531764LU, 0x40087db4LU, 0x3f17f6c5LU, 0xbfb2dec6LU, 391 | 0xbfcd5c04LU, 0x4037ad41LU, 0xbfa39ca7LU, 0x3feb5a5dLU, 392 | 0xc004701eLU, 0x40f82c33LU, 0xc07a1187LU, 0x404b1324LU, 393 | 0xc0f98c47LU, 0x3f6a0a4eLU, 0xc10a3436LU, 0x3f8fd8c8LU, 394 | 0xc100f6c8LU, 0x3fe142b4LU, 0xc0d921d6LU, 0x3d47b948LU, 395 | 0xbfdb1064LU, 0x409a9ec8LU, 0x4007f413LU, 0x404ab089LU, 396 | 0xbfd5345cLU, 0x3fdcfb7cLU, 0x4081ddbcLU, 0x4052c2ffLU, 397 | 0x40093bacLU, 0x3f8f68b1LU, 0xbe0cc4cbLU, 0xbf06f2a3LU, 398 | 0xbf74b6c1LU, 0x3f0ad457LU, 0x3f4c28a6LU, 0x3febeb48LU, 399 | 0xc0a5f419LU, 0x3fbc40a1LU, 0x3f4b9e8cLU, 0x406558e4LU, 400 | 0xbfcd87a6LU, 0x4003c82eLU, 0xc03033b7LU, 0x401341a9LU, 401 | 0xc007e723LU, 0x402b3d7aLU, 0xbf6b6280LU, 0x3f886936LU, 402 | 0xc0575c87LU, 0xbe509cecLU, 0xbfbd460fLU, 0x3f61157dLU, 403 | 0xbf52725eLU, 0xc03f8c3cLU, 0x4004fc74LU, 0x3f88e7fdLU, 404 | 0xbf13864eLU, 0xbf90a8a6LU, 0xbf06a174LU, 0xc02745f2LU, 405 | 0xbe64e81bLU, 0xbf613309LU, 0xbf369832LU, 0xbf4f09a7LU, 406 | 0xbd920b12LU, 0xc0649ed2LU, 0x3dde99f3LU, 0xbfad79c9LU, 407 | 0xbf7f6a1cLU, 0xc02b53c6LU, 0x40391416LU, 0xbd96b333LU, 408 | 0xbf81c0d3LU, 0xbfcb5e46LU, 0x3f8975cdLU, 0xbeb7fe11LU, 409 | 0x40521924LU, 0xbf32f7b8LU, 0x3f9d6de8LU, 0xc0343713LU, 410 | 0xbf8997e4LU, 0xc05809d8LU, 0x4014a099LU, 0xc0787aedLU, 411 | 0x4022711dLU, 0xc0b92b6bLU, 0x3f12db32LU, 0xc0990afdLU, 412 | 0x3ecb5195LU, 0xc0544539LU, 0x40047c88LU, 0xc0352439LU, 413 | 0xbe8dba48LU, 0x3e3426c7LU, 0xc00f4b7cLU, 0x3f16a832LU, 414 | 0xc00302b4LU, 0x3ee9da40LU, 0xc07d3b63LU, 0xbf76d0f7LU, 415 | 0xc026f324LU, 0xbfaeffadLU, 0xc05f9ed4LU, 0xbffc50acLU, 416 | 0xc034f0c0LU, 0x40300db0LU, 0xbfae4c92LU, 0x3f9e44d8LU, 417 | 0xc04658a2LU, 0xbf94bef6LU, 0x3fe6d0b3LU, 0xc09abaf5LU, 418 | 0x3fe9ebebLU, 0xc0188e2bLU, 0x405f8c80LU, 0x3e6f137cLU, 419 | 0x3e65a75aLU, 0xbf57c672LU, 0xc006a824LU, 0x3f5230d9LU, 420 | 0x402ab891LU, 0xbef421a2LU, 0x3e7f57daLU, 0xc0467e55LU, 421 | 0xc09fd5a4LU, 0x3feb2859LU, 0xc04499e8LU, 0xbf324401LU, 422 | 0xc0ce4488LU, 0xbffc17e5LU, 0xc0af1ebcLU, 0x40548e46LU, 423 | 0xbf25a739LU, 0x3f34c825LU, 0xc023a044LU, 0x40cf7facLU, 424 | 0xc017fcbcLU, 0x4011164fLU, 0xc09627fcLU, 0x3f4d12bbLU, 425 | 0xbff7521aLU, 0x3fc588f2LU, 0x3faa39e1LU, 0xc07a3382LU, 426 | 0xc06d29caLU, 0xc0ca88d0LU, 0x3fb130eaLU, 0xbe174dd4LU, 427 | 0x407e16dbLU, 0xc0b15398LU, 0x400748f2LU, 0xbebde0d9LU, 428 | 0x3f9484eeLU, 0xbdaa833eLU, 0x3ffd9416LU, 0xbfa77426LU, 429 | 0xc01430a3LU, 0xbf6c3dc4LU, 0x3f17bf9cLU, 0xbfc776edLU, 430 | 0x3e6469deLU, 0xbfc00a8cLU, 0x3f8aef25LU, 0xbff4a8fdLU, 431 | 0xc013b51cLU, 0xbf6c86c2LU, 0xbf34c4dcLU, 0xbea60c9cLU, 432 | 0xc0cfe222LU, 0xbfc11305LU, 0x3f3b56e0LU, 0x3f09433cLU, 433 | 0xbfdfde6fLU, 0x3fc669c4LU, 0xc024c2e9LU, 0x3ea3dfabLU, 434 | 0x400a22b0LU, 0xbf4b02b7LU, 0x40682191LU, 0xbfaf43dfLU, 435 | 0xc0092a67LU, 0xbf9d7b5aLU, 0x405e6db5LU, 0xc0355d7cLU, 436 | 0x3fd71b53LU, 0xc0880dfdLU, 0x4019f23cLU, 0xc031d428LU, 437 | 0x4083e667LU, 0xc0d5b23cLU, 0x401ef685LU, 0xc04c813aLU, 438 | 0x4072f525LU, 0xbe410aeeLU, 0x408eae4fLU, 0x40193928LU, 439 | 0x406c6d88LU, 0xbfaa1541LU, 0x40d91957LU, 0xc051e6b6LU, 440 | 0x40928f13LU, 0xbf764c00LU, 0x3f94be92LU, 0xbfd4a48bLU, 441 | 0xbfa3dd27LU, 0xbfd9166aLU, 0xc05f3eeeLU, 0x40d3969fLU, 442 | 0x3fd70ce7LU, 0x40c35549LU, 0x3f45fc57LU, 0x3e7c5a6eLU, 443 | 0xbf61c431LU, 0x3ff2fde6LU, 0x40441e05LU, 0xbf7e8ff7LU, 444 | 0x3f5c09caLU, 0xbfe1602aLU, 0xbe33e3c2LU, 0x3ea3950dLU, 445 | 0x3fddb93cLU, 0x3fabcac2LU, 0xbf36fcb8LU, 0xbf3f2396LU, 446 | 0xbf24798aLU, 0x40974039LU, 0x3f8e18a9LU, 0xc02d82a2LU, 447 | 0x3d26471cLU, 0xbf5836c0LU, 0x3fe8b674LU, 0x3e27905dLU, 448 | 0x3f960b2cLU, 0xc00536ffLU, 0x3fd7ea3dLU, 0x3f3708acLU, 449 | 0xbffb22edLU, 0xbf88360eLU, 0xc08560caLU, 0xc03cb5e4LU, 450 | 0xbfa0bd5cLU, 0x40174dcfLU, 0xbfe691beLU, 0xbf66fbf8LU, 451 | 0xc08211a6LU, 0xbfa8a8b8LU, 0xbf6ab3a2LU, 0x4093ca74LU, 452 | 0x3e9aee8eLU, 0xbf500dcfLU, 0xc003ef19LU, 0xbf01e4b5LU, 453 | 0x3b58e940LU, 0xbf66aacdLU, 0xbed5a05eLU, 0xbfddc81eLU, 454 | 0xbfe4832bLU, 0xc0123814LU, 0x3f496490LU, 0xbf4e2039LU, 455 | 0x405638c1LU, 0x3f0efca2LU, 0x3fc229b5LU, 0xbe9d3dd3LU, 456 | 0x409825e5LU, 0x3f62e1acLU, 0x4029d27fLU, 0xbfdf01f7LU, 457 | 0x3f006592LU, 0xbfa66ce6LU, 0x40433cf7LU, 0x3eb5d811LU, 458 | 0xbf236df6LU, 0x3ed7f8cdLU, 0x3e1006c8LU, 0x4022fe94LU, 459 | 0x3f5e1ec7LU, 0xbea5d018LU, 0xbf23f366LU, 0x3f8f1e3fLU, 460 | 0x4017348aLU, 0x3f264068LU, 0xbf8f1b82LU, 0xbfc5bc80LU, 461 | 0xc0596940LU, 0xbf621763LU, 0xbf4de2d2LU, 0xbf684452LU, 462 | 0xbffb65c0LU, 0xc002b62dLU, 0xbf9cc9e9LU, 0xbf86b6d1LU, 463 | 0xbee29e48LU, 0x3f380e47LU, 0x3e35bddcLU, 0x3fd58c14LU, 464 | 0xbec8583fLU, 0x3ecf595bLU, 0xc0108733LU, 0xbf98311eLU, 465 | 0x3ee4f11aLU, 0x3ecc1838LU, 0xbf894701LU, 0xc0714487LU, 466 | 0xbfaf522fLU, 0x3ec67b93LU, 0xbf81c210LU, 0x402ef2e3LU, 467 | 0xbf9159c4LU, 0xbfbd03d8LU, 0xc05479e2LU, 0x4046f34fLU, 468 | 0xbfe22cbeLU, 0x409716d6LU, 0xbfc75e42LU, 0x403ed948LU, 469 | 0x401aac7bLU, 0x4094596eLU, 0xc051daa2LU, 0x40bba97dLU, 470 | 0x40189fceLU, 0x3fe2b380LU, 0x3fb3f3afLU, 0x40b41b9fLU, 471 | 0xc0554791LU, 0x3fff77b4LU, 0xc0922303LU, 0x3f9050d1LU, 472 | 0x40239463LU, 0x40208909LU, 0xc02ed21eLU, 0x3ec17395LU, 473 | 0x402bacd1LU, 0xbfb08ffcLU, 0x3faae614LU, 0x3fafd65fLU, 474 | 0xbfeaecacLU, 0x3f5bafb2LU, 0x3d86b798LU, 0x40803423LU, 475 | 0xc01f9b75LU, 0x400aa1aaLU, 0xc04aa325LU, 0xbf6ca196LU, 476 | 0x40575d47LU, 0xbf3176bcLU, 0x40627800LU, 0xc045769eLU, 477 | 0x3f2bee0eLU, 0xbff82102LU, 0x3f9b7ea5LU, 0x3f1fe0b9LU, 478 | 0x40303e42LU, 0xc07e0419LU, 0x3f9d3b6cLU, 0xc06ac082LU, 479 | 0x3fb9dc18LU, 0xbead9b96LU, 0x3fd0edb8LU, 0xbf9b5900LU, 480 | 0x402831dcLU, 0x401c518eLU, 0x4012f650LU, 0x3e7096b0LU, 481 | 0x3f2474a3LU, 0xc0359098LU, 0x3f8f2361LU, 0xbec8dbe2LU, 482 | 0x402a7576LU, 0xbfa01e98LU, 0x407060c1LU, 0xc050f8aaLU, 483 | 0x3f5ee39aLU, 0xbf013113LU, 0x406e3415LU, 0x3fc9b509LU, 484 | 0x3f47d24cLU, 0x3fa3beb4LU, 0x3f8807dfLU, 0xbde4d4eaLU, 485 | 0xbfb26bd8LU, 0xbfb4694fLU, 0x3ea76686LU, 0xc07c533dLU, 486 | 0xc049c721LU, 0xbf9ead4bLU, 0xc03cea66LU, 0xbf815adcLU, 487 | 0xc055b0b4LU, 0x3fc03f75LU, 0xbfb8d414LU, 0x3f61051fLU, 488 | 0xc000cf64LU, 0x3fbadbb9LU, 0xc036fc1bLU, 0xbf9bfbd5LU, 489 | 0x3faf1037LU, 0x3d2118cdLU, 0xbf9b29d6LU, 0xbf9079dbLU, 490 | 0xbf02aacbLU, 0xbf916f42LU, 0xc06b2496LU, 0xbe866021LU, 491 | 0x3e8afc4eLU, 0xc0742873LU, 0xbf60ac95LU, 0xc08db20bLU, 492 | 0x3f0b7e9cLU, 0xbff05d17LU, 0x3f374a23LU, 0xc05a1b36LU, 493 | 0x3fee16fcLU, 0xbfcd9494LU, 0xc064fb57LU, 0x40039c1eLU, 494 | 0x401d2983LU, 0x40417b5aLU, 0x40a1f512LU, 0xbfb5d56cLU, 495 | 0x3f81e8caLU, 0x3f3a4c74LU, 0x3fc0e75bLU, 0x400f8572LU, 496 | 0x3f0334fcLU, 0x3f435714LU, 0xbeea82faLU, 0x3e449c68LU, 497 | 0xbf89c56dLU, 0x4006829cLU, 0xbc533430LU, 0xc0041815LU, 498 | 0x404bd9f6LU, 0x40857a0dLU, 0xc06fe07cLU, 0x40a93a0cLU, 499 | 0xc0c8a27aLU, 0x40c8768aLU, 0xc04b5d33LU, 0x40c0bbbfLU, 500 | 0xc0d90c33LU, 0x408f8fa5LU, 0xc0af321cLU, 0x407359bdLU, 501 | 0x3f4c95adLU, 0x4073154aLU, 0xbeae3aacLU, 0xc00e58aaLU, 502 | 0x3f15a27fLU, 0xbfb8a444LU, 0x4046cb73LU, 0xbfc6bc7dLU, 503 | 0x3fead575LU, 0xbfa3fe50LU, 0x4040c56aLU, 0xc032c823LU, 504 | 0xbf625662LU, 0xbf1f0486LU, 0x3f896b81LU, 0xc08b08e5LU, 505 | 0xbfc220baLU, 0xc08201bbLU, 0xbf93ec1cLU, 0xc0817c6bLU, 506 | 0xbeaa2c76LU, 0xc08b0beeLU, 0x3f5fccf9LU, 0xc059ec82LU, 507 | 0x404d2545LU, 0x3cbdd420LU, 0x4048b2eeLU, 0xbf63af56LU, 508 | 0x3faf4cc1LU, 0x3f4fe3d8LU, 0x406d682dLU, 0xbff20636LU, 509 | 0x40635be8LU, 0xbfae740dLU, 0x3f1c1786LU, 0xbf9b4710LU, 510 | 0xbfeaddc7LU, 0xbec83118LU, 0x405ed03cLU, 0x4033bc97LU, 511 | 0xc050ea4bLU, 0xbff5473aLU, 0xc021a4f0LU, 0x3fd705f1LU, 512 | 0xbfe8b694LU, 0x40039865LU, 0xc099de69LU, 0x3f7e7ec4LU, 513 | 0xc0bcf7f8LU, 0x40488a51LU, 0xbf32a5d2LU, 0x408a7225LU, 514 | 0xc08ad263LU, 0x3f87dbecLU, 0xc0414a2eLU, 0x3ff9e3b3LU, 515 | 0xc007ec1bLU, 0x3f31c1fdLU, 0xc09673a4LU, 0xc0167098LU, 516 | 0xc02dd1a5LU, 0x4022352aLU, 0x3fca179cLU, 0xbe07885cLU, 517 | 0x40800036LU, 0xc01d6a37LU, 0x40af50e8LU, 0xbffc93c3LU, 518 | 0x40ced4e1LU, 0xc0839730LU, 0x40a1d922LU, 0xbfedde90LU, 519 | 0x40b08056LU, 0xc00c7cc2LU, 0x4040e326LU, 0xbfc446efLU, 520 | 0x407b2a4aLU, 0xbe3c1d4cLU, 0xbf6059a7LU, 0x40539c24LU, 521 | 0xbfea39f0LU, 0x4001e45bLU, 0xc0c30df5LU, 0x4094cbe8LU, 522 | 0x3efff2f5LU, 0x4028ff1cLU, 0xc07b624eLU, 0x40531330LU, 523 | 0xc070d19eLU, 0x406a18d6LU, 0xc0687fd3LU, 0x40d29123LU, 524 | 0xc0020827LU, 0x403fd437LU, 0xc089754aLU, 0x400ffb83LU, 525 | 0x3f22c71dLU, 0x3f967440LU, 0xc03edba2LU, 0xc012e40aLU, 526 | 0x3dcd25e8LU, 0x3e971660LU, 0xc03cd77cLU, 0x3ffcb668LU, 527 | 0x3f8ee696LU, 0x3eef7a04LU, 0x3eda775bLU, 0x404346aaLU, 528 | 0x3f0a4402LU, 0x4058d3daLU, 0x3edd4b61LU, 0xbd721f58LU, 529 | 0x409b1141LU, 0x404aa1b5LU, 0xc038289bLU, 0x3fe1c0f8LU, 530 | 0xbf26f648LU, 0x3eed6b6cLU, 0x4020d634LU, 0xbf85d8acLU, 531 | 0xc035165bLU, 0x3fd71dd8LU, 0xc02f8527LU, 0x3e6a6516LU, 532 | 0x3f2ee2f6LU, 0x3fdc97d4LU, 0xc064a6f4LU, 0x40b1aae1LU, 533 | 0xc001e621LU, 0x40868987LU, 0xc01115faLU, 0x40600045LU, 534 | 0xc056bac5LU, 0x4045db73LU, 0xc02372f0LU, 0x400bbb94LU, 535 | 0x3fdcff93LU, 0x3fdd38d3LU, 0xc09c195eLU, 0x403bb363LU, 536 | 0xbd1129d2LU, 0x40895793LU, 0xbff27abdLU, 0x40f85cdaLU, 537 | 0xc02b3a9bLU, 0x3fda9ab1LU, 0xc0b5d2b4LU, 0x40a8d6edLU, 538 | 0xc0399fd4LU, 0x40ae2760LU, 0xc0da3251LU, 0x40e1470cLU, 539 | 0xc07d4eccLU, 0x40bdeb9bLU, 0xbfe03a2fLU, 0x40e37442LU, 540 | 0x3fceae5aLU, 0x407eefb3LU, 0xc00c8c15LU, 0x4030ad19LU, 541 | 0xc039e6fbLU, 0x40092749LU, 0xc00597e1LU, 0x40b58557LU, 542 | 0xc0930855LU, 0x400fecc5LU, 0xc086fb47LU, 0xbe0f73a4LU, 543 | 0xbfa0becbLU, 0x3f6775f5LU, 0xc01aaf42LU, 0xbefdfc32LU, 544 | 0xbe09d670LU, 0xc055a837LU, 0xbee2dea4LU, 0xbecf3966LU, 545 | 0x40245144LU, 0xbf807a7cLU, 0x406e0c60LU, 0xbff05df9LU, 546 | 0x40200a9eLU, 0x3f693746LU, 0xbfc4693cLU, 0x3fc5a158LU, 547 | 0xc0276348LU, 0x40b778c4LU, 0xbf9820d3LU, 0x400be7a6LU, 548 | 0xc088ea3cLU, 0x3f994bc9LU, 0xc0183f36LU, 0x3f14450cLU, 549 | 0xbff29c1bLU, 0x4049caa0LU, 0xbff57895LU, 0xc008d03dLU, 550 | 0xc05449e6LU, 0xbeae2540LU, 0x3eeff95dLU, 0xbfbfe3dbLU, 551 | 0x401a91a3LU, 0xbeecc0c2LU, 0x403fe5a9LU, 0x3ec56079LU, 552 | 0xbcb33939LU, 0x3faa981dLU, 0xbe68af84LU, 0x3f4f707eLU, 553 | 0xbff19137LU 554 | }; 555 | 556 | float* output_in1024_kernel16 = (float*)(_output_in1024_kernel16); 557 | 558 | -------------------------------------------------------------------------------- /test_data.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2012 Henry Gomersall 2 | * 3 | * All rights reserved. 4 | * 5 | * Redistribution and use in source and binary forms, with or without 6 | * modification, are permitted provided that the following conditions are met: 7 | * * Redistributions of source code must retain the above copyright 8 | * notice, this list of conditions and the following disclaimer. 9 | * * Redistributions in binary form must reproduce the above copyright 10 | * notice, this list of conditions and the following disclaimer in the 11 | * documentation and/or other materials provided with the distribution. 12 | * * Neither the name of the organization nor the 13 | * names of its contributors may be used to endorse or promote products 14 | * derived from this software without specific prior written permission. 15 | * 16 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY 17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | */ 27 | 28 | #ifndef _TEST_DATA_H 29 | #define _TEST_DATA_H 30 | 31 | extern float* kernel_16; 32 | extern float* input_data_1024; 33 | extern float* output_in1024_kernel16; 34 | 35 | #endif 36 | --------------------------------------------------------------------------------