コード例 #1
0
ファイル: wrapper_test_102.cpp プロジェクト: rbaghdadi/ISIR
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;
}
コード例 #2
0
ファイル: upsample.cpp プロジェクト: NVIDIA/Forma
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;
}
コード例 #3
0
ファイル: extrapolate.cpp プロジェクト: NVIDIA/Forma
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;
}
コード例 #4
0
ファイル: compose.cpp プロジェクト: NVIDIA/Forma
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;
}
コード例 #5
0
ファイル: stencil_sampling.cpp プロジェクト: NVIDIA/Forma
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;
}
コード例 #6
0
ファイル: simple_stencil.cpp プロジェクト: NVIDIA/Forma
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;
}