|
10 | 10 |
|
11 | 11 | from cuda.bindings import nvvm
|
12 | 12 |
|
13 |
| -if True: # Trick to stop ruff from moving these. |
14 |
| - import glob |
15 |
| - import os |
16 |
| - import pathlib |
17 |
| - |
18 |
| - |
19 |
| -def get_proc_self_maps_paths(): |
20 |
| - paths = set() |
21 |
| - with open("/proc/self/maps") as f: |
22 |
| - for line in f: |
23 |
| - parts = line.strip().split(maxsplit=5) |
24 |
| - if len(parts) == 6: |
25 |
| - path = parts[5] |
26 |
| - if path.startswith("/"): |
27 |
| - paths.add(path) |
28 |
| - return tuple(sorted(paths)) |
29 |
| - |
30 |
| - |
31 |
| -def find_libnvvm_so_in_dir(dirpath): |
32 |
| - if not os.path.isdir(dirpath): |
33 |
| - return None |
34 |
| - longest_so_path = "" |
35 |
| - for so_path in sorted(glob.glob(f"{dirpath}/libnvvm.so*")): |
36 |
| - if len(so_path) > len(longest_so_path) and os.path.isfile(so_path): |
37 |
| - longest_so_path = so_path |
38 |
| - return longest_so_path if longest_so_path else None |
39 |
| - |
40 |
| - |
41 |
| -def find_libnvvm_so_via_proc_self_maps(): |
42 |
| - # Traverse /proc/self/maps to look for one of these: |
43 |
| - # **/lib/nvvm/lib64/libnvvm.so* |
44 |
| - # **/site-packages/nvidia/cuda_nvcc/nvvm/lib64/libnvvm.so* |
45 |
| - # using "lib" or "site-packages" as anchor points. |
46 |
| - dirs_inspected = set() |
47 |
| - for maps_path in get_proc_self_maps_paths(): |
48 |
| - dir_parts = pathlib.Path(maps_path).parts[1:-1] # Strip leading slash and filename. |
49 |
| - if dir_parts not in dirs_inspected: |
50 |
| - for ix in range(len(dir_parts), 0, -1): |
51 |
| - parent_dir = dir_parts[:ix] |
52 |
| - if parent_dir in dirs_inspected: |
53 |
| - continue |
54 |
| - dirs_inspected.add(parent_dir) |
55 |
| - if parent_dir[-1] == "lib": |
56 |
| - trialdir = parent_dir[:-1] + ("nvvm", "lib64") |
57 |
| - elif parent_dir[-1] == "site-packages": |
58 |
| - trialdir = parent_dir + ("nvidia", "cuda_nvcc", "nvvm", "lib64") |
59 |
| - else: |
60 |
| - continue |
61 |
| - so_path = find_libnvvm_so_in_dir(os.sep + os.sep.join(trialdir)) |
62 |
| - if so_path is not None: |
63 |
| - return so_path |
64 |
| - return None |
65 |
| - |
66 |
| - |
67 |
| -so_path = find_libnvvm_so_via_proc_self_maps() |
68 |
| -print(f"\nfind_libnvvm_so_via_proc_self_maps() {so_path=}", flush=True) |
69 |
| -if so_path is not None: |
70 |
| - import ctypes |
71 |
| - |
72 |
| - ctypes.CDLL(so_path) |
73 |
| - |
74 |
| - |
75 | 13 | MINIMAL_NVVMIR_TXT = b"""\
|
76 | 14 | target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-i128:128:128-f32:32:32-f64:64:64-v16:16:16-v32:32:32-v64:64:64-v128:128:128-n16:32:64"
|
77 | 15 |
|
|
0 commit comments