一旦我的opencl內核文件超過了一定的長度,就不能正確加載了。程序構建日誌(clBuildProgram)會返回很多錯誤,在行的中間似乎有削減(例如int test;
- >錯誤未知標識符't')。opencl內核文件沒有完全加載
這裏是我將加載程序源的功能:
char * load_program_source(const char *filename)
{
FILE *fh;
char* source;
long lSize;
fh = fopen(filename, "r");
if (fh == 0)
return 0;
//Get Filesize
fseek(fh,0,SEEK_END);
lSize = ftell(fh);
rewind(fh);
source = (char *) malloc(lSize);
memset(source,'\0',lSize);
fread(source, sizeof(char), lSize, fh);
return source;
}
這裏是程序是構建代碼:
//load program from file, compile kernels
cl_program program[1];
cl_kernel kernel[13];
const char * filename = "addKernel.c";
char *program_source = load_program_source(filename);
program[0] = clCreateProgramWithSource(context, 1, (const char**)&program_source,
NULL, &err);
if (err == CL_OUT_OF_HOST_MEMORY){
textBox1->Text += "Error: out of Host Memory!\r\n";
}
else if (err == CL_INVALID_CONTEXT){
textBox1->Text += "Error: invalid Context!\r\n";
}
else if (err == CL_INVALID_VALUE){
textBox1->Text += "Error: invalid Value!\r\n";
}
err = clBuildProgram(program[0], 0, NULL, NULL, NULL, NULL);
textBox1->Text += "Program build error: " + err + "\r\n";
cl_build_status status;
size_t logSize;
clGetProgramBuildInfo(program[0], deviceID[0], CL_PROGRAM_BUILD_STATUS, sizeof(cl_build_status), &status, NULL);
clGetProgramBuildInfo(program[0], deviceID[0], CL_PROGRAM_BUILD_LOG, 0, NULL, &logSize);
char* programLog;
programLog = (char*)calloc(logSize + 1, sizeof(char));
clGetProgramBuildInfo(program[0], deviceID[0], CL_PROGRAM_BUILD_LOG, logSize + 1, programLog, NULL);
std::string tmp = std::string(programLog);
this->textBox1->Text += "Program build info: error=" + err + ", status=" + status + ", programLog:\r\n" + gcnew System::String(tmp.c_str()) + "\r\n" + "In case of an error please make sure that openCL has been initialized\r\n";
我會很高興,如果你cound幫我出來了!
你嘗試「源=(的char *)malloc的(lSize所+ 1) ;」而不是「source =(char *)malloc(lSize);」 ? –
@RomanArzumanyan剛剛嘗試過。我在內核的最後添加了'testtesttesttest'行來增加文件大小。錯誤仍然出現錯誤: 'OCL2DFA.tmp.cl(629):警告:該 聲明沒有存儲類或類型說明符 ttesttesttesttesttesttesttest ^ C:\用戶\ ASCHOE〜1個\應用程序數據\本地\溫度\ OCL2DFA.tmp.cl(629):error:global 變量必須在addrSpace中聲明常量 ttesttesttesttesttesttesttesttest ^ 源代碼結束:error:expected a「;」 編譯「C:\ Users \ ASCHOE〜1 \ AppData \ Local \ Temp \ OCL2DFA.tmp.cl」時檢測到2個錯誤。 ' – mTORjaeger