Pracowałem z OpenCL nad kilkoma projektami, ale zawsze pisałem jądro jako jedną (czasem raczej dużą) funkcję. Teraz pracuję nad bardziej złożonym projektem i chciałbym udostępniać funkcje w kilku jądrach.Jak konstruować duże jądra OpenCL?
Ale przykłady, które mogę znaleźć wszystkie pokazują jądro jako pojedynczy plik (bardzo niewiele wywołaj funkcje dodatkowe). Wygląda na to, że powinno być możliwe korzystanie z wielu plików - clCreateProgramWithSource()
akceptuje wiele ciągów znaków (i łączy je, jak przypuszczam) - chociaż kodpyopencl zajmuje tylko jedno źródło.
Więc chciałbym usłyszeć od kogoś z doświadczeniem w ten sposób:
- Czy są jakieś problemy związane z wielu plików źródłowych?
- Czy najlepszym sposobem obejścia Pyopencl jest po prostu łączenie plików?
- Czy istnieje sposób na skompilowanie biblioteki funkcji (zamiast przekazywania źródła biblioteki dla każdego jądra, nawet jeśli nie wszystkie są używane)?
- Jeśli konieczne jest przekazywanie źródła biblioteki za każdym razem, czy nieużywane funkcje są odrzucane (brak narzutu)?
- Jakieś inne sprawdzone metody/sugestie?
Dzięki.
Możesz utworzyć jeden plik konkatenacji zawierający #include "part1.cl" #include "part2.cl". To działa dla mnie (kompilator NVidia), chociaż prawdopodobnie wszystko jest kompilowane przy każdym uruchomieniu aplikacji. Myślę, że posiadanie biblioteki prekompilowanych funkcji to trochę sci-fi, ponieważ kod funkcji jest wstawiony do każdego jądra (dlatego nie można pisać funkcji rekursywnych). –