예제 #1
0
static BOOL compare_vec4(struct vec4 *vec, float x, float y, float z, float w, unsigned int ulps)
{
    return compare_float(vec->x, x, ulps)
            && compare_float(vec->y, y, ulps)
            && compare_float(vec->z, z, ulps)
            && compare_float(vec->w, w, ulps);
}
예제 #2
0
static boolean
test_format_unpack_z_float(const struct util_format_description *format_desc,
                              const struct util_format_test_case *test)
{
   float unpacked[UTIL_FORMAT_MAX_UNPACKED_HEIGHT][UTIL_FORMAT_MAX_UNPACKED_WIDTH] = { { 0 } };
   unsigned i, j;
   boolean success;

   format_desc->unpack_z_float(&unpacked[0][0], sizeof unpacked[0],
                               test->packed, 0,
                               format_desc->block.width, format_desc->block.height);

   success = TRUE;
   for (i = 0; i < format_desc->block.height; ++i) {
      for (j = 0; j < format_desc->block.width; ++j) {
         if (!compare_float(test->unpacked[i][j][0], unpacked[i][j])) {
            success = FALSE;
         }
      }
   }

   if (!success) {
      print_unpacked_z_float(format_desc, "FAILED: ", unpacked, " obtained\n");
      print_unpacked_rgba_doubl(format_desc, "        ", test->unpacked, " expected\n");
   }

   return success;
}
예제 #3
0
int
scomplex_test()
{
    grpc_error_t ret;
    scomplex scalarIn, scalarOut;
    scomplex a[N], b[N];
    int success = 1;
    int i;
    int handleInitialized = 0;

    scalarIn.r = 1.0;
    scalarIn.i = 2.0;
    scalarOut.r = 0.0;
    scalarOut.i = 0.0;

    for (i = 0; i < N; i++) {
        a[i].r = i;
        a[i].i = i + 0.1; 
        b[i].r = 0;
        b[i].i = 0; 
    }

    ret = grpc_function_handle_default(&handles, MODULE_NAME "/scomplex_test");
    if (ret != GRPC_NO_ERROR) {
        fprintf(stderr, "grpc_function_handle_default() error. (%s)\n",
            grpc_error_string(ret));
        success = 0;
        goto finalize;
    }
    handleInitialized = 1;

    ret = grpc_call(&handles, N, scalarIn, a, &scalarOut, b);
    if (ret != GRPC_NO_ERROR) {
        fprintf(stderr, "grpc_call() error. (%s)\n",
            grpc_error_string(ret));
        success = 0;
        goto finalize;
    }

    if ((scalarOut.r != scalarIn.r) || (scalarOut.i != scalarIn.i)) {
	success = 0;
	if (verbose) {
	    printf("scomplex_test: scalarIn(%f, %f) != scalarOut(%f, %f)\n",
		scalarIn.r, scalarIn.i, scalarOut.r, scalarOut.i);
	}
    }

    for (i = 0; i < N; i++) {
        if (!compare_float(a[i].r, b[i].r) || !compare_float(a[i].i, b[i].i)) {
            success = 0;
            if (verbose) {
                printf("scomplex_test: a[%d](%f, %f) != b[%d](%f, %f)\n", 
                    i, a[i].r, a[i].i, i, b[i].r, b[i].i);
            }
        }
    }

finalize:
    if (handleInitialized != 0) {
        ret = grpc_function_handle_destruct(&handles);
        if (ret != GRPC_NO_ERROR) {
            fprintf(stderr, "grpc_function_handle_destruct() error. (%s)\n",
                grpc_error_string(ret));
            success = 0;
        }
        handleInitialized = 0;
    }

    return success;
}
예제 #4
0
int
float_test()
{
    grpc_error_t ret;
    float scalarIn, scalarOut;
    float a[N], b[N];
    int success = 1;
    int i;
    int handleInitialized = 0;

    ret = grpc_function_handle_default(&handles, MODULE_NAME "/float_test");
    if (ret != GRPC_NO_ERROR) {
        fprintf(stderr, 
            "grpc_function_handle_default() error. (%s)\n",
            grpc_error_string(ret));
        success = 0;
        goto finalize;
    }
    handleInitialized = 1;

    scalarIn = 1.0;
    scalarOut = 0.0;

    for (i = 0; i < N; i++) {
        a[i] = i;
        b[i] = 0;
    }
    ret = grpc_call(&handles, N, scalarIn, a, &scalarOut, b);
    if (ret != GRPC_NO_ERROR) {
        fprintf(stderr, "grpc_call() error. (%s)\n",
            grpc_error_string(ret));
        success = 0;
        goto finalize;
    }

    if (scalarOut != scalarIn) {
	success = 0;
	if (verbose) {
	    printf("float_test: scalarIn(%f) != scalarOut(%f)\n",
		scalarIn, scalarOut);
	}
    }

    for (i = 0; i < N; i++) {
        if (!compare_float(a[i], b[i])) {
            success = 0;
            if (verbose) {
                printf("float_test: a[%d](%f) != b[%d](%f)\n",
                    i, a[i], i, b[i]);
            }
        }
    }

finalize:
    if (handleInitialized != 0) {
        ret = grpc_function_handle_destruct(&handles);
        if (ret != GRPC_NO_ERROR) {
            fprintf(stderr, "grpc_function_handle_destruct() error. (%s)\n",
                grpc_error_string(ret));
            success = 0;
        }
        handleInitialized = 0;
    }

    return success;
}
예제 #5
0
파일: lin_reg.c 프로젝트: 8l/insieme
int main(int argc, const char* argv[]) {
    icl_args* args = icl_init_args();
    icl_parse_args(argc, argv, args);
    icl_print_args(args);

	chdir(PATH);

    int size = args->size;

    float* input1 = (float*) malloc(sizeof(float) * size);
    float* input2 = (float*) malloc(sizeof(float) * size);
    float* alpha  = (float*) malloc(sizeof(float) * size);
    float* beta   = (float*) malloc(sizeof(float) * size);
    float* output = (float*) malloc(sizeof(float) * size);

    fill_random_float(input2, size, 1, -1.0f, 1.0f);
    qsort(input2, size, sizeof(float), float_compare);
    float step = 2.0f / size;
    for(int i=0; i < size; i++) 
	input1[i] = -1.0f + i * step;

    fill_random_float(alpha, size, 1, -1.0f, 1.0f);
    fill_random_float(beta, size, 1, -1.0f, 1.0f);

    icl_init_devices(args->device_type);

	icl_start_energy_measurement();

    if (icl_get_num_devices() != 0) {
		icl_device* dev = icl_get_device(args->device_id);

		icl_print_device_short_info(dev);
		icl_kernel* kernel = icl_create_kernel(dev, "lin_reg.cl", "lin_reg", "", ICL_SOURCE);

		size_t szLocalWorkSize = args->local_size;
		float multiplier = size/(float)szLocalWorkSize;
		if(multiplier > (int)multiplier)
			multiplier += 1;
		size_t szGlobalWorkSize = (int)multiplier * szLocalWorkSize;

		for (int i = 0; i < args->loop_iteration; ++i) {
			icl_buffer* buf_input1 = icl_create_buffer(dev, CL_MEM_READ_ONLY,  sizeof(float) * size);
			icl_buffer* buf_input2 = icl_create_buffer(dev, CL_MEM_READ_ONLY,  sizeof(float) * size);
			icl_buffer* buf_alpha  = icl_create_buffer(dev, CL_MEM_READ_ONLY,  sizeof(float) * size);
			icl_buffer* buf_beta   = icl_create_buffer(dev, CL_MEM_READ_ONLY,  sizeof(float) * size);
			icl_buffer* buf_output = icl_create_buffer(dev, CL_MEM_WRITE_ONLY, sizeof(float) * size);

			icl_write_buffer(buf_input1, CL_TRUE, sizeof(float) * size, &input1[0], NULL, NULL);
			icl_write_buffer(buf_input2, CL_TRUE, sizeof(float) * size, &input2[0], NULL, NULL);
			icl_write_buffer(buf_alpha, CL_TRUE, sizeof(float) * size, &alpha[0], NULL, NULL);
			icl_write_buffer(buf_beta, CL_TRUE, sizeof(float) * size, &beta[0], NULL, NULL);

			icl_run_kernel(kernel, 1, &szGlobalWorkSize, &szLocalWorkSize, NULL, NULL, 6,
												(size_t)0, (void *)buf_input1,
												(size_t)0, (void *)buf_input2,
			                								(size_t)0, (void *)buf_alpha,
											                (size_t)0, (void *)buf_beta,
												(size_t)0, (void *)buf_output,
												sizeof(cl_int), (void *)&size);
			icl_read_buffer(buf_output, CL_TRUE, sizeof(float) * size, &output[0], NULL, NULL);
			icl_release_buffers(5, buf_input1, buf_input2, buf_alpha, buf_beta, buf_output);
		}

		icl_release_kernel(kernel);
	}
	
	icl_stop_energy_measurement();

    if (args->check_result) {
        printf("======================\n= Linear Regression Done\n");
		float* output2 = (float *)malloc(sizeof(float) * size);
		for(unsigned int j = 0; j < size; ++j) {
			const int gid = j;
			float a = alpha[gid];
			float b = beta[gid];
			float error = 0;
			for(int i=0; i<size; i++) {
				float e = (a * input1[i] + b) - input2[i];
				error += e * e;
			}
			output2[gid] = error;
		}
                
	    bool check = compare_float(output, output2, size, 0.000001);
		printf("======================\n");
		printf("Result check: %s\n", check ? "OK" : "FAIL");
		free(output2);
    } else {
		printf("Result check: OK\n");
    }

	icl_release_args(args);
	icl_release_devices();
	free(input1);
	free(input2);
	free(alpha);
	free(beta);
	free(output);
}
예제 #6
0
void Painter::paint() {
  size_t dominant = 0;
  size_t numActive = genome_.countActiveChromosomes();

  if (numActive == 0)
    dominant = genome_.findDominantChromosome();

  result_ = oImg_.clone();

  for (size_t i = 0; i < genome_.size(); ++i) {
    Chromosome& c = genome_[i];

    if (!c.isActive() && !(numActive == 0 && i == dominant))
      continue;

    Mat kernel = c.makeKernel();
    Point anchor(-1, -1);
    double delta = 0;
    int ddepth = -1;


    if(c.getOperation() == PASS) {
      filter2D(result_.clone(), result_, ddepth, kernel, anchor, delta, BORDER_DEFAULT);
    } else {
      Mat after;
      filter2D(oImg_.clone(), after, ddepth, kernel, anchor, delta, BORDER_DEFAULT);

      switch (c.getOperation()) {
      case PASS:
        CHECK(false);
        break;
      case SUBSTRACT:
        result_ = result_ - after;
        break;
      case ADD:
        result_ = result_ + after;
        break;
      default:
        CHECK(false);
        break;
      }
    }
  }

  double pixError = 0;


  Mat rNorm;
  Mat pNorm;
  normalize(result_, rNorm, 0, 255, CV_MINMAX);
  normalize(pImg_, pNorm, 0, 255, CV_MINMAX);

  Scalar rMean;
  Scalar pMean;
  Scalar rSdv;
  Scalar pSdv;

  meanStdDev(rNorm, rMean, rSdv);
  meanStdDev(pNorm, pMean, pSdv);

  double mean = (fabs(rMean.val[0] - pMean.val[0]) / 255.0
      + fabs(rMean.val[1] - pMean.val[1]) / 255.0
      + fabs(rMean.val[2] - pMean.val[2]) / 255.0)
          / 3.0;

  double sdv = (fabs(rSdv.val[0] - pSdv.val[0]) / 255.0
      + fabs(rSdv.val[1] - pSdv.val[1]) / 255.0
      + fabs(rSdv.val[2] - pSdv.val[2]) / 255.0)
          / 3.0;

  ///std::cerr << "mean: " << mean << "sdv: " << sdv << std::endl;

  pixError = 1-0 - ((mean + sdv) / 2.0);
  /*for (int row = 0; row < rNorm.rows; ++row) {
    uchar* pr = rNorm.ptr(row);
    uchar* pp = pNorm.ptr(row);
    for (int col = 0; col < rNorm.cols * 3; ++col) {
      pixError += 1.0 - (abs((*pp++) - (*pr++)) / 255.0);
    }
  }*/

  pixelError_ = pixError ;// / (result_.rows * result_.cols * 3);
 // histError_ = cv::compareHist(makeHistogramGray(result_), pImgHist_, CV_COMP_INTERSECT) / (result_.rows * result_.cols) ;
  resultDFT_ = make_dft(result_);
  fftError_ = compare_float(resultDFT_, pImgDFT_);
  histError_ = compare_float_binarize(resultDFT_, pImgDFT_);
  //(((double)(pImg_.rows * pImg_.cols) - count_diff_pixels(makeFFT(result_), pImgDFT_)) / ((double)pImg_.rows * pImg_.cols));
  fitness_ =  (histError_ * pixelError_ * fftError_);
  fitness_ = (fitness_ / pow(std::exp(-fitness_),2)) / (1 / pow(std::exp(-1),2));
}