int main(int argc, char* argv[])
{

	int i;
	int n = SIZE;


	/* open device for threads */
	int dd = coprthr_dopen(COPRTHR_DEVICE_E32,COPRTHR_O_THREAD);


	/* compile thread function */
	coprthr_program_t prg = coprthr_cc_read_bin("./memory_device.e32",0);
	coprthr_sym_t thr = coprthr_getsym(prg,"my_thread");

	printf("dd=%d prg=%p krn=%p\n",dd,prg,thr);

	/* allocate memory shared with coprocessor device */
	coprthr_mem_t aa_mem = coprthr_dmalloc(dd,n*sizeof(int),0);
	coprthr_mem_t bb_mem = coprthr_dmalloc(dd,n*sizeof(int),0);
	coprthr_mem_t cc_mem = coprthr_dmalloc(dd,n*sizeof(int),0);

   int* aa = (int*)coprthr_memptr(aa_mem,0);
   int* bb = (int*)coprthr_memptr(bb_mem,0);
   int* cc = (int*)coprthr_memptr(cc_mem,0);

	
	/* set args to pass to thread on coprocessor device */
	coprthr_mem_t args_mem = coprthr_dmalloc(dd,sizeof(struct my_args),0);
	struct my_args* pargs = (struct my_args*)coprthr_memptr(args_mem,0);
	pargs->n = n;
	pargs->aa = aa,
	pargs->bb = bb,
	pargs->cc = cc;


	/* initialize A, B, and C arrays */
	for (i=0; i<n; i++) {
		aa[i] = i;
		bb[i] = 2*i;
		cc[i] = 3;
	}

	// Execute kernel on coprocessor device
	coprthr_dexec(dd,16,thr,(void*)&args_mem, 0 );
	coprthr_dwait(dd);


	for(i=0; i<n; i++) 
		printf("%d: %d + %d = %d\n",i,aa[i],bb[i],cc[i]);


	/* clean up */
	coprthr_dfree(dd,args_mem);
	coprthr_dfree(dd,aa_mem);
	coprthr_dfree(dd,bb_mem);
	coprthr_dfree(dd,cc_mem);

	coprthr_dclose(dd);
}
Example #2
0
int main()
{
	int i;

	int dd = coprthr_dopen(TEST_COPRTHR_DEVICE,COPRTHR_O_STREAM);

	printf("dd=%d\n",dd);

	coprthr_program_t prg = coprthr_dcompile(dd,src,sizeof(src),"",0);
	coprthr_kernel_t krn = coprthr_getsym(prg,"my_kern");

	printf("prg=%p krn=%p\n",prg,krn);

	float* a = (float*)malloc(SIZE*sizeof(float));
	float* b = (float*)malloc(SIZE*sizeof(float));
	float* c = (float*)malloc(SIZE*sizeof(float));

	for(i=0; i<SIZE; i++) {
		a[i] = 1.0f * i;
		b[i] = 2.0f * i;
		c[i] = 0.0f;
	}
	
	coprthr_mem_t mema = coprthr_dmalloc(dd,SIZE*sizeof(float),0);
	coprthr_mem_t memb = coprthr_dmalloc(dd,SIZE*sizeof(float),0);
	coprthr_mem_t memc = coprthr_dmalloc(dd,SIZE*sizeof(float),0);

	coprthr_dwrite(dd,mema,0,a,SIZE*sizeof(float),COPRTHR_E_NOWAIT);
	coprthr_dwrite(dd,memb,0,b,SIZE*sizeof(float),COPRTHR_E_NOWAIT);
	coprthr_dwrite(dd,memc,0,c,SIZE*sizeof(float),COPRTHR_E_NOWAIT);

	unsigned int nargs = 3;
	void* args[] = { &mema, &memb, &memc };
	unsigned int nthr = SIZE;

	coprthr_dexec(dd,krn,nargs,args,nthr,0,COPRTHR_E_NOWAIT);

	coprthr_dcopy(dd,memc,0,memb,0,SIZE*sizeof(float),COPRTHR_E_NOWAIT);

	coprthr_kernel_t v_krn[] = { krn, krn };
	unsigned int v_nargs[] = { nargs, nargs };
	void** v_args[] = { args, args };
	unsigned int v_nthr[] = { nthr, nthr };

	coprthr_dnexec(dd,1,v_krn,v_nargs,v_args,v_nthr,0,COPRTHR_E_NOWAIT);

	coprthr_dread(dd,memc,0,c,SIZE*sizeof(float),COPRTHR_E_NOWAIT);

	coprthr_dwait(dd);

	for(i=0; i<SIZE; i++) 
		printf("%f + %f = %f\n",a[i],b[i],c[i]);

	coprthr_dfree(dd,mema);	
	coprthr_dfree(dd,memb);	
	coprthr_dfree(dd,memc);	

	free(a);
	free(b);
	free(c);

	coprthr_dclose(dd);
}
Example #3
0
int main()
{
	int i;

	int dd = coprthr_dopen(COPRTHR_DEVICE_X86_64,COPRTHR_O_STREAM);

	printf("dd=%d\n",dd);

	coprthr_program_t prg = coprthr_dcompile(dd,src,sizeof(src),"",0);
	coprthr_kernel_t krn = coprthr_getsym(prg,"my_kern");

	printf("prg=%p krn=%p\n",prg,krn);

	int* a = (int*)malloc(SIZE*sizeof(int));
	int* b = (int*)malloc(SIZE*sizeof(int));
	int* c = (int*)malloc(SIZE*sizeof(int));
	int* d = (int*)malloc(SIZE*sizeof(int));

	for(i=0; i<SIZE; i++) {
		a[i] = 1 * i;
		b[i] = 2 * i;
		c[i] = 0;
		d[i] = 0;
	}
	
	coprthr_mem_t mema = coprthr_dmalloc(dd,SIZE*sizeof(int),0);
	coprthr_mem_t memb = coprthr_dmalloc(dd,SIZE*sizeof(int),0);
	coprthr_mem_t memc = coprthr_dmalloc(dd,SIZE*sizeof(int),0);
	coprthr_mem_t memd = coprthr_dmalloc(dd,SIZE*sizeof(int),0);

	coprthr_event_t ev[10];

	ev[0] = coprthr_dwrite(dd,mema,0,a,SIZE*sizeof(float),COPRTHR_E_NOWAIT);
	ev[1] = coprthr_dwrite(dd,memb,0,b,SIZE*sizeof(float),COPRTHR_E_NOWAIT);
	ev[2] = coprthr_dwrite(dd,memc,0,c,SIZE*sizeof(float),COPRTHR_E_NOWAIT);
	ev[3] = coprthr_dwrite(dd,memd,0,d,SIZE*sizeof(float),COPRTHR_E_NOWAIT);

	for(i=0;i<4;i++) 
		coprthr_dwaitev(dd,ev[i]);

	unsigned int nargs = 4;
	void* args[] = { &mema, &memb, &memc, &memd };
	unsigned int nthr = SIZE;

	ev[4] = coprthr_dexec(dd,krn,nargs,args,nthr,0,COPRTHR_E_NOWAIT);

	ev[5] = coprthr_dread(dd,memc,0,c,SIZE*sizeof(float),COPRTHR_E_NOWAIT);

	for(i=0; i<SIZE; i++) d[i] = 1;
	coprthr_dwrite(dd,memd,0,d,SIZE*sizeof(float),COPRTHR_E_NOW);

	for(i=4;i<6;i++) 
		coprthr_dwaitev(dd,ev[i]);

	for(i=0; i<SIZE; i++) 
		printf("%d + %d = %d\n",a[i],b[i],c[i]);

	coprthr_dfree(dd,mema);	
	coprthr_dfree(dd,memb);	
	coprthr_dfree(dd,memc);	

	free(a);
	free(b);
	free(c);

	coprthr_dclose(dd);
}