Example #1
0
int main_init(int argc, char *argv[])
{
	printf("Version    : %s-%s\n", GIT_TAG, GIT_REV);
	printf("GL Vendor  : %s\n", glGetString(GL_VENDOR) );
	printf("GL Renderer: %s\n", glGetString(GL_RENDERER) );
	printf("GL Version : %s\n", glGetString(GL_VERSION) );
	printf("SL Version : %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION) );

	int glver[2];
	glGetIntegerv(GL_MAJOR_VERSION, &glver[0]);
	glGetIntegerv(GL_MINOR_VERSION, &glver[1]);
	printf("GL3 Version: %d.%d\n", glver[0], glver[1]);
	
#ifndef __APPLE__
	if(!GLEW_VERSION_4_3)
	{
		printf("Fatal: OpenGL 4.3 Required.\n");
		return 1;
	}
	gpuinfo_init();
#endif

	ocl_init();

	GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
	GLfloat mat_shininess[] = { 50.0 };
	GLfloat light_position[] = { -100.0, -100.0, -100.0, 0.0 };
	glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
	glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
	glEnable(GL_LIGHT0);
	glLightfv(GL_LIGHT0, GL_POSITION, light_position);

	time_start = sys_time();
	http_init();
//	voxel_init();

	return gui_init(argc, argv);
}
Example #2
0
int main(int argc, char ** argv) {
	size_t i, e;
	size_t global_offset = 0;
	size_t global_size = ELEMENTS;
	size_t local_size;
	size_t work_group_elements;
	size_t single_elements;

	float * h0_array = (float *)malloc(ELEMENTS*sizeof(float));	
	float * h1_array = (float *)malloc(ELEMENTS*sizeof(float));	
	float * h2_array = (float *)malloc(ELEMENTS*sizeof(float));	
	float * h3_array = (float *)malloc(ELEMENTS*sizeof(float));	

	cl_mem d0_array;
	cl_mem d1_array;
	cl_mem d2_array;
	cl_mem d3_array;
	ocl_event_t event;
	ocl_event_wait_list_t wait_list;
	ocl_kernel_hints_t hints;

	ocl_init();

	ocl_add_program(OCL_DEFAULT_DEVICE, "program", kernel, NULL);

	ocl_add_kernel(OCL_DEFAULT_DEVICE, "program", "test", "test");

	ocl_create_buffer_raw(OCL_DEFAULT_DEVICE, ELEMENTS*sizeof(float),
		CL_MEM_READ_ONLY, NULL, &d0_array);
	ocl_create_buffer_raw(OCL_DEFAULT_DEVICE, ELEMENTS*sizeof(float),
		CL_MEM_READ_ONLY, NULL, &d1_array);
	ocl_create_buffer_raw(OCL_DEFAULT_DEVICE, ELEMENTS*sizeof(float),
		CL_MEM_READ_ONLY, NULL, &d2_array);
	ocl_create_buffer_raw(OCL_DEFAULT_DEVICE, ELEMENTS*sizeof(float),
		CL_MEM_READ_ONLY, NULL, &d3_array);

	ocl_set_kernel_arg("program", "test", 0, sizeof(cl_mem), &d0_array);
	ocl_set_kernel_arg("program", "test", 1, sizeof(cl_mem), &d1_array);
	ocl_set_kernel_arg("program", "test", 2, sizeof(cl_mem), &d2_array);
	ocl_set_kernel_arg("program", "test", 3, sizeof(cl_mem), &d3_array);

	ocl_kernel_hints(OCL_DEFAULT_DEVICE, "program", "test", &hints);
	ocl_ndrange_hints(global_size, hints.max_work_group_size, 0.5, 0.5,
		&local_size, &work_group_elements, &single_elements);

	for(i=0; i<ITERATIONS; ++i) {
		if(i%OUTPUT == 0) {
			printf("iteration: %d allocations: %d\n",
				(int)i, (int)num_allocations());
		} // if

		// initialize data
		for(e=0; e<ELEMENTS; ++e) {
			h0_array[e] = 0.0;
			h1_array[e] = 0.0;
			h2_array[e] = 0.0;
			h3_array[e] = 0.0;
		} // for

		ocl_initialize_event(&event);
		ocl_initialize_event_wait_list(&wait_list, NULL, 0);

		// write
		ocl_enqueue_write_buffer_raw(OCL_DEFAULT_DEVICE, d0_array,
			0, 0, ELEMENTS*sizeof(float), h0_array, &event);
		ocl_add_event_to_wait_list(&wait_list, &event);

		ocl_enqueue_write_buffer_raw(OCL_DEFAULT_DEVICE, d1_array,
			0, 0, ELEMENTS*sizeof(float), h1_array, &event);
		ocl_add_event_to_wait_list(&wait_list, &event);

		ocl_enqueue_write_buffer_raw(OCL_DEFAULT_DEVICE, d2_array,
			0, 0, ELEMENTS*sizeof(float), h2_array, &event);
		ocl_add_event_to_wait_list(&wait_list, &event);

		ocl_enqueue_write_buffer_raw(OCL_DEFAULT_DEVICE, d3_array,
			0, 0, ELEMENTS*sizeof(float), h3_array, &event);
		ocl_add_event_to_wait_list(&wait_list, &event);

		ocl_wait_for_events(&wait_list);
		ocl_clear_event_wait_list(&wait_list);

		// kernel
		ocl_enqueue_kernel_ndrange(OCL_DEFAULT_DEVICE, "program",
			"test", 1, &global_offset, &global_size, &local_size, &event);

		ocl_finish(OCL_DEFAULT_DEVICE);

		// read
		ocl_enqueue_read_buffer_raw(OCL_DEFAULT_DEVICE, d0_array,
			0, 0, ELEMENTS*sizeof(float), h0_array, &event);
		ocl_add_event_to_wait_list(&wait_list, &event);

		ocl_enqueue_read_buffer_raw(OCL_DEFAULT_DEVICE, d1_array,
			0, 0, ELEMENTS*sizeof(float), h1_array, &event);
		ocl_add_event_to_wait_list(&wait_list, &event);

		ocl_enqueue_read_buffer_raw(OCL_DEFAULT_DEVICE, d2_array,
			0, 0, ELEMENTS*sizeof(float), h2_array, &event);
		ocl_add_event_to_wait_list(&wait_list, &event);

		ocl_enqueue_read_buffer_raw(OCL_DEFAULT_DEVICE, d3_array,
			0, 0, ELEMENTS*sizeof(float), h3_array, &event);
		ocl_add_event_to_wait_list(&wait_list, &event);

		ocl_wait_for_events(&wait_list);
		ocl_clear_event_wait_list(&wait_list);

		for(e=0; e<ELEMENTS; ++e) {
			if(h0_array[e] != (float)e ||
				h1_array[e] != (float)(e*2) ||
				h2_array[e] != (float)(e*3) ||
				h3_array[e] != (float)(e*4)) {
				fprintf(stderr, "Bad value!");
				exit(1);
			} // if
		} // for
	} // for

	ocl_finalize();

	free(h0_array);
	free(h1_array);
	free(h2_array);
	free(h3_array);

	return 0;
} // main
Example #3
0
int main(int argc, char ** argv) {

	/*-------------------------------------------------------------------------*
	 * Variables
	 *-------------------------------------------------------------------------*/

	size_t i;
	size_t global_offset = 0;
	size_t global_size = 1;
	size_t local_size = 1;

	float * h_array = (float *)malloc(ELEMENTS*sizeof(float));

	/*-------------------------------------------------------------------------*
	 * OpenCL memory objects
	 *-------------------------------------------------------------------------*/

	cl_mem d_elements;
	cl_mem d_array;
	cl_mem d_acc;
	ocl_event_t event;

	/*-------------------------------------------------------------------------*
	 * Initialize host data
	 *-------------------------------------------------------------------------*/

	for(i=0; i<ELEMENTS; ++i) {
		h_array[i] = 1.0;
	} // for

	/*-------------------------------------------------------------------------*
	 * Initialize the OpenCL layer
	 *-------------------------------------------------------------------------*/

	ocl_init();

	/*-------------------------------------------------------------------------*
	 * Assemble program source
	 *-------------------------------------------------------------------------*/

	char * performance_source = NULL;
	ocl_add_from_file("T_U.cl", &performance_source, 0);
	ocl_add_from_file("T_RS.cl", &performance_source, 0);

	/*-------------------------------------------------------------------------*
	 * Add programs and compile
	 *-------------------------------------------------------------------------*/

	ocl_add_program(OCL_DEFAULT_DEVICE, "program",
		performance_source, NULL);

	/*-------------------------------------------------------------------------*
	 * Add kernels
	 *-------------------------------------------------------------------------*/

	ocl_add_kernel(OCL_DEFAULT_DEVICE, "program", "reduce_serial", "reduce");

	/*-------------------------------------------------------------------------*
	 * Create device data
	 *-------------------------------------------------------------------------*/

	// create device-side array
	ocl_create_buffer_raw(OCL_DEFAULT_DEVICE, ELEMENTS*sizeof(float),
		CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, h_array, &d_array);

	// create device-side element count
	int elements = ELEMENTS;
	ocl_create_buffer_raw(OCL_DEFAULT_DEVICE, sizeof(int),
		CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, &elements, &d_elements);

	// create device-side accumulation
	float acc = 0.0;
	ocl_create_buffer_raw(OCL_DEFAULT_DEVICE, sizeof(float),
		CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, &acc, &d_acc);

	/*-------------------------------------------------------------------------*
	 * Set kernel arguments
	 *-------------------------------------------------------------------------*/

	ocl_set_kernel_arg("program", "reduce", 0, sizeof(cl_mem), &d_elements);
	ocl_set_kernel_arg("program", "reduce", 1, sizeof(cl_mem), &d_array);
	ocl_set_kernel_arg("program", "reduce", 2, sizeof(cl_mem), &d_acc);

	/*-------------------------------------------------------------------------*
	 * Execute main reduction
	 *-------------------------------------------------------------------------*/

	// initialize event for timings
	ocl_initialize_event(&event);

	/*-------------------------------------------------------------------------*
	 * Execute the serial reduction
	 *-------------------------------------------------------------------------*/

	ocl_enqueue_kernel_ndrange(OCL_DEFAULT_DEVICE, "program", "reduce",
		1, &global_offset, &global_size, &local_size, &event);

	// block for execution completion
	ocl_finish(OCL_DEFAULT_DEVICE);

	/*-------------------------------------------------------------------------*
	 * Read accumulation from the device
	 *-------------------------------------------------------------------------*/

	ocl_enqueue_read_buffer_raw(OCL_DEFAULT_DEVICE, d_acc, 1, global_offset,
		sizeof(float), &acc, &event);

	// block for read completion
	ocl_finish(OCL_DEFAULT_DEVICE);

	/*-------------------------------------------------------------------------*
	 * Print the results
	 *-------------------------------------------------------------------------*/

	printf("acc: %f\n\n", acc);

	/*-------------------------------------------------------------------------*
	 * Cleanup
	 *-------------------------------------------------------------------------*/

	free(performance_source);
	free(h_array);

	/*-------------------------------------------------------------------------*
	 * Shutdown the OpenCL layer
	 *-------------------------------------------------------------------------*/

	ocl_finalize();

	return 0;
} // main