Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > CUDA: segfault при использовании VBO


Автор: lison4ik 17.10.2010, 17:38
Здравствуйте! Я пишу систему частиц, массив позиций которых хранится в 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.

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

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

Дело было совсем в другом. Спасибо, проблему решила, но появилась новая.. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)