From 877aad693f5bf57f8c37ded9e2acab014a4f039b Mon Sep 17 00:00:00 2001 From: Cedric Nugteren Date: Fri, 29 Apr 2016 23:33:12 +0200 Subject: Added FillCache: a function to pre-compile all kernels for a specific device --- src/clblast.cc | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/clblast_c.cc | 5 +++++ 2 files changed, 67 insertions(+) (limited to 'src') diff --git a/src/clblast.cc b/src/clblast.cc index fe79d7c1..a5bb6b67 100644 --- a/src/clblast.cc +++ b/src/clblast.cc @@ -1857,5 +1857,67 @@ template StatusCode PUBLIC_API Trsm(const Layout, const Side, const Tri // Clears the cache of stored binaries StatusCode ClearCache() { return cache::ClearCache(); } +// Fills the cache with all binaries for a specific device +StatusCode FillCache(const cl_device_id device) { + try { + + // Creates a sample context and queue to match the normal routine calling conventions + auto device_cpp = Device(device); + auto context = Context(device_cpp); + auto queue = Queue(context, device_cpp); + + // Runs all the level 1 set-up functions + Xswap(queue, nullptr).SetUp(); Xswap(queue, nullptr).SetUp(); Xswap(queue, nullptr).SetUp(); Xswap(queue, nullptr).SetUp(); + Xswap(queue, nullptr).SetUp(); Xswap(queue, nullptr).SetUp(); Xswap(queue, nullptr).SetUp(); Xswap(queue, nullptr).SetUp(); + Xscal(queue, nullptr).SetUp(); Xscal(queue, nullptr).SetUp(); Xscal(queue, nullptr).SetUp(); Xscal(queue, nullptr).SetUp(); + Xcopy(queue, nullptr).SetUp(); Xcopy(queue, nullptr).SetUp(); Xcopy(queue, nullptr).SetUp(); Xcopy(queue, nullptr).SetUp(); + Xaxpy(queue, nullptr).SetUp(); Xaxpy(queue, nullptr).SetUp(); Xaxpy(queue, nullptr).SetUp(); Xaxpy(queue, nullptr).SetUp(); + Xdot(queue, nullptr).SetUp(); Xdot(queue, nullptr).SetUp(); + Xdotu(queue, nullptr).SetUp(); Xdotu(queue, nullptr).SetUp(); + Xdotc(queue, nullptr).SetUp(); Xdotc(queue, nullptr).SetUp(); + Xnrm2(queue, nullptr).SetUp(); Xnrm2(queue, nullptr).SetUp(); Xnrm2(queue, nullptr).SetUp(); Xnrm2(queue, nullptr).SetUp(); + Xasum(queue, nullptr).SetUp(); Xasum(queue, nullptr).SetUp(); Xasum(queue, nullptr).SetUp(); Xasum(queue, nullptr).SetUp(); + Xsum(queue, nullptr).SetUp(); Xsum(queue, nullptr).SetUp(); Xsum(queue, nullptr).SetUp(); Xsum(queue, nullptr).SetUp(); + Xamax(queue, nullptr).SetUp(); Xamax(queue, nullptr).SetUp(); Xamax(queue, nullptr).SetUp(); Xamax(queue, nullptr).SetUp(); + Xmax(queue, nullptr).SetUp(); Xmax(queue, nullptr).SetUp(); Xmax(queue, nullptr).SetUp(); Xmax(queue, nullptr).SetUp(); + + // Runs all the level 2 set-up functions + Xgemv(queue, nullptr).SetUp(); Xgemv(queue, nullptr).SetUp(); Xgemv(queue, nullptr).SetUp(); Xgemv(queue, nullptr).SetUp(); + Xgbmv(queue, nullptr).SetUp(); Xgbmv(queue, nullptr).SetUp(); Xgbmv(queue, nullptr).SetUp(); Xgbmv(queue, nullptr).SetUp(); + Xhemv(queue, nullptr).SetUp(); Xhemv(queue, nullptr).SetUp(); + Xhbmv(queue, nullptr).SetUp(); Xhbmv(queue, nullptr).SetUp(); + Xhpmv(queue, nullptr).SetUp(); Xhpmv(queue, nullptr).SetUp(); + Xsymv(queue, nullptr).SetUp(); Xsymv(queue, nullptr).SetUp(); + Xsbmv(queue, nullptr).SetUp(); Xsbmv(queue, nullptr).SetUp(); + Xspmv(queue, nullptr).SetUp(); Xspmv(queue, nullptr).SetUp(); + Xtrmv(queue, nullptr).SetUp(); Xtrmv(queue, nullptr).SetUp(); Xtrmv(queue, nullptr).SetUp(); Xtrmv(queue, nullptr).SetUp(); + Xtbmv(queue, nullptr).SetUp(); Xtbmv(queue, nullptr).SetUp(); Xtbmv(queue, nullptr).SetUp(); Xtbmv(queue, nullptr).SetUp(); + Xtpmv(queue, nullptr).SetUp(); Xtpmv(queue, nullptr).SetUp(); Xtpmv(queue, nullptr).SetUp(); Xtpmv(queue, nullptr).SetUp(); + Xger(queue, nullptr).SetUp(); Xger(queue, nullptr).SetUp(); + Xgeru(queue, nullptr).SetUp(); Xgeru(queue, nullptr).SetUp(); + Xgerc(queue, nullptr).SetUp(); Xgerc(queue, nullptr).SetUp(); + Xher(queue, nullptr).SetUp(); Xher(queue, nullptr).SetUp(); + Xhpr(queue, nullptr).SetUp(); Xhpr(queue, nullptr).SetUp(); + Xher2(queue, nullptr).SetUp(); Xher2(queue, nullptr).SetUp(); + Xhpr2(queue, nullptr).SetUp(); Xhpr2(queue, nullptr).SetUp(); + Xsyr(queue, nullptr).SetUp(); Xsyr(queue, nullptr).SetUp(); + Xspr(queue, nullptr).SetUp(); Xspr(queue, nullptr).SetUp(); + Xsyr2(queue, nullptr).SetUp(); Xsyr2(queue, nullptr).SetUp(); + Xspr2(queue, nullptr).SetUp(); Xspr2(queue, nullptr).SetUp(); + + // Runs all the level 1 set-up functions + Xgemm(queue, nullptr).SetUp(); Xgemm(queue, nullptr).SetUp(); Xgemm(queue, nullptr).SetUp(); Xgemm(queue, nullptr).SetUp(); + Xsymm(queue, nullptr).SetUp(); Xsymm(queue, nullptr).SetUp(); Xsymm(queue, nullptr).SetUp(); Xsymm(queue, nullptr).SetUp(); + Xhemm(queue, nullptr).SetUp(); Xhemm(queue, nullptr).SetUp(); + Xsyrk(queue, nullptr).SetUp(); Xsyrk(queue, nullptr).SetUp(); Xsyrk(queue, nullptr).SetUp(); Xsyrk(queue, nullptr).SetUp(); + Xherk(queue, nullptr).SetUp(); Xherk(queue, nullptr).SetUp(); + Xsyr2k(queue, nullptr).SetUp(); Xsyr2k(queue, nullptr).SetUp(); Xsyr2k(queue, nullptr).SetUp(); Xsyr2k(queue, nullptr).SetUp(); + Xher2k(queue, nullptr).SetUp(); Xher2k(queue, nullptr).SetUp(); + Xtrmm(queue, nullptr).SetUp(); Xtrmm(queue, nullptr).SetUp(); Xtrmm(queue, nullptr).SetUp(); Xtrmm(queue, nullptr).SetUp(); + + } catch (...) { return StatusCode::kBuildProgramFailure; } + return StatusCode::kSuccess; +} + // ================================================================================================= } // namespace clblast diff --git a/src/clblast_c.cc b/src/clblast_c.cc index 172bce64..47ab1798 100644 --- a/src/clblast_c.cc +++ b/src/clblast_c.cc @@ -2348,4 +2348,9 @@ StatusCode CLBlastClearCache() { return static_cast(clblast::ClearCache()); } +// Fills the cache with binaries for a specific device +StatusCode CLBlastFillCache(const cl_device_id device) { + return static_cast(clblast::FillCache(device)); +} + // ================================================================================================= -- cgit v1.2.3