i downloaded the fann library written by seth that runs on GPU.
http://leenissen.dk/fann/forum/viewtopic.php?f=2&t=658
i am running ubuntu, opengl, glut on nvidia graphics card. i tried to compile with fann_gpu.h and hit a brick wall here.
Here is the example code
gpu.c
include "fann/src/gpu/fann_gpu.h"
layer *A, *B, *C, *D, *E;
float *input, *weight_matrix, *mask_matrix;
int i,j;
double start, end, run_time;
//Dummy function for filling weights and mask with dummy data, it preserves the texture sizes wich is multiples of 4.
void fillWeights(layer *target);
//dummy vector data
void fillVector(layer *target);
int main(int argc, char *arg){
char error;
int n = 5;
//start OpenGL
initOpenGL();
//testing system compatibility
if ((error = test()) != 0){
printf("Error: %s\n", error);
return -1;
}
//initializing system.
if (!init()){
printf("Init not successful...");
return -1;
}
//create layers using the sigmoid_sum fragment program.
A = generateLayer("sigmoid_sum_masked.fp", 4, 40, 0);
B = generateLayer("sigmoid_sum_masked.fp", 40, 16, 0);
C = generateLayer("sigmoid_sum_masked.fp", 40, 22, 16);
D = generateLayer("sigmoid_sum_masked.fp", 38, 5, 0);
E = generateLayer(0, 5, 0, 0);
setOutput(A, B);
setInput(C, A);
setOutput(B, D);
setOutput(C, D);
setOutput(D, E);
//dummy values.
//fill vectors with values.
fillWeights(A);
copyWeightsToTexture(weight_matrix, A);
copyMaskToTexture(mask_matrix, A);
free(weight_matrix);
free(mask_matrix);
fillWeights(B);
copyWeightsToTexture(weight_matrix, B);
copyMaskToTexture(mask_matrix, B);
free(weight_matrix);
free(mask_matrix);
fillWeights(C);
copyWeightsToTexture(weight_matrix, C);
copyMaskToTexture(mask_matrix, C);
free(weight_matrix);
free(mask_matrix);
fillWeights(D);
copyWeightsToTexture(weight_matrix, D);
copyMaskToTexture(mask_matrix, D);
free(mask_matrix);
free(weight_matrix);
//Execute the network n times.
while (n-->0){
fillVector(A);
copyVectorToTexture(input, A);
run(A);
run(B);
run(C);
run(D);
printLayer(E);
free(input);
}
//clean up
destroyLayer(A);
destroyLayer(B);
destroyLayer(C);
destroyLayer(D);
destroyLayer(E);
return 0;
}
//Dummy function for filling weights and mask with dummy data, it preserves the texture sizes wich is multiples of 4.
void fillWeights(layer *target){
weight_matrix = calloc(target->out_size * target->size, sizeof(float));
mask_matrix = calloc(target->out_size * target->size, sizeof(float));
for(i=0; iout_size; i++){
for(j=0; jsize; j++){
weight_matrix[j+i_target->size] = RAND_UNI;
//weight_matrix[j+i_target->size] = j+i_target->size;
//weight_matrix[j+i_target->size] = 1.0f;
mask_matrix[j+i*target->size] = 1;
}
}
}
//dummy vector data
void fillVector(layer _target){
input = malloc(sizeof(float)_target->size);
for(i=0; isize; i++){
input[i] = RAND_UNI;
//input[i] = i;
//input[i] = 1;
}
}
compiling this file gives this.. Am i missing something here?
pbu@pbu-desktop:~/Desktop$ gcc gpu.c -o gpu -lm -lfann -lglut -lGLU -lGL -lm
In file included from gpu.c:1:0:
fann/src/gpu/fann_gpu.h:77:1: error: unknown type name ‘PFNGLGETPROGRAMIVPROC’
PFNGLGETPROGRAMIVPROC glGetProgramiv;
^
fann/src/gpu/fann_gpu.h:78:1: error: unknown type name ‘PFNGLCREATEPROGRAMPROC’
PFNGLCREATEPROGRAMPROC glCreateProgram;
^
fann/src/gpu/fann_gpu.h:79:1: error: unknown type name ‘PFNGLCREATEPROGRAMOBJECTARBPROC’
PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgram2;
^
fann/src/gpu/fann_gpu.h:80:1: error: unknown type name ‘PFNGLDELETEPROGRAMPROC’
PFNGLDELETEPROGRAMPROC glDeleteProgram;
^
fann/src/gpu/fann_gpu.h:81:1: error: unknown type name ‘PFNGLGETSHADERIVPROC’
PFNGLGETSHADERIVPROC glGetShaderiv;
^
fann/src/gpu/fann_gpu.h:82:1: error: unknown type name ‘PFNGLCREATESHADERPROC’
PFNGLCREATESHADERPROC glCreateShader;
^
fann/src/gpu/fann_gpu.h:83:1: error: unknown type name ‘PFNGLDELETESHADERPROC’
PFNGLDELETESHADERPROC glDeleteShader;
^
fann/src/gpu/fann_gpu.h:84:1: error: unknown type name ‘PFNGLSHADERSOURCEPROC’
PFNGLSHADERSOURCEPROC glShaderSource;
^
fann/src/gpu/fann_gpu.h:85:1: error: unknown type name ‘PFNGLCOMPILESHADERPROC’
PFNGLCOMPILESHADERPROC glCompileShader;
^
fann/src/gpu/fann_gpu.h:86:1: error: unknown type name ‘PFNGLATTACHSHADERPROC’
PFNGLATTACHSHADERPROC glAttachShader;
^
fann/src/gpu/fann_gpu.h:87:1: error: unknown type name ‘PFNGLGETSHADERINFOLOGPROC’
PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
^
fann/src/gpu/fann_gpu.h:88:1: error: unknown type name ‘PFNGLGETPROGRAMINFOLOGPROC’
PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
^
fann/src/gpu/fann_gpu.h:89:1: error: unknown type name ‘PFNGLLINKPROGRAMPROC’
PFNGLLINKPROGRAMPROC glLinkProgram;
^
fann/src/gpu/fann_gpu.h:90:1: error: unknown type name ‘PFNGLUSEPROGRAMPROC’
PFNGLUSEPROGRAMPROC glUseProgram;
^
fann/src/gpu/fann_gpu.h:91:1: error: unknown type name ‘PFNGLGETUNIFORMLOCATIONPROC’
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
^
fann/src/gpu/fann_gpu.h:92:1: error: unknown type name ‘PFNGLUNIFORM1FPROC’
PFNGLUNIFORM1FPROC glUniform1f;
^
fann/src/gpu/fann_gpu.h:93:1: error: unknown type name ‘PFNGLUNIFORM1IPROC’
PFNGLUNIFORM1IPROC glUniform1i;
^
fann/src/gpu/fann_gpu.h:96:1: error: unknown type name ‘PFNGLGENFRAMEBUFFERSEXTPROC’
PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
^
fann/src/gpu/fann_gpu.h:97:1: error: unknown type name ‘PFNGLBINDFRAMEBUFFEREXTPROC’
PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
^
fann/src/gpu/fann_gpu.h:98:1: error: unknown type name ‘PFNGLFRAMEBUFFERTEXTURE2DEXTPROC’
PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
^
fann/src/gpu/fann_gpu.h:99:1: error: unknown type name ‘PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC’
PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
^
fann/src/gpu/fann_gpu.h:113:1: error: unknown type name ‘GLuint’
GLuint output_fb;
^
fann/src/gpu/fann_gpu.h:114:1: error: unknown type name ‘GLuint’
GLuint glutWindowHandle;
^
fann/src/gpu/fann_gpu.h:122:2: error: unknown type name ‘GLuint’
GLuint input_texture;
^
fann/src/gpu/fann_gpu.h:123:2: error: unknown type name ‘GLuint’
GLuint original_texture;
^
fann/src/gpu/fann_gpu.h:124:2: error: unknown type name ‘GLuint’
GLuint weight_texture;
^
fann/src/gpu/fann_gpu.h:125:2: error: unknown type name ‘GLuint’
GLuint mask_texture;
^
fann/src/gpu/fann_gpu.h:126:2: error: unknown type name ‘GLuint’
GLuint program;
^
fann/src/gpu/fann_gpu.h:131:2: error: unknown type name ‘GLuint’
GLuint out_texture;
^
fann/src/gpu/fann_gpu.h:135:2: error: unknown type name ‘GLint’
GLint shader_input_vector;
^
fann/src/gpu/fann_gpu.h:136:2: error: unknown type name ‘GLint’
GLint shader_weight_matrix;
^
fann/src/gpu/fann_gpu.h:137:2: error: unknown type name ‘GLint’
GLint shader_mask_matrix;
^
fann/src/gpu/fann_gpu.h:143:1: error: unknown type name ‘GLenum’
GLenum texTarget;
^
fann/src/gpu/fann_gpu.h:144:1: error: unknown type name ‘GLenum’
GLenum texInternalFormat;
^
fann/src/gpu/fann_gpu.h:145:1: error: unknown type name ‘GLenum’
GLenum texFormat;
^
In file included from gpu.c:1:0:
fann/src/gpu/fann_gpu.h:193:1: error: unknown type name ‘GLuint’
GLuint attachShaderProgram(char* source_file, layer * target);
^
fann/src/gpu/fann_gpu.h:329:15: error: unknown type name ‘GLuint’
void printLog(GLuint obj);
^
fann/src/gpu/fann_gpu.h:331:1: error: unknown type name ‘GLuint’
void setupTexture(const GLuint texID, GLuint width, GLuint height, GLenum tex_target, GLenum tex_format, GLenum internal_format);
^
fann/src/gpu/fann_gpu.h:331:39: error: unknown type name ‘GLuint’
void setupTexture(const GLuint texID, GLuint width, GLuint height, GLenum tex_target, GLenum tex_format, GLenum internal_format);
^
fann/src/gpu/fann_gpu.h:331:53: error: unknown type name ‘GLuint’
void setupTexture(const GLuint texID, GLuint width, GLuint height, GLenum tex_target, GLenum tex_format, GLenum internal_format);
^
fann/src/gpu/fann_gpu.h:331:68: error: unknown type name ‘GLenum’
void setupTexture(const GLuint texID, GLuint width, GLuint height, GLenum tex_target, GLenum tex_format, GLenum internal_format);
^
fann/src/gpu/fann_gpu.h:331:87: error: unknown type name ‘GLenum’
void setupTexture(const GLuint texID, GLuint width, GLuint height, GLenum tex_target, GLenum tex_format, GLenum internal_format);
^
fann/src/gpu/fann_gpu.h:331:106: error: unknown type name ‘GLenum’
void setupTexture(const GLuint texID, GLuint width, GLuint height, GLenum tex_target, GLenum tex_format, GLenum internal_format);
^