Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Beginner
62 Views

clSVMAlloc() failure on i5 6500

Hi

We are trying to use Opencl with i5 6500.When we use clSVMAlloc() for SVM over a certain size,it will return failure.The questions as belows:

1. What factor decides the max SVM size ?(The size of host memory ? );

2.How does SVM work on physical storage?

3.How can I get the value of max SVM size on my platform?

regards.

0 Kudos
4 Replies
Highlighted
Employee
62 Views

For 32-bit applications total size available is 4GB due to the 32 bit address range size.

Whenever kernel using SVM allocation is being submitted to the GPU, whole SVM allocation needs to be resident at once, so it cannot be bigger then the total amount of host memory.

Maximal size of SVM allocation can be queried with

clGetDeviceInfo + CL_DEVICE_MAX_MEM_ALLOC_SIZE

0 Kudos
Highlighted
Beginner
62 Views

Michal M. (Intel) wrote:

For 32-bit applications total size available is 4GB due to the 32 bit address range size.

Whenever kernel using SVM allocation is being submitted to the GPU, whole SVM allocation needs to be resident at once, so it cannot be bigger then the total amount of host memory.

Maximal size of SVM allocation can be queried with

clGetDeviceInfo + CL_DEVICE_MAX_MEM_ALLOC_SIZE

typedef struct rnamatrix{
	int i;
	bool flag;  
} rnamatrix;

rnamatrix * matrix_SVM_buffer;
matrix_SVM_buffer=(rnamatrix*)clSVMAlloc(context,CL_MEM_READ_WRITE,rnalen*rnalen*sizeof(rnamatrix),0);
if(matrix_SVM_buffer==NULL)
{
	cout<<"clSVMAlloc() failure!\n";
}  

My program is based on 64-bit and the system is also 64-bit. However,when I set rnalen=5200,the function of clSVMAlloc return NULL.When setting rnalen=4000,it will allocate successful.

I dont know why.Thank u for your attention.Looking forward to your reply.

Regards

 

0 Kudos
Highlighted
Employee
62 Views

Can you share more details :

- What Operating System is used?

- What does clGetDeviceInfo + CL_DEVICE_MAX_MEM_ALLOC_SIZE return ?

- What does clGetDeviceInfo + CL_DEVICE_GLOBAL_MEM_SIZE return ? 

- What are clCreateContext parameters?

- Is it specific to CPU device , does the same problem reproduce on GPU device?

0 Kudos
Highlighted
Beginner
62 Views

Michal M. (Intel) wrote:

Can you share more details :

- What Operating System is used?

- What does clGetDeviceInfo + CL_DEVICE_MAX_MEM_ALLOC_SIZE return ?

- What does clGetDeviceInfo + CL_DEVICE_GLOBAL_MEM_SIZE return ? 

- What are clCreateContext parameters?

- Is it specific to CPU device , does the same problem reproduce on GPU device?

1.OS:Ubuntu 16.04LTS

2.Max memory allocation: 8397942784(7.821GiB)

3.Global memory size: 33591771136(31.28GiB)

4.context = clCreateContext(  NULL,numDevices, devices,  NULL,  NULL,  &status);  PS:numDevices=2 and the devices array has two elements.

5.Yes

0 Kudos