Exemplo n.º 1
0
int
lower_middle_init(struct prime_ctx *pctx, uint32_t start_prime, uint32_t end_prime, void **ctx)
{
   struct lower_middle_ctx *sctx = malloc(sizeof (struct lower_middle_ctx));
   *ctx = sctx;

   sctx->start_prime = start_prime;
   sctx->end_prime = MIN(pctx->run_info.max_sieve_prime, end_prime);

   assert(sctx->start_prime >= 64);
   assert(sctx->end_prime <= 128);

   sctx->block_size = pctx->current_block.block_size;

   sctx->primebuf[0] = aligned_alloc(32, 67+32);
   sctx->primebuf[1] = aligned_alloc(32, 67+32);

   int k = 0;

   init_offsets(0, 67, sctx->offsets_v3);

#define LM_INIT_X(PRIME) \
   set_starting_v2(0, PRIME, &sctx->offsets_v2[k++*32]);

   DO_FOR(LM_INIT_X, USED_PRIMES)

   set_starting_byte(0, 67, &sctx->offsets[k++*64]);
   set_starting_byte(0, 71, &sctx->offsets[k++*64]);
   set_starting_byte(0, 73, &sctx->offsets[k++*64]);
   set_starting_byte(0, 79, &sctx->offsets[k++*64]);
   set_starting_byte(0, 83, &sctx->offsets[k++*64]);
   set_starting_byte(0, 89, &sctx->offsets[k++*64]);

   return 0;
}
Exemplo n.º 2
0
	BarDisplay(void)
	 : gl()
	 , side(128)
	 , shadow_size(512)
	 , cube(
		List("Position")("Normal").Get(),
		shapes::Cube(0.95, 1.0, 0.95, 0.0, 0.5, 0.0)
	), display_vao(cube.VAOForProgram(display_prog))
	 , shadow_vao(cube.VAOForProgram(shadow_prog))
	{
		init_shadows();
		init_heights();
		init_offsets();

		auto light_proj = CamMatrixf::PerspectiveX(
			Degrees(74),
			1.0,
			1, 3*side
		);
		display_prog.light_proj_matrix.Set(light_proj);
		shadow_prog.projection_matrix.Set(light_proj);
		gl.PolygonOffset(4.0, 4.0);
	}
Exemplo n.º 3
0
/*
 * memset_init -- initialization function
 */
static int
memset_init(struct benchmark *bench, struct benchmark_args *args)
{
	assert(bench != nullptr);
	assert(args != nullptr);
	assert(args->opts != nullptr);

	int ret = 0;
	size_t size;
	size_t large;
	size_t little;
	size_t file_size = 0;
	int flags = 0;

	enum file_type type = util_file_get_type(args->fname);
	if (type == OTHER_ERROR) {
		fprintf(stderr, "could not check type of file %s\n",
			args->fname);
		return -1;
	}

	int (*warmup_func)(struct memset_bench *) = warmup_persist;
	auto *mb = (struct memset_bench *)malloc(sizeof(struct memset_bench));
	if (!mb) {
		perror("malloc");
		return -1;
	}

	mb->pargs = (struct memset_args *)args->opts;
	mb->pargs->chunk_size = args->dsize;

	enum operation_mode op_mode = parse_op_mode(mb->pargs->mode);
	if (op_mode == OP_MODE_UNKNOWN) {
		fprintf(stderr, "Invalid operation mode argument '%s'\n",
			mb->pargs->mode);
		ret = -1;
		goto err_free_mb;
	}

	size = MAX_OFFSET + mb->pargs->chunk_size;
	large = size * args->n_ops_per_thread * args->n_threads;
	little = size * args->n_threads;

	mb->fsize = (op_mode == OP_MODE_STAT) ? little : large;

	/* initialize offsets[] array depending on benchmark args */
	if (init_offsets(args, mb, op_mode) < 0) {
		ret = -1;
		goto err_free_mb;
	}

	/* initialize memset() value */
	mb->const_b = CONST_B;

	if (type != TYPE_DEVDAX) {
		file_size = mb->fsize;
		flags = PMEM_FILE_CREATE | PMEM_FILE_EXCL;
	}

	/* create a pmem file and memory map it */
	if ((mb->pmem_addr = pmem_map_file(args->fname, file_size, flags,
					   args->fmode, nullptr, nullptr)) ==
	    nullptr) {
		perror(args->fname);
		ret = -1;
		goto err_free_offsets;
	}

	if (mb->pargs->memset) {
		if (mb->pargs->persist && mb->pargs->msync) {
			fprintf(stderr,
				"Invalid benchmark parameters: persist and msync cannot be specified together\n");
			ret = -1;
			goto err_free_offsets;
		}

		if (mb->pargs->persist) {
			mb->func_op = libc_memset_persist;
		} else if (mb->pargs->msync) {
			mb->func_op = libc_memset_msync;
			warmup_func = warmup_msync;
		} else {
			mb->func_op = libc_memset;
		}
	} else {
		mb->func_op = (mb->pargs->persist) ? libpmem_memset_persist
						   : libpmem_memset_nodrain;
	}

	if (!mb->pargs->no_warmup && type != TYPE_DEVDAX) {
		ret = warmup_func(mb);
		if (ret) {
			perror("Pool warmup failed");
			goto err_free_offsets;
		}
	}

	pmembench_set_priv(bench, mb);

	return ret;

err_free_offsets:
	free(mb->offsets);
err_free_mb:
	free(mb);

	return ret;
}