2011-09-12 12 views
9

Czy istnieje sposób używania wskaźników funkcyjnych w stylu C w OpenCL?Czy opencl obsługuje wskaźniki funkcji?

Innymi słowy, chciałbym wypełnić strukturę OpenCL kilkoma wartościami, a także wskazówki do funkcji OpenCL. Nie mówię o przejściu z funkcji procesora do funkcji GPU, mówię o przejściu z funkcji GPU do funkcji GPU.

Czy to możliwe?

--- EDIT ---

Jeśli nie, to istnieje sposób obejścia tego? W CUDA mamy dziedziczenie obiektów, aw wersji 4.0 mamy nawet funkcje wirtualne. O jedynym sposobie, w jaki mogę znaleźć implementację wyskakującego środowiska wykonawczego, jest uciekanie się do instrukcji if, a stanie się to bardzo brzydkie.

+1

Według mojej najlepszej wiedzy odpowiedź brzmi: nie. Spróbuję wydobyć odniesienie – Flexo

Odpowiedz

11

Z OpenCL 1.1 specification:

sekcji 6.8 (ograniczenia) (a):

Zastosowanie wskaźników jest nieco ograniczona. Stosuje się następujące zasady:

  • argumentów do jądra funkcje zadeklarowane w programie, które są wskaźnikami musi być zadeklarowana z __Global, __constant lub __local kwalifikacjach.
  • wskaźnik zadeklarowana z __constant, __local lub __Global kwalifikatorem może być przypisany tylko do wskaźnika deklarowanej z __constant, __local lub __Global kwalifikatorem odpowiednio.
  • Wskaźniki funkcji nie są dozwolone.

Zwykle używam tego do pracy z makrami. Zło, ale obecnie nieuniknione. Więc zazwyczaj kończy się z czymś takim:

#define FEATURENAME_START impl1_start 
#define FEATURENAME_END impl1_end 

I wtedy albo wstrzyknąć to do jądra podczas kompilacji lub przekazać go jako argument do kompilator OpenCL. Nie jest to całkiem normalne środowisko uruchomieniowe w zwykłym tego słowa znaczeniu, ale może to być środowisko uruchomieniowe z perspektywy hosta, nawet jeśli nie jest to urządzenie.

3

AMD ma plany na przyszłe wsparcie sprzętowe, więc mogą istnieć przyszłe rozszerzenia.