Как использовать матрицу в качестве параметра для работы с CUDA и Matlab

0

Я пытаюсь понять, как передать матрицу из Matlab в файл C++ CUDA (*.ptx). Я хочу обрабатывать матрицу по-разному в каждом потоке! Я определенно не хочу разбить матрицу в разных потоках! Я хочу, чтобы каждый поток имел одну и ту же матрицу!

Matlab и CUDA (C++)

Я пробовал что-то вроде:

_global_ void radialAverage(int* image[][]) {
  ...
}

но это не сработало. Я получаю следующую ошибку:

kernel.cu(8): error: an array may not have elements of this type
1 error detected in the compilation of "C:/Users/ADMINI~1/AppData/Loca/Temp/tmpxft_00000c44_00000000-8_kernel.cpp1.ii".

Можете ли вы придумать какой-либо способ сделать это? Или это возможно?

Btw: Я не использую библиотеки для C++, а только CUDA-Api.

  • 0
    Можете ли вы опубликовать полученную ошибку?
  • 0
    kernel.cu (8): ошибка: в массиве могут отсутствовать элементы этого типа 1 ошибка, обнаруженная при компиляции «C: /Users/ADMINI~1/AppData/Local/Temp/tmpxft_00000c44_00000000-8_kernel.cpp1.ii».
Теги:
matrix
cuda

1 ответ

1

Правильный способ определения ядра для передачи матрицы из Matlab четко отображается (несколько раз) на странице, на которую вы ссылались в своем вопросе.

Итак, определите это ядро (Matlab gpuArray передается автоматически как указатель устройства на ядро):

__global__ void radialAverage(int* image) {
  ...
}

После того как вы CUDAKernel ядро с помощью CUDAKernel из панели инструментов, создайте целочисленный gpuArray из вашей матрицы Matlab и передайте это функции ядра.

  • 0
    Хорошо .. попробую
  • 0
    Когда я попробовал ваше решение, я получил сообщение об ошибке: «kernel.cu (55): error: выражение должно иметь тип указатель на объект». Я думаю, это потому, что он не принимает указатель как многомерный массив!
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню