LINUX.ORG.RU

cuda: общие шаблоны для host и device кода

 ,


0

1

Есть шаблон класса для доступа к некоторым данным. Все аллокаторы вынесены наружу, так что методы, конструкторы и поля идентичны и для cpu и для gpu экземпляров класса. Когда я подключаю этот шаблон к cuda-коду, то не могу обращаться к методам, так как они «undefined in device code». Как правильно модифицировать шаблон, что бы иметь возможность обращаться к нему из любого кода?

★★★★★

Ответ на: комментарий от Crocodoom

Ага, получается. Сделал макрос:

#ifdef __CUDACC__ 
	#define _attr __host__ __device__
#else
	#define _attr
#endif
и добавил _attr у каждого метода. Костыль конечно, но работает. Интересно, как сделать красиво?..

thunar ★★★★★ ()
Последнее исправление: thunar (всего исправлений: 1)
Ответ на: комментарий от thunar

А всё, я понял. У тебя чистый g++ не брал файлы с __host__ __device__, и ты решил накостылить.

Подключи #include <host_defines.h> и он будет есть эти атрибуты. На самом деле я никогда не подключал конкретно этот хидер напрямую, обычно он автоматом инклюдится из всяких vector_types.h и пр.

Crocodoom ★★ ()