12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #pragma OPENCL EXTENSION cl_khr_fp64: enable
- int findIndexSeq(double * CDF, int lengthCDF, double value)
- {
- int index = -1;
- int x;
- for(x = 0; x < lengthCDF; x++)
- {
- if(CDF[x] >= value)
- {
- index = x;
- break;
- }
- }
- if(index == -1)
- return lengthCDF-1;
- return index;
- }
- int findIndexBin(double * CDF, int beginIndex, int endIndex, double value)
- {
- if(endIndex < beginIndex)
- return -1;
- int middleIndex;
- while(endIndex > beginIndex)
- {
- middleIndex = beginIndex + ((endIndex-beginIndex)/2);
- if(CDF[middleIndex] >= value)
- {
- if(middleIndex == 0)
- return middleIndex;
- else if(CDF[middleIndex-1] < value)
- return middleIndex;
- else if(CDF[middleIndex-1] == value)
- {
- while(CDF[middleIndex] == value && middleIndex >= 0)
- middleIndex--;
- middleIndex++;
- return middleIndex;
- }
- }
- if(CDF[middleIndex] > value)
- endIndex = middleIndex-1;
- else
- beginIndex = middleIndex+1;
- }
- return -1;
- }
- /*****************************
- * OpenCL Kernel Function to replace FindIndex
- * param1: arrayX
- * param2: arrayY
- * param3: CDF
- * param4: u
- * param5: xj
- * param6: yj
- * param7: Nparticles
- *****************************/
- __kernel void particle_kernel(__global double * arrayX, __global double * arrayY, __global double * CDF, __global double * u, __global double * xj, __global double * yj, int Nparticles){
- int i = get_global_id(0);
-
- if(i < Nparticles){
-
- int index = -1;
- int x;
-
- for(x = 0; x < Nparticles; x++){
- if(CDF[x] >= u[i]){
- index = x;
- break;
- }
- }
- if(index == -1){
- index = Nparticles-1;
- }
-
- xj[i] = arrayX[index];
- yj[i] = arrayY[index];
-
- }
- }
|