starpu_cuda.h 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /* StarPU --- Runtime system for heterogeneous multicore architectures.
  2. *
  3. * Copyright (C) 2010-2012,2014 Université de Bordeaux
  4. * Copyright (C) 2011 Inria
  5. * Copyright (C) 2010-2013,2015,2017,2019 CNRS
  6. *
  7. * StarPU is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU Lesser General Public License as published by
  9. * the Free Software Foundation; either version 2.1 of the License, or (at
  10. * your option) any later version.
  11. *
  12. * StarPU is distributed in the hope that it will be useful, but
  13. * WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  15. *
  16. * See the GNU Lesser General Public License in COPYING.LGPL for more details.
  17. */
  18. #ifndef __STARPU_CUDA_H__
  19. #define __STARPU_CUDA_H__
  20. /** @defgroup API_CUDA_Extensions CUDA Extensions
  21. @{
  22. */
  23. #include <starpu_config.h>
  24. #if defined STARPU_USE_CUDA && !defined STARPU_DONT_INCLUDE_CUDA_HEADERS
  25. #include <cuda.h>
  26. #include <cuda_runtime.h>
  27. #include <cuda_runtime_api.h>
  28. #ifdef __cplusplus
  29. extern "C"
  30. {
  31. #endif
  32. /** Report a CUBLAS error. */
  33. void starpu_cublas_report_error(const char *func, const char *file, int line, int status);
  34. /** Calls starpu_cublas_report_error(), passing the current function, file and line position.*/
  35. #define STARPU_CUBLAS_REPORT_ERROR(status) starpu_cublas_report_error(__starpu_func__, __FILE__, __LINE__, status)
  36. /** Report a CUDA error. */
  37. void starpu_cuda_report_error(const char *func, const char *file, int line, cudaError_t status);
  38. /** Calls starpu_cuda_report_error(), passing the current function, file and line position.*/
  39. #define STARPU_CUDA_REPORT_ERROR(status) starpu_cuda_report_error(__starpu_func__, __FILE__, __LINE__, status)
  40. /**
  41. Return the current worker’s CUDA stream. StarPU
  42. provides a stream for every CUDA device controlled by StarPU. This
  43. function is only provided for convenience so that programmers can
  44. easily use asynchronous operations within codelets without having to
  45. create a stream by hand. Note that the application is not forced to
  46. use the stream provided by starpu_cuda_get_local_stream() and may also
  47. create its own streams. Synchronizing with <c>cudaThreadSynchronize()</c> is
  48. allowed, but will reduce the likelihood of having all transfers
  49. overlapped.
  50. */
  51. cudaStream_t starpu_cuda_get_local_stream(void);
  52. /** Return a pointer to device properties for worker \p workerid (assumed to be a CUDA worker). */
  53. const struct cudaDeviceProp *starpu_cuda_get_device_properties(unsigned workerid);
  54. /**
  55. Copy \p ssize bytes from the pointer \p src_ptr on \p src_node
  56. to the pointer \p dst_ptr on \p dst_node. The function first tries to
  57. copy the data asynchronous (unless \p stream is <c>NULL</c>). If the
  58. asynchronous copy fails or if \p stream is <c>NULL</c>, it copies the
  59. data synchronously. The function returns <c>-EAGAIN</c> if the
  60. asynchronous launch was successfull. It returns 0 if the synchronous
  61. copy was successful, or fails otherwise.
  62. */
  63. int starpu_cuda_copy_async_sync(void *src_ptr, unsigned src_node, void *dst_ptr, unsigned dst_node, size_t ssize, cudaStream_t stream, enum cudaMemcpyKind kind);
  64. /**
  65. Calls <c>cudaSetDevice(\p devid)</c> or <c>cudaGLSetGLDevice(\p devid)</c>,
  66. according to whether \p devid is among the field
  67. starpu_conf::cuda_opengl_interoperability.
  68. */
  69. void starpu_cuda_set_device(unsigned devid);
  70. #ifdef __cplusplus
  71. }
  72. #endif
  73. #endif /* STARPU_USE_CUDA && !STARPU_DONT_INCLUDE_CUDA_HEADERS */
  74. /** @} */
  75. #endif /* __STARPU_CUDA_H__ */