Hi Im currently using 9800GT on PCIE slot and 9500GT on PCI slot on Windows platform. I have tried to use OpenGL to boost my displaying speed but somehow it is not working properly. If shows black screen and when cutilSafeCall was used as code bellow on CreateVBO, it says
“cutilSafeCall… unexpected device error”
I have tried to use various cuda error checking but they throw message saying I cannot use such error for the function that Im using. Does anybody recognize my problem?
PS: I dont know why this is happening but as a method of olving such problem I have tried to use cudaInit and related calls but it says
1>Resampling_GL.obj : error LNK2019: unresolved external symbol _cuGLCtxCreate_v2@12 referenced in function _main
1>Resampling_GL.obj : error LNK2019: unresolved external symbol _cuGLInit@0 referenced in function _main
1>Resampling_GL.obj : error LNK2019: unresolved external symbol _cuCtxCreate_v2@12 referenced in function _main
1>Resampling_GL.obj : error LNK2019: unresolved external symbol _cuInit@4 referenced in function _main
1>C:\Users\RETINALOCT2\Desktop\Jay\OCTProcessor\gpu_testers\Resampling_GL\Debug\Resampling_GL.exe : fatal error LNK1120: 4 unresolved externals
Would this help? Following is my main and creatVBO function with header files that Im calling
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// includes, GL
#include <GL/glew.h>
//#include <GL/freeglut.h>
#include <GL/glut.h>
// includes CUDA <--> C++ interlops
#include <cuda_runtime.h>
#include <cutil_inline.h>
#include <cutil_gl_inline.h>
#include <cutil_gl_error.h>
#include <cuda_gl_interop.h>
#include <cuda.h>
#include <cudaGL.h>
.....
void createVBO(GLuint* pixel_buffer, struct cudaGraphicsResource **cuda_pixel_resource)
{
// create buffer object
glGenBuffers(1, pixel_buffer);
glBindBuffer(GL_ARRAY_BUFFER, *pixel_buffer);
//register buffer on cuda
unsigned int size = XDIM * YDIM * 4 * sizeof(float);
glBufferData(GL_ARRAY_BUFFER, size, 0, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
cudaGraphicsGLRegisterBuffer(cuda_pixel_resource, *pixel_buffer, cudaGraphicsMapFlagsWriteDiscard);
}
int main() {
// Pre-Calculation
readData();
convertor(); //convert values into single float
calc_resample_coefficients();
//Cuda Memory Allocation
int frame = 0, sum =0;
CUcontext *pCtx;
cuInit(0);
cuCtxCreate(pCtx, CU_CTX_MAP_HOST, 0);
cuGLInit();
cuGLCtxCreate(pCtx, CU_CTX_MAP_HOST, 0);
cudaMalloc((void**)&dev_frame, sizeof(int));
cudaMalloc((void**)&dev_sum, sizeof(int));
cudaMalloc((void**)&dev_original, sizeof(float)*FRAMES*XDIM*YDIM);
cudaMalloc((void**)&d_in,sizeof(cuComplex)*YDIM*XDIM);
cudaMalloc((void**)&dev_resamp, sizeof(float)*LINE_LENGTH*2);
cudaMalloc((void**)&dev_k_resampledspacing, sizeof(float));
cudaMalloc((void**)&dc_subtracted, sizeof(float)*XDIM*YDIM);
cudaMemcpy(dev_k_resampledspacing, &k_resampledspacing, sizeof(float), cudaMemcpyHostToDevice);
cudaMemcpy(dev_resamp, resamp_1D, sizeof(float)*LINE_LENGTH*2, cudaMemcpyHostToDevice);
cudaMemcpy(dev_original, original_cpu, sizeof(float)*FRAMES*XDIM*YDIM, cudaMemcpyHostToDevice);
cudaMemcpy(dev_frame, &frame, sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(dev_sum, &sum, sizeof(int), cudaMemcpyHostToDevice);
// Explicitly set device
cudaGLSetGLDevice(2);
int numArgs = 0;
glutInit(&numArgs, NULL);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(window_width, window_height);
glutCreateWindow("Cuda GL Interop (VBO)");
glutDisplayFunc(display);
glewInit();
// Create buffer object and register it with CUDA
createVBO(&pbo, &cuda_pbo_resource);
// Loop
glutMainLoop();
deleteVBO();
cudaThreadExit();
}