Я пытаюсь закодировать хост, который отправляет параметры основной функции. У меня проблема с размером параметров, я определяю эти векторы:
std::vector<char, aligned_allocator<char>> string(maxstring);
std::vector<char, aligned_allocator<char>> pattern(maxseq);
std::vector<int, aligned_allocator<int>> vStringdim(DIM);
std::vector<int, aligned_allocator<int>> vSeqdim(DIM);
std::vector<int, aligned_allocator<int>> vOcc(DIM);
std::vector<int, aligned_allocator<int>> vPi(piDIM * DIM);
С постоянным размером:
#define DIM 50
#define maxseq 256
#define maxstring 2048
#define piDIM 257
Затем я передаю их функции, которая принимает в качестве аргументов
cl::CommandQueue &q,
cl::Kernel &kernel,
std::vector<int, aligned_allocator<int>> &vStringdim,
std::vector<int, aligned_allocator<int>> &vSeqdim,
std::vector<char, aligned_allocator<char>> &vString,
std::vector<char, aligned_allocator<char>> &vSeq,
std::vector<int, aligned_allocator<int>> &vPi,
std::vector<int, aligned_allocator<int>> &vOcc)
{
И создает буферы в OpenCL
OCL_CHECK(err,
cl::Buffer buffer_stringdim(context,
CL_MEM_USE_HOST_PTR |
CL_MEM_READ_ONLY,
sizeof(int) * DIM,
vStringdim.data(),
&err));
OCL_CHECK(err,
cl::Buffer buffer_seqdim(context,
CL_MEM_USE_HOST_PTR |
CL_MEM_READ_ONLY,
sizeof(int) * DIM,
vSeqdim.data(),
&err));
OCL_CHECK(err,
cl::Buffer buffer_string(context,
CL_MEM_USE_HOST_PTR |
CL_MEM_READ_ONLY,
sizeof(char) * maxstring,
vString.data(),
&err));
OCL_CHECK(err,
cl::Buffer buffer_seq(context,
CL_MEM_USE_HOST_PTR |
CL_MEM_READ_ONLY,
sizeof(char) * maxseq,
vSeq.data(),
&err));
OCL_CHECK(err,
cl::Buffer buffer_pi(context,
CL_MEM_USE_HOST_PTR |
CL_MEM_READ_ONLY,
sizeof(int) * piDIM * DIM,
vPi.data(),
&err));
OCL_CHECK(err,
cl::Buffer buffer_occ(context,
CL_MEM_USE_HOST_PTR |
CL_MEM_WRITE_ONLY,
sizeof(int) * DIM,
vOcc.data(),
&err));
И я вызываю ядро, которое принимает такие аргументы и выполняет некоторые операции:
void kmp(int *occ, int *stringdim, int *seqdim, char *seq, char *string, int *pi)
С указанными ранее параметрами он работает нормально и фактически возвращает правильный результат без исключений. Но используя эти параметры:
#define DIM 50
#define maxseq 512
#define maxstring 4096
#define piDIM 513
Он возвращает
Segmentation fault (core dumped)
Может ли кто-нибудь помочь мне решить проблему?