Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CUDA: segfault при использовании VBO, вылетает в первом cudaGLMapBufferObject 
V
    Опции темы
lison4ik
Дата 17.10.2010, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 29.6.2009
Где: Севастополь

Репутация: нет
Всего: нет



Здравствуйте! Я пишу систему частиц, массив позиций которых хранится в vertex buffer object (vbo) и обрабатывается на GPU. В качестве образца использовала код с сайта nvidia. 

Программа вылетает с ошибкой "segmentation fault" при первом же вызове cudaGLMapBufferObject. 

Код

    int numThreads = min(256, numBodies);
    int numBlocks = (int) ceil(numBodies / (float) numThreads);
    float *oldPos, *newPos;

    CUDA_SAFE_CALL(cudaGLMapBufferObject((void**)&oldPos, vboOldPos));  // !!! 
    CUDA_SAFE_CALL(cudaGLMapBufferObject((void**)&newPos, vboNewPos));

    // execute the kernel
    kernel_update <<< numBlocks, numThreads >>>((float4*)newPos, (float4*)newVel,
                                               (float4*)oldPos, (float4*)oldVel,
                                               deltaTime,
                                               damping,
                                               particleRadius,
                                               gravity
                                               );


Я даже могу отрисовывать частички из буфера с помощью  glDrawArrays, но изменить данные в нём не могу. В чём дело?!
За неимением большого опыта работы с CUDA о причинах ошибки могу только догадываться. 

Буду рада любому совету. Спасибо.

Добавлено через 8 минут и 57 секунд
Ой, я не там тему разместила, простите. Мне бы в программирование под Linux.
PM MAIL ICQ   Вверх
EgorTheBlade
Дата 18.10.2010, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 5.12.2009

Репутация: нет
Всего: -1



Вы память выделили на эти переменные? float*old_pos = (float*) malloc(...); Linux тут имеет посредственное значение. Вам нужно почитать несколько статей про AMD stream и Nvidia CUDA .

Это сообщение отредактировал(а) EgorTheBlade - 18.10.2010, 08:41
PM MAIL Skype   Вверх
lison4ik
Дата 21.10.2010, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 29.6.2009
Где: Севастополь

Репутация: нет
Всего: нет



Не совсем так. Во всех примерах с Nvidia CUDA SDK, где используются VBO, перед тем как вызвать mapBufferObject никто специально память под указатель не выделял.

Дело было совсем в другом. Спасибо, проблему решила, но появилась новая.. 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0780 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.