i want to implement BWT in openCL my host code is givin no error but the output is giveing some junk values. I think the problem is in kernel code. I want to implement it data parallel that is each thread will do bwt on individual string . please help....my kernel code is attached
Code :
#include<stdlib.h>
#define BWT_SIZE=1024;
_kernel void bwt(_global uchar *bwt_buf, _global uchar *bwt_out_buf, _global uint nread, _global index_of_origin){
uint i, last_index=BWT_SIZE, index_table[BWT_SIZE]
//get the index of the current element
 
        int id = get_global_id(0);
        for(i=0;i<nread;i++)
                {
                        index_table[i]=i;
                }
                qsort(index_table,nread,sizeof(int),(int(*)(const void *,const void *))bwt_comp);
                last_index=nread;
                for(i=0;i<nread;i++)
                        {
                                if(index_table[i]==0){
                                bwt_out_buf[i]=bwt_buf[nread-1];        
                                last_index=i;
                                }
                                bwt_out_buf[id]=bwt_buf[index_table[i]-1];
                        }
                index_of_origin=last_index;                     
int bwt_comp(uint *a, uint *b)
{
        register int a1=*a,b1=*b,tmp=a1;
        if ( bwt_buf[a1] != bwt_buf[b1] ) {
                if ( bwt_buf[a1] > bwt_buf[b1] )
                return 1;}
                else return -1;
        else {
                do {
                        if ( bwt_buf[++a1 == nread? a1 = 0 : a1]
                                        != bwt_buf[++b1 == nread? b1 = 0 : b1] ) {
                                if ( bwt_buf[a1] > bwt_buf[b1] ) return 1;
                                else return -1;
                        }
                } while ( a1 != tmp );