- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, so im working on a CNN based OpenCL on De1soc.
I got the following error:*** Error in `./host': malloc(): memory corruption: 0x000677e8 ***
This error pops up when the program ran the clCreatebuffer. for ( j = 0 ; j < LAYER_NUM ; ++j) {
// Create Buffer for Weights each layers
buffer_size = layer_config*layer_config*layer_config*layer_config*sizeof(float);
weights_buffer = clCreateBuffer(context,CL_MEM_READ_ONLY,buffer_size,NULL,&status);
checkError(status,"Failed to create buffer for weights in layer %d", j);
// Create Buffer for Bias, Scales, Rolling Mean and Rolling variance
buffer_size = layer_config*sizeof(float);
bias_buffer = clCreateBuffer(context, CL_MEM_READ_WRITE, buffer_size,NULL,&status);
checkError(status,"Failed to create buffer for bias in layer %d", j);
scales_buffer = clCreateBuffer(context, CL_MEM_READ_WRITE, buffer_size, NULL, &status);
checkError(status,"Failed to create buffer for scales in layer %d", j);
rolling_mean_buffer = clCreateBuffer(context, CL_MEM_READ_WRITE, buffer_size, NULL, &status);
checkError(status,"Failed to create buffer for rolling mean in layer %d", j);
rolling_variance_buffer = clCreateBuffer(context, CL_MEM_READ_WRITE, buffer_size, NULL, &status);
checkError(status,"Failed to create buffer for rolling variance in layer %d", j);
// Create Buffer for convolutional result workspace
// Convolutional kernel write data to here
// Maxpool Kernel Read data from here
buffer_size = layer_config*layer_config*layer_config*layer_config*sizeof(float);
data_conv_buffer = clCreateBuffer(context, CL_MEM_READ_WRITE,buffer_size, NULL, &status);
checkError(status, "Failed to create buffer to conv buffer in layer %d", j);
// Create Buffer for Maxpool result workspace
// Maxpool Write data to here
buffer_size = layer_config*layer_config*layer_config*sizeof(float);
data_maxpool_buffer = clCreateBuffer(context, CL_MEM_READ_WRITE, buffer_size, NULL, &status);
checkError(status, "Failed to create buffer to maxpool buffer in layer %d", j);
// Create buffer for data workspace
buffer_size = layer_config * layer_config * layer_config * layer_config * layer_config*sizeof(float);
data_buffer = clCreateBuffer(context, CL_MEM_READ_WRITE, buffer_size, NULL, &status);
checkError(status, "Failed to create buffer to data buffer in layer %d", j);
}
Emulation passed but failed when testing on the board
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Your host program is runned on Win or in ARM SoC ? May you stepping our program in debugger ?
If you know address of violation, 0x000677e8, then may printf() a bytes from this memory region before/after every clCreateBuffer(), printf() the returned addresses and input parameters (sizes), an error (buffer overrun) may be was earlier and become now in last getting heap memory. Good idea is see sources for malloc() in debugger with concrete code and seat of problem.- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, I'm sorry for late reply. So i debug for few days and managed to locate the error, i put a wrong buffer size.
I ran on an ARM SoC, De1Soc. Thanks Witfed.
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page