想问一下如果要在共享内存里放置两组数,然后进行运算,调用的时候应该怎么调用?
global void encode_rs(intd_data1,intd_data2,int*result)
{
extern shared int s_data;
for(int i=blockIdx.x;i<OPT_N;i+=gridDim.x)
{
for(int j=threadIdx.x;j<n+1;j+=blockDim.x)
{
s_data[j]=d_data1[j];
s_data[j+n]=d_data2[j];
}
for(int j=threadIdx.x;j<n+1;j+=blockDim.x) /或者其他任意的运算/ {
s_data[j]=s_data[j]+s_data[j+n];
}
for(int j=threadIdx.x;j<n+1;j+=blockDim.x)
{
result[j]=s_data[j];
}
}
}
对吗?
我把所有的数据都放入共享内存的时候计算出来的结果是错误的
具体的就是下面这个函数
global void encode_rs(intd_data,intd_bb,intd_alpha_to,intd_index_of,intd_Gg,int n,int k,int m,int OPT_N)
{
extern shared int s_data[];
int s_data1=(int*)&s_data; //data k长
int* s_data2=(int*)&s_data1[k]; n-k长
int* s_data3=(int*)&s_data2[n-k]; //alpha_to 256个数n-1长
int* s_data4=(int*)&s_data3[n+1]; //index_of 256个数n-1长
for(int i=blockIdx.x;i<OPT_N;i+=gridDim.x) 10个block做运算OPT_N为10
{
for(int j=threadIdx.x;j<n+1;j+=blockDim.x)
{
s_data3[j]=d_alpha_to[j];
s_data4[j]=d_index_of[j];
}
__syncthreads();
for(int j=threadIdx.x;j<n+1;j+=blockDim.x)
{
s_data3[j]=s_data3[j]+s_data4[j];
}
__syncthreads();
for(int j=threadIdx.x;j<n+1;j+=blockDim.x)
{
d_alpha_to[j]=s_data3[j];
}
}
}
我的每一个block做的都是相同的运算,就是把两组数据相加,但是为什么出来的结果是10倍s_data4加上1倍的s_data3呢?????
比如:s_data3[256]=,0,1,2,3,4,5,6,…}
s_datta4[256]={1,2,3,4,5,6,7.。。。}
结果就是{10,21,32,43,54。。。。}
为什么啊。。。。。。。。。