-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
225 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
/* StarPU --- Runtime system for heterogeneous multicore architectures. | ||
* | ||
* Copyright (C) 2010-2024 University of Bordeaux, CNRS (LaBRI UMR 5800), Inria | ||
* | ||
* StarPU is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU Lesser General Public License as published by | ||
* the Free Software Foundation; either version 2.1 of the License, or (at | ||
* your option) any later version. | ||
* | ||
* StarPU is distributed in the hope that it will be useful, but | ||
* WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
* | ||
* See the GNU Lesser General Public License in COPYING.LGPL for more details. | ||
*/ | ||
|
||
#ifndef __STARPU_CUBLASLT_H__ | ||
#define __STARPU_CUBLASLT_H__ | ||
|
||
#ifdef STARPU_USE_CUDA | ||
#include <cublasLt.h> | ||
#endif | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
/** | ||
@ingroup API_CUDA_Extensions | ||
@{ | ||
*/ | ||
|
||
/** | ||
Initialize CUBLASLT on every CUDA device | ||
controlled by StarPU. This call blocks until CUBLASLT has been properly | ||
initialized on every device. See \ref CUDA-specificOptimizations for more details. | ||
*/ | ||
void starpu_cublasLt_init(void); | ||
|
||
/** | ||
Synchronously deinitialize the CUBLASLT library on | ||
every CUDA device. See \ref CUDA-specificOptimizations for more details. | ||
*/ | ||
void starpu_cublasLt_shutdown(void); | ||
|
||
#ifdef STARPU_USE_CUDA | ||
/** | ||
Return the CUBLASLT handle to be used to queue CUBLASLT | ||
kernels. It is properly initialized and configured for multistream by | ||
starpu_cublasLt_init(). See \ref CUDA-specificOptimizations for more details. | ||
*/ | ||
cublasLtHandle_t starpu_cublasLt_get_local_handle(void); | ||
#endif | ||
|
||
/** @} */ | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
|
||
#endif /* __STARPU_CUBLASLT_H__ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
/* StarPU --- Runtime system for heterogeneous multicore architectures. | ||
* | ||
* Copyright (C) 2009-2024 University of Bordeaux, CNRS (LaBRI UMR 5800), Inria | ||
* | ||
* StarPU is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU Lesser General Public License as published by | ||
* the Free Software Foundation; either version 2.1 of the License, or (at | ||
* your option) any later version. | ||
* | ||
* StarPU is distributed in the hope that it will be useful, but | ||
* WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
* | ||
* See the GNU Lesser General Public License in COPYING.LGPL for more details. | ||
*/ | ||
|
||
#include <common/config.h> | ||
|
||
#include <starpu.h> | ||
#include <starpu_cuda.h> | ||
#include <core/workers.h> | ||
|
||
#ifdef STARPU_HAVE_LIBCUBLASLT | ||
#include <cublasLt.h> | ||
|
||
static cublasLtHandle_t cublasLt_handles[STARPU_NMAXWORKERS]; | ||
static cublasLtHandle_t main_handle; | ||
|
||
static void init_cublasLt_func(void *args STARPU_ATTRIBUTE_UNUSED) | ||
{ | ||
cublasLtCreate(&cublasLt_handles[starpu_worker_get_id_check()]); | ||
// No need for setting streams, because the cublasLt handles are not along with streams | ||
} | ||
|
||
static void shutdown_cublasLt_func(void *args STARPU_ATTRIBUTE_UNUSED) | ||
{ | ||
cublasLtDestroy(cublasLt_handles[starpu_worker_get_id_check()]); | ||
} | ||
#endif | ||
|
||
void starpu_cublasLt_init(void) | ||
{ | ||
#ifdef STARPU_HAVE_LIBCUBLASLT | ||
if (!starpu_cuda_worker_get_count()) | ||
return; | ||
starpu_execute_on_each_worker_ex(init_cublasLt_func, NULL, STARPU_CUDA, "init_cublasLt"); | ||
|
||
if (cublasLtCreate(&main_handle) != CUBLAS_STATUS_SUCCESS) | ||
main_handle = NULL; | ||
#endif | ||
} | ||
|
||
void starpu_cublasLt_shutdown(void) | ||
{ | ||
#ifdef STARPU_HAVE_LIBCUBLASLT | ||
if (!starpu_cuda_worker_get_count()) | ||
return; | ||
starpu_execute_on_each_worker_ex(shutdown_cublasLt_func, NULL, STARPU_CUDA, "shutdown_cublasLt"); | ||
|
||
if (main_handle) | ||
cublasLtDestroy(main_handle); | ||
#endif | ||
} | ||
|
||
#ifdef STARPU_HAVE_LIBCUBLASLT | ||
cublasLtHandle_t starpu_cublasLt_get_local_handle(void) | ||
{ | ||
if (!starpu_cuda_worker_get_count()) | ||
return NULL; | ||
int workerid = starpu_worker_get_id(); | ||
if (workerid >= 0) | ||
return cublasLt_handles[workerid]; | ||
else | ||
return main_handle; | ||
} | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
/* StarPU --- Runtime system for heterogeneous multicore architectures. | ||
* | ||
* Copyright (C) 2009-2024 University of Bordeaux, CNRS (LaBRI UMR 5800), Inria | ||
* | ||
* StarPU is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU Lesser General Public License as published by | ||
* the Free Software Foundation; either version 2.1 of the License, or (at | ||
* your option) any later version. | ||
* | ||
* StarPU is distributed in the hope that it will be useful, but | ||
* WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
* | ||
* See the GNU Lesser General Public License in COPYING.LGPL for more details. | ||
*/ | ||
|
||
#include <stdio.h> | ||
#include <unistd.h> | ||
#include <errno.h> | ||
#include <starpu.h> | ||
#include <stdlib.h> | ||
#include "../helper.h" | ||
|
||
/* | ||
* Test initializing cublasLt, and how much time that takes | ||
*/ | ||
|
||
static double start; | ||
static double end; | ||
|
||
//static float *data = NULL; | ||
|
||
int main(int argc, char **argv) | ||
{ | ||
int ret; | ||
|
||
ret = starpu_initialize(NULL, &argc, &argv); | ||
if (ret == -ENODEV) return STARPU_TEST_SKIPPED; | ||
STARPU_CHECK_RETURN_VALUE(ret, "starpu_init"); | ||
|
||
unsigned ngpus = starpu_cuda_worker_get_count(); | ||
|
||
double init_timing; | ||
double shutdown_timing; | ||
|
||
start = starpu_timing_now(); | ||
starpu_cublasLt_init(); | ||
end = starpu_timing_now(); | ||
init_timing = end - start; | ||
|
||
start = starpu_timing_now(); | ||
starpu_cublasLt_shutdown(); | ||
end = starpu_timing_now(); | ||
shutdown_timing = end - start; | ||
|
||
FPRINTF(stderr, "Total:\n"); | ||
FPRINTF(stderr, "\tinit: %2.2f ms\n", init_timing/(1000)); | ||
FPRINTF(stderr, "\tshutdown: %2.2f ms\n", shutdown_timing/(1000)); | ||
|
||
if (ngpus != 0) | ||
{ | ||
FPRINTF(stderr, "per-GPU (#gpu = %u):\n", ngpus); | ||
|
||
FPRINTF(stderr, "\tinit: %2.2f ms\n", init_timing/(1000*ngpus)); | ||
FPRINTF(stderr, "\tshutdown: %2.2f ms\n", shutdown_timing/(1000*ngpus)); | ||
} | ||
|
||
starpu_shutdown(); | ||
|
||
return EXIT_SUCCESS; | ||
} |