()
| 63 | /// Searches LD_LIBRARY_PATH, then default system paths. |
| 64 | #[allow(clippy::missing_transmute_annotations)] |
| 65 | pub fn load() -> std::result::Result<Self, String> { |
| 66 | unsafe { |
| 67 | let hip_lib = libloading::Library::new("libamdhip64.so") |
| 68 | .or_else(|_| libloading::Library::new("libamdhip64.so.5")) |
| 69 | .map_err(|e| format!("cannot load libamdhip64: {e}"))?; |
| 70 | |
| 71 | let blas_lib = libloading::Library::new("librocblas.so") |
| 72 | .or_else(|_| libloading::Library::new("librocblas.so.0")) |
| 73 | .map_err(|e| format!("cannot load librocblas: {e}"))?; |
| 74 | |
| 75 | macro_rules! sym { |
| 76 | ($lib:expr, $name:expr) => {{ |
| 77 | let raw: libloading::Symbol<*const std::ffi::c_void> = $lib.get($name) |
| 78 | .map_err(|e| format!("symbol {}: {e}", String::from_utf8_lossy($name)))?; |
| 79 | std::mem::transmute(*raw) |
| 80 | }}; |
| 81 | } |
| 82 | |
| 83 | Ok(Self { |
| 84 | hip_init: sym!(hip_lib, b"hipInit\0"), |
| 85 | hip_get_device_count: sym!(hip_lib, b"hipGetDeviceCount\0"), |
| 86 | hip_set_device: sym!(hip_lib, b"hipSetDevice\0"), |
| 87 | hip_device_get_name: sym!(hip_lib, b"hipDeviceGetName\0"), |
| 88 | hip_malloc: sym!(hip_lib, b"hipMalloc\0"), |
| 89 | hip_free: sym!(hip_lib, b"hipFree\0"), |
| 90 | hip_host_malloc: sym!(hip_lib, b"hipHostMalloc\0"), |
| 91 | hip_host_free: sym!(hip_lib, b"hipHostFree\0"), |
| 92 | hip_memcpy: sym!(hip_lib, b"hipMemcpy\0"), |
| 93 | hip_mem_get_info: sym!(hip_lib, b"hipMemGetInfo\0"), |
| 94 | hip_device_synchronize: sym!(hip_lib, b"hipDeviceSynchronize\0"), |
| 95 | hip_stream_create: sym!(hip_lib, b"hipStreamCreate\0"), |
| 96 | hip_stream_synchronize: sym!(hip_lib, b"hipStreamSynchronize\0"), |
| 97 | hip_memcpy_async: sym!(hip_lib, b"hipMemcpyAsync\0"), |
| 98 | |
| 99 | rocblas_create_handle: sym!(blas_lib, b"rocblas_create_handle\0"), |
| 100 | rocblas_destroy_handle: sym!(blas_lib, b"rocblas_destroy_handle\0"), |
| 101 | rocblas_set_stream: sym!(blas_lib, b"rocblas_set_stream\0"), |
| 102 | rocblas_sgemm: sym!(blas_lib, b"rocblas_sgemm\0"), |
| 103 | rocblas_sgemm_strided_batched: sym!(blas_lib, b"rocblas_sgemm_strided_batched\0"), |
| 104 | |
| 105 | _hip_lib: hip_lib, |
| 106 | _blas_lib: blas_lib, |
| 107 | }) |
| 108 | } |
| 109 | } |
| 110 | } |
no outgoing calls
no test coverage detected