[Beignet] [PATCH 4/4] runtime: dynamically get global memory size and max alloc size

Zhigang Gong zhigang.gong at linux.intel.com
Thu Oct 22 19:14:37 PDT 2015


LGTM, thx.

On Wed, Oct 14, 2015 at 04:34:07PM +0800, Pan Xiuli wrote:
> Now device and driver can support bigger memory, we need to abandon
> our old 2G hard code. We get global memory by considering device
> limitation, drm driver and kernel support and raw, this will ensure
> a bigger global memory and a more stable system. We get max mem alloc
> size from global memory size and the device limition.
> 
> Signed-off-by: Pan Xiuli <xiuli.pan at intel.com>
> ---
>  src/cl_device_id.c       | 20 +++++++++++++++-----
>  src/intel/intel_driver.c |  5 +++++
>  2 files changed, 20 insertions(+), 5 deletions(-)
> 
> diff --git a/src/cl_device_id.c b/src/cl_device_id.c
> index d92ce95..1c626f8 100644
> --- a/src/cl_device_id.c
> +++ b/src/cl_device_id.c
> @@ -547,14 +547,24 @@ skl_gt4_break:
>  
>    /* Apply any driver-dependent updates to the device info */
>    cl_driver_update_device_info(ret);
> -
> +  #define toMB(size) (size)&(0xfffffffffffffff<<20)
> +  /* Get the global_mem_size and max_mem_alloc size from
> +   * driver, system ram and hardware*/
>    struct sysinfo info;
>    if (sysinfo(&info) == 0) {
> -    uint64_t two_gb = 2 * 1024 * 1024 * 1024ul; 
> +    uint64_t totalgpumem = ret->global_mem_size;
> +	uint64_t maxallocmem = ret->max_mem_alloc_size;
>      uint64_t totalram = info.totalram * info.mem_unit;
> -    ret->global_mem_size = (totalram > two_gb) ? 
> -                            two_gb : info.totalram;
> -    ret->max_mem_alloc_size = ret->global_mem_size / 2;
> +	/* In case to keep system stable we just use half
> +	 * of the raw as global mem */
> +    ret->global_mem_size = toMB((totalram / 2 > totalgpumem) ?
> +                            totalgpumem: totalram / 2);
> +	/* The hardware has some limit about the alloc size
> +	 * and the excution of kernel need some global mem
> +	 * so we now make sure single mem does not use much
> +	 * than 3/4 global mem*/
> +    ret->max_mem_alloc_size = toMB((ret->global_mem_size * 3 / 4 > maxallocmem) ?
> +                              maxallocmem: ret->global_mem_size * 3 / 4);
>    }
>  
>    return ret;
> diff --git a/src/intel/intel_driver.c b/src/intel/intel_driver.c
> index 035a103..782a2de 100644
> --- a/src/intel/intel_driver.c
> +++ b/src/intel/intel_driver.c
> @@ -829,6 +829,11 @@ intel_update_device_info(cl_device_id device)
>    if (IS_CHERRYVIEW(device->device_id))
>      printf(CHV_CONFIG_WARNING);
>  #endif
> +  //We should get the device memory dynamically, but the
> +  //mapablce mem size usage is unknown. Just ignore it.
> +  size_t total_mem,map_mem;
> +  if(drm_intel_get_aperture_sizes(driver->fd,&map_mem,&total_mem) == 0)
> +    device->global_mem_size = (cl_ulong)total_mem;
>  
>    intel_driver_context_destroy(driver);
>    intel_driver_close(driver);
> -- 
> 2.1.4
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list