point_recovery_kernel.clc 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include <iterative_point_recovery.clh>
  2. #define _GDM__PRIVATE_MEM_HEAP_SZ_BYTES 65536
  3. __kernel void krPointRecovery(__global int32_t* const d_pi32KrErr) {
  4. uint64_t idx=get_global_id(0);
  5. if(idx<1ul) {
  6. _GDM___private_heap_init();
  7. __private flt32_t pCenters[6]={-0.976f, 0.401f, /* the first centre */
  8. -0.251f,-0.506f, /* the second centre */
  9. 0.368f, 0.327f },/* the third centre */
  10. pRadiuses[3]={ 0.98f, 0.653f, 0.816f }, /* radiuses */
  11. pResult[2]={ 0.0f, 0.0f }, /* result */
  12. Quality=0.0; /* quality */
  13. __private const _PTRC_INDAT in={
  14. .u64D=2ul, /* dimensionality */
  15. .pfCnt=pCenters, .pfRds=pRadiuses,
  16. .u64NofS=3ul /* number of known spheres */ };
  17. __private int32_t err=0; /* error */
  18. {
  19. __private uint64_t i,j;
  20. printf("At the beginning were\n");
  21. for(i=0ul;i<in.u64NofS;i++) {
  22. printf("\tc%lu={ ",i);
  23. for(j=0ul;j<in.u64D;j++) printf("%f ",in.pfCnt[i*in.u64D+j]);
  24. printf("}\n");
  25. }
  26. printf("\tR={ ");
  27. for(i=0ul;i<in.u64NofS;i++) printf("%f ",in.pfRds[i]);
  28. printf("}\n");
  29. }
  30. err=_ptrc_recoverPoint(pResult,&Quality,in,in.u64NofS,
  31. _GDM_heap_ARG(__private));
  32. if(!err) {
  33. __private uint64_t i;
  34. printf("and the result is\n\tp={ ");
  35. for(i=0ul;i<in.u64D;i++) printf("%f ",pResult[i]);
  36. printf("}; Lambda = %f\n",Quality);
  37. } else { printf("Error %d\n",err); *d_pi32KrErr=err; return; }
  38. }
  39. return;
  40. }