int main() { #ifdef WITH_MPI int rank = tiramisu_MPI_init(); Halide::Buffer<int> input(100, rank == 0 ? 1000 : 100, "input"); Halide::Buffer<int> output(100, rank == 0 ? 1000 : 100, "output"); if (rank == 0) { init_buffer(input, 2); } dist_reduction_collapse(input.raw_buffer(), output.raw_buffer()); MPI_Barrier(MPI_COMM_WORLD); if (rank == 0) { Halide::Buffer<int> ref_output(100, 1000, "ref"); for (int x = 0; x < 100; x++) { for (int y = 0; y < 1000; y++) { ref_output(x, y) = input(x, y); } } for (int i = 0; i < 10; i++) { for (int x = 0; x < 100; x++) { for (int y = 0; y < 1000; y++) { ref_output(x, y) *= 2; } } } compare_buffers(TEST_NAME_STR, output, ref_output); } tiramisu_MPI_cleanup(); #endif return 0; }
int main(int argc, char** argv) { float (*input)[N] = (float (*)[N])new float[M*N]; float (*output)[2*N] = (float (*)[2*N])new float[2*M*2*N]; float (*output_ref)[2*N] = (float (*)[2*N])new float[2*M*2*N]; for( int i = 0 ; i < M ; i++ ) for( int j = 0 ; j < N ; j++ ) input[i][j] = (float)(rand()) / (float)(RAND_MAX-1); for( int i = 0 ; i < 2*M ; i++ ) for( int j = 0 ; j < 2*N ; j++ ){ output[i][j] = 0.0; output_ref[i][j] = 0.0; } upsample((float*)input,M,N,(float*)output); ref_output(input,output_ref); printf("Input :\n"); for( int i = 0 ; i < M ; i++ ){ for( int j = 0 ; j < N ; j++ ) printf(" %f",input[i][j]); printf("\n"); } printf("Output[%d,%d] :\n",2*M,2*N); for( int i = 0 ; i < 2*M ; i++ ){ for( int j = 0 ; j < 2*N ; j++ ) printf(" %f",output[i][j]); printf("\n"); } printf("OutputRef[%d,%d] :\n",2*M,2*N); for( int i = 0 ; i < 2*M ; i++ ){ for( int j = 0 ; j < 2*N ; j++ ) printf(" %f",output_ref[i][j]); printf("\n"); } double diff = 0.0; for( int i = 0 ; i < 2*M ; i++ ) for( int j = 0 ; j < 2*N ; j++ ){ if( output_ref[i][j] != output[i][j] ) printf(" Diff at (%d,%d) : %f %f\n",i,j,output_ref[i][j],output[i][j]); diff += fabs(output_ref[i][j] - output[i][j]); } printf("Diff : %e\n",diff); if( diff > 1e-5 ){ printf("Incorrect result\n"); exit(1); } delete[] input; delete[] output; delete[] output_ref; return 0; }
int main() { double* inp1 = new double[M*N]; double* outp = new double[3*M*2*N]; double* outp_ref = new double[3*M*2*N]; for( int i = 0 ; i < M ; i++ ) for( int j = 0 ; j < N ; j++ ) inp1[i*N+j] = (double)rand() / (double)RAND_MAX; for( int i = 0 ; i < 3*M ; i++ ) for( int j = 0 ; j < 2*N ; j++ ){ outp[i*2*N+j] = 0.0; outp_ref[i*2*N+j] = 0.0; } extrapolate(inp1,M,N,outp); ref_output(inp1,outp_ref); printf("Input[%d,%d] :\n",M,N); for( int i = 0 ; i < M ; i++ ){ for( int j = 0 ; j < N ; j++ ) printf(" %f",inp1[i*(N)+j]); printf("\n"); } printf("Output[%d,%d] :\n",3*M,2*N); for( int i = 0 ; i < 3*M ; i++ ){ for( int j = 0 ; j < 2*N ; j++ ) printf(" %f",outp[i*(2*N)+j]); printf("\n"); } printf("OutputRef[%d,%d] :\n",3*M,2*N); for( int i = 0 ; i < 3*M ; i++ ){ for( int j = 0 ; j < 2*N ; j++ ) printf(" %f",outp_ref[i*(2*N)+j]); printf("\n"); } double diff = 0.0; for( int i = 0 ; i < 3*M ; i++) for( int j = 0 ; j < 2*N ; j++ ) diff += fabs(outp_ref[i*(2*N)+j] - outp[i*(2*N)+j]); printf("Diff : %f\n",diff); if( diff != 0.0) { printf("Incorrect Result\n"); exit(1); } delete[] inp1; delete[] outp; delete[] outp_ref; }
int main(int argc, char** argv) { double (*input)[N] = (double (*)[N])new double[M*N]; double (*output)[N] = (double (*)[N])new double[2*M*N]; double (*output_ref)[N] = (double (*)[N])new double[2*M*N]; for( int i = 0 ; i < M ; i++ ) for( int j = 0 ; j < N ; j++ ) input[i][j] = (double)(rand()) / (double)(RAND_MAX-1); for( int i = 0 ; i < 2*M ; i++ ) for( int j = 0 ; j < N ; j++ ){ output[i][j] = 0.0; output_ref[i][j] = 0.0; } compose((double*)input,M,N,(double*)output); ref_output(input,output_ref); printf("Input :\n"); for( int i = 0 ; i < M ; i++ ){ for( int j = 0 ; j < N ; j++ ) printf(" %f",input[i][j]); printf("\n"); } printf("Output[%d,%d] :\n",2*M,N); for( int i = 0 ; i < 2*M ; i++ ){ for( int j = 0 ; j < N ; j++ ) printf(" %f",output[i][j]); printf("\n"); } printf("OutputRef[%d,%d] :\n",2*M,N); for( int i = 0 ; i < 2*M ; i++ ){ for( int j = 0 ; j < N ; j++ ) printf(" %f",output_ref[i][j]); printf("\n"); } double diff = 0.0; for( int i = 0 ; i < 2*M ; i++ ) for( int j = 0 ; j < N ; j++ ) diff += fabs(output_ref[i][j] - output[i][j]); printf("Diff : %e\n",diff); if( diff > 1e-6 ){ printf("Incorrect result\n"); exit(1); } delete[] input; delete[] output; delete[] output_ref; return 0; }
int main(int argc, char** argv) { double * input = new double[M*N]; double * output = new double[(M/2)*(N/3)]; double * output_ref = new double[(M/2)*(N/3)]; for( int i = 0 ; i < M ; i++ ) for( int j = 0 ; j < N ; j++ ) input[i*N+j] = (double)(rand()) / (double)(RAND_MAX-1); for( int i = 0 ; i < M/2 ; i++ ) for( int j = 0 ; j < N/3 ; j++ ){ output[i*(N/3)+j] = 0.0; output_ref[i*(N/3)+j] = 0.0; } stencil_sampling(input,M,N,output); ref_output(input,output_ref); printf("Output[%d,%d] :\n",M/2,N/3); for( int i = 0 ; i < M/2 ; i++ ){ for( int j = 0 ; j < N/3 ; j++ ) printf(" %f",output[i*(N/3)+j]); printf("\n"); } printf("OutputRef[%d,%d] :\n",M/2,N/3); for( int i = 0 ; i < M/2 ; i++ ){ for( int j = 0 ; j < N/3 ; j++ ) printf(" %f",output_ref[i*(N/3)+j]); printf("\n"); } double diff = 0.0; for( int i = 0 ; i < M/2 ; i++ ) for( int j = 0 ; j < N/3 ; j++ ) diff += fabs(output_ref[i*(N/3)+j] - output[i*(N/3)+j]); printf("Diff : %f\n",diff); if( diff != 0 ) exit(1); delete[] input; delete[] output; delete[] output_ref; return 0; }
int main() { float* inp1 = new float[M*N]; float* inp2 = new float[M*N]; float* outp = new float[M*N]; float* outp_ref = new float[M*N]; for( int i = 0 ; i < M ; i++ ) for( int j = 0 ; j < N ; j++ ){ inp1[i*N+j] = (float)rand() / (float)RAND_MAX; inp2[i*N+j] = (float)rand() / (float)RAND_MAX; outp[i*N+j] = 0.0; outp_ref[i*N+j] = 0.0; } simple_stencil(inp1,inp2,M,N,outp); ref_output(inp1,inp2,outp_ref); printf("Output :\n"); for( int i = 0 ; i < M ; i++ ){ for( int j = 0 ; j < N ; j++ ) printf(" %f", outp[i*N+j]); printf("\n"); } printf("Output-Ref :\n"); for( int i = 0 ; i < M ; i++ ){ for( int j = 0 ; j < N ; j++ ) printf(" %f", outp_ref[i*N+j]); printf("\n"); } double diff = 0.0; for( int i = 0 ; i < M ; i++) for( int j = 0 ; j < N ; j++ ) diff += fabs(outp_ref[i*N+j] - outp[i*N+j]); printf("Diff : %e\n",diff); if (diff > 1e-5) { printf("Incorrect Result\n"); exit(1); } delete[] inp1; delete[] inp2; delete[] outp; delete[] outp_ref; }