Компьютерная графика

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Компьютерная графика » Программирование графики и GPU » Проблема создания массива в kernel функции CUDA.


Проблема создания массива в kernel функции CUDA.

Сообщений 1 страница 2 из 2

1

Всем привет)Изучаю CUDA для решения мат задач. Скачал все драйвера и SDK CUDA поставил на ноут. На чем прогаю MS VS 2008 Professional, Win 7 64 bit, GeForce 610M, CUDA 5.0. Написал программу сложения двух векторов. Все нормально работает. Вопрос хочу создать массив для каждой нити, но не могу скомпилировать прогу. Вот исходник

__global__ void func(const int n)
{   
    int a[n];//int * a = new int[n]; delete[] a;
}

В первом случае вываливается ошибка "Expression must have a constant value". Во втором случае компилируется, но приложение терпит крах во время исполнения. Возникает некая ошибка при распрделении памяти. Это нормально? Читал мануал по CUDA. Таких ограничений не встречал. Этот вопрос задал на официальном сайте форума  nVidia. Прошло уже 3 дня, ответа так и нет. Обращаюсь к Вам. Пожалуйста, дайте обоснованный ответ. И если не трудно, запустите у себя этот пример. У Вас возникает эта ошибка? Далее смотрел примеры с исходников там переменную n объявляют следующим образом:

#define n 20

const int n = 20;

Если приписать их, то программа работает нормально. Как-то не хорошо получается! массив, который можно создать на GPU, нужно передавать через канал.

0

2

Не помню, поддерживается ли на GPU new/delete. malloc точно есть.
То, что не хочет создавать массив без new - все в полном соответствии со стандартом - размер массива должен быть константой времени компиляции.
Но вообще-то память лучше выделять на хосте, а не на девайсе

0


Вы здесь » Компьютерная графика » Программирование графики и GPU » Проблема создания массива в kernel функции CUDA.


создать форум