Решаю трехдиагональные матрицы методом прогонки. z- число систем,n- число уравнений в системе.Не правильно считает элементы массива.Первый раз работаю с разделяемой памятью и не могу сообразить как правильно проставлять индексы. Сам код работает, а при выводе элемента массива на экран выдает невозможные значения.Помогите,пожалуйста, найти ошибку.
const int l = 128;
__global__ void func(int n, float *a, float *b, float *c, float *f, float *x)
{
__shared__ float bufa[l];// разделяемая память
__shared__ float bufb[l];
__shared__ float bufc[l];
__shared__ float buff[l];
__shared__ float bufx[l];
__shared__ float alpha[l];
__shared__ float betta[l];
int j = threadIdx.x;
int r = j*n;
float m;
for (int i = 1; i<n*l; i++)
{
bufa[i] = a[blockIdx.x*n + i];// запись значений из глобальной памяти в разделяемую
}
for (int i = 0; i<n*l - 2; i++)
{
bufb[i] = b[blockIdx.x*n + i];
}
for (int i = 0; i<n*l - 1; i++)
{
bufc[i] = c[blockIdx.x*n + i];
}
for (int i = 0; i < n*l; i++)
{
buff[i] = f[blockIdx.x*n + i];
}
for (int i = 0; i<n*l; i++)
{
bufx[i] = x[blockIdx.x*n+ i];
}
__syncthreads();
for (int i = 1 ; i < n ; i++)
{
m = bufa[i+r] / bufc[i - 1+r];
bufc[i+r] = bufc[i+r] - m*bufb[i - 1+r];
buff[i+r] = buff[i+r] - m*buff[i - 1+r];
}
__syncthreads();
bufx[n - 1 + r] = buff[n - 1 + r] / bufc[n - 1 + r];
for (int i = n - 1 ; i >= 0; i--){
bufx[i] = (buff[i+r] - bufb[i+r] * bufx[i + 1+r]) / bufc[i+r];
}
}