Пример #1
0
cl_int Dgemm_internal(
  cl_env *env, double *a, double *b, double *c, double alpha, double beta,
  clblasTranspose transA, clblasTranspose transB, 
  int ar, int ac, int br, int bc, int cr, int cc, int size_a, int size_b, int size_c)
{
  CHECK(clblasSetup());
  cl_event events[NEVENTS];
  int nevent = 0;
  cl_mem mem_a = create_mem(env, a, size_a, CL_MEM_READ_ONLY, &(events[nevent++]));
  cl_mem mem_b = create_mem(env, b, size_b, CL_MEM_READ_ONLY, &(events[nevent++]));
  cl_mem mem_c;
  if (beta != 0) mem_c = create_mem(env, c, size_c, CL_MEM_READ_WRITE, &(events[nevent++]));
  else mem_c = create_mem(env, NULL, size_c, CL_MEM_READ_WRITE, NULL);
  
  cl_int err = clblasDgemm(clblasColumnMajor, transA, transB,
    ar, bc, ac, alpha, mem_a, 0, ar, mem_b, 0, br, beta, mem_c, 0, cr,
    1, &(env->queues[0]), nevent, events, &(events[nevent]));
  CHECK(err);
  events[nevent+1] = *read_mem(env, mem_c, c, size_c, 1, &(events[nevent]));
  CHECK(clWaitForEvents(1, &(events[nevent+1])));
  CHECK(clReleaseMemObject(mem_a));
  CHECK(clReleaseMemObject(mem_b));
  CHECK(clReleaseMemObject(mem_c));
  clblasTeardown();
  return CL_SUCCESS;
}
Пример #2
0
/*
 * A Test Program for monitors
 * Principle: Prog1 works together with Prog2
 * They are testing the wait and notify function as well as the integrity of a shared variable
 * Prog2 is testing the enter-exit behavior with timeouts
 * Prog3 is testing the function x_thread_stop_waiting(x_thread thread)
 */
void monitor_testprogram(void* args){
    int t;	    
    m_thread = malloc(11 * sizeof(x_Thread));
    m_stack =  malloc(11 * stacksize);	    
    monitor = (x_monitor) malloc(sizeof(x_Monitor));
    monitor2 = (x_monitor) malloc(sizeof(x_Monitor));
    monitor3 = (x_monitor) malloc(sizeof(x_Monitor));
    teller=0;
    ERROR = FALSE;
    create_mem();
    x_monitor_create(monitor);
    x_monitor_create(monitor2);
    x_monitor_create(monitor3);
    for(t=0;t<3;t++){
	x_thread_create(mstruct[t],&prog1,(void*)t,mstack[t],stacksize,5,TF_START);
    }
    for(t=3;t<6;t++){
	x_thread_create(mstruct[t],&prog2,(void*)t,mstack[t],stacksize,5,TF_START);
    }
   for(t=6;t<9;t++){
	x_thread_create(mstruct[t],&prog3,(void*)t,mstack[t],stacksize,5,TF_START);
    }
   for(t=9;t<10;t++){
	x_thread_create(mstruct[t],&prog4,(void*)t,mstack[t],stacksize,4,TF_START);
   }

    x_thread_suspend(x_thread_current());
	
}
Пример #3
0
bool_t create_stringlist(stringlist_t *sl) {
  if( sl ) {
    sl->num = 0;
    sl->flags = 0;
    return create_mem(&sl->list, &sl->max, sizeof(char_t *), 16);
  }
  return FALSE;
}
Пример #4
0
bool_t create_jumptable(jumptable_t *jt) {
  if( jt ) {
    jt->num = 0;
    create_mem(&jt->hash, &jt->maxnum, sizeof(jump_t), 16);
    return TRUE;
  }
  return FALSE;
}
Пример #5
0
bool_t create_symbols(symbols_t *sb) {
  if( sb ) {
    create_mem(&sb->bigs, &sb->bigmax, sizeof(byte_t), 64);
    sb->bigs_len = 0;
    sb->last = -1;
    create_jumptable(&sb->jt);
    return TRUE;
  }
  return FALSE;
}
Пример #6
0
bool_t create_cursor(cursor_t *cursor) {
  bool_t ok = TRUE;
  if( cursor ) {
    cursor->top = 0;
    ok &= create_mem(&cursor->stack, &cursor->stacklen, 
		     sizeof(coff_t), CURSOR_MINSTACK);
    if( ok ) { reset_cursor(cursor); }
    return ok;
  }
  return FALSE;
}
Пример #7
0
bool_t create_attlist(attlist_t *alist) {
  bool_t ok = TRUE;
  if( alist ) {
    alist->count = 0;
    ok &= create_mem(&alist->list, &alist->max_count, 
		     sizeof(attribute_t), 16);
    if( ok ) { reset_attlist(alist); }
    return ok;
  }
  return FALSE;
}
Пример #8
0
cl_int Dtrmm_internal(
  cl_env *env, double *a, double *b, double alpha, clblasSide side, clblasTranspose transA, 
  clblasUplo uplo, clblasDiag diag, int ar, int ac, int br, int bc, int size_a, int size_b)
{
  CHECK(clblasSetup());
  cl_event events[NEVENTS];
  int nevent = 0;
  cl_mem mem_a = create_mem(env, a, size_a, CL_MEM_READ_ONLY, &(events[nevent++]));
  cl_mem mem_b = create_mem(env, b, size_b, CL_MEM_READ_WRITE, &(events[nevent++]));

  cl_int err = clblasDtrmm(clblasColumnMajor, side, uplo, transA, diag,
    br, bc, alpha, mem_a, 0, ar, mem_b, 0, br,
    1, &(env->queues[0]), nevent, events, &(events[nevent]));
  CHECK(err);
  events[nevent+1] = *read_mem(env, mem_b, b, size_b, 1, &(events[nevent]));
  CHECK(clWaitForEvents(1, &(events[nevent+1])));
  CHECK(clReleaseMemObject(mem_a));
  CHECK(clReleaseMemObject(mem_b));
  clblasTeardown();
  return CL_SUCCESS;
}
Пример #9
0
cl_int Dsyrk_internal(
  cl_env *env, double *a, double *c, double alpha, double beta,
  clblasTranspose transA, clblasUplo uplo, int ar, int ac, int n, int size_a, int size_c)
{
  CHECK(clblasSetup());
  cl_event events[NEVENTS];
  int nevent = 0;
  cl_mem mem_a = create_mem(env, a, size_a, CL_MEM_READ_ONLY, &(events[nevent++]));
  cl_mem mem_c;
  if (beta != 0) mem_c = create_mem(env, c, size_c, CL_MEM_READ_WRITE, &(events[nevent++]));
  else mem_c = create_mem(env, NULL, size_c, CL_MEM_READ_WRITE, NULL);
  
  int k = transA == clblasNoTrans ? ar : ac;
  cl_int err = clblasDsyrk(clblasColumnMajor, uplo, transA, 
    n, k, alpha, mem_a, 0, ac, beta, mem_c, 0, n,
    1, &(env->queues[0]), nevent, events, &(events[nevent]));
  CHECK(err);
  events[nevent+1] = *read_mem(env, mem_c, c, size_c, 1, &(events[nevent]));
  CHECK(clWaitForEvents(1, &(events[nevent+1])));
  CHECK(clReleaseMemObject(mem_a));
  CHECK(clReleaseMemObject(mem_c));
  clblasTeardown();
  return CL_SUCCESS;
}
Пример #10
0
int main (int argc, char **argv) {	
	int	qflag = 0;
	unsigned long int m_size = UINT_MAX;
	int object_size;
	int n_procs = 1;
	unsigned long int i = 0;
	unsigned long int j = 0;
	int n = 0;
	pid_t pids[n_procs];
	pid_t pid;
	int status;
	
	parse_com(argc, argv, &qflag, &m_size, &n_procs);
	unsigned int *bitmap;
	object_size = UINT_MAX/8 + 4;
	
	//create shared memory
	void *addr = create_mem("/hazlettb_prime", object_size);	
	bitmap = (unsigned int*)addr;	
	
	//set up bitmap for sieve 
	for (i=3;i<m_size;i+=2)
			setBit(bitmap,i);
			
	//fork the children
	for (i = 0; i < n_procs; ++i) {
		if ((pids[i] = fork()) < 0) {
			perror("fork");
			abort();
		}
		else if (pids[i] == 0) {
				
	//each child calculates and stores some of the primes
			n = 3 + 2*i;
			for (i = n; i < m_size; i+=(2*n_procs)){
				if (testBit(bitmap, i))
					for (j=i;i*j<m_size;j++)
						clearBit(bitmap,(i*j));					
			}
			exit(0);
		}
	}

	//wait for children to exit
	while (n_procs > 0) {
		pid = wait(&status);
		--n_procs;  
	}
			
	//step through array, check for twins and print if no q		
	for (i = 0; i < (m_size - 2); i++) {
		if (testBit(bitmap, i) && testBit(bitmap,(i+2))) {
			if (qflag == 0)
				printf("%lu %lu\n", i, i + 2);					
		}	
	}	
	
	//unlink memory object
	if (shm_unlink("/hazlettb_prime") == -1)
		printf("unlink failed");
	
	return 0;

}