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

Pan, Xiuli xiuli.pan at intel.com
Mon Oct 19 00:16:15 PDT 2015


Ping for review.

-----Original Message-----
From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of Pan Xiuli
Sent: Wednesday, October 14, 2015 4:34 PM
To: beignet at lists.freedesktop.org
Cc: Pan, Xiuli <xiuli.pan at intel.com>
Subject: [Beignet] [PATCH 4/4] runtime: dynamically get global memory size and max alloc size

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