vortex/tests/opencl/psort/kernel.cl

35 lines
No EOL
744 B
Common Lisp

__kernel void psorti (__global const int *in, __global int *out)
{
int gid = get_global_id(0);
int n = get_global_size(0);
int ref = in[gid];
int pos = 0;
for (int i = 0; i < n; ++i) {
int cur = in[i];
pos += (cur < ref) || ((cur == ref) && (i < gid));
}
out[pos] = ref;
}
__kernel void psortf (__global const float *in, __global float *out)
{
int gid = get_global_id(0);
int n = get_global_size(0);
float ref = in[gid];
int pos = 0;
for (int i = 0; i < n; ++i) {
float cur = in[i];
pos += (cur < ref) || ((cur == ref) && (i < gid));
/*int cl = (cur < ref);
int ce = (cur == ref);
int ls = (i < gid);
int x = ce && ls;
int y = cl || x;
pos += y;*/
}
out[pos] = ref;
}