Адрес функции в CUDA

Доброго времени суток, коллеги. Возник такой вопрос: прочел в доках, что нельзя получить адрес _device_ функций, так как они находятся в видеопамяти и выполняются на gpu. Так вот - может быть можно их получить из самих _device_ / _global_ функций? ... впрочем тут какие-то непонятки с параллельным выполнением нитей получаются.
Если нельзя, то как можно реализовать вычисление разных формул взависимости от значения переменной? (Поясню - предполагалось сделать несколько функций, забить их адреса в массив и потом по индексу-номеру функции ее вызывать - не хочется делать много if'ов) Пишу нейросеть и загвоздка как раз в необходимости вызова разных функций активации для разных слоёв. Кто как стал бы решать такую задачу?

Forums: 

хе хе по-моему слишком сложно для видяхи

по-моему как не крути что с адрессами ф-ций что с if
столкнешься с проблемой ветвления

я так понимаю для нвидиа желательно чтоб в пределах варпа или полу-варпа ветвления не было
тогда ветвления не будут сказываться на скорость
иначе будет так
if ()
инструкции 1 2 3 4 5
else
инструкции 6 7 8 9 10

на видяхе выполниться
сначала все нити
инструкции 1 2 3 4 5
потом
инструкции 6 7 8 9 10

Да, этого я и боялся. Хотя

Да, этого я и боялся. Хотя даже учитывая этот факт все равно на видюхе быстрей должно работать

я реализовывал что-то

я реализовывал что-то похожее, а именно:
расчет значений функции n перменных, которая вводилась с командной строки.
что-то типа:
calcfunc -f 'f(x0,x1,x2) = some_expr(x0,x1,x2)' -out filename.dat ... (интервалы и шаги для переменных xi и прочие параметры)
где some_expr() некоторое мат. выражение.
поддерживались:
- простые мат. выражения (+, -, *, /, ^)
- функции: sqrt(), sin(), pow(), ...
- ветвления: if (cond, expr0, expr1)
(для cond поддержка булевой логики)
- интегралы

может что-то еще было.

оно?

Хмм... у меня заранее

Хмм... у меня заранее определенный набор формул.
Поправка к предыдущим комментам - все нити будут работать над одним и тем же слоем нейронов, то есть функция активации у них все-таки общая. После окончания работы над слоем и синхронизации - переход к следующему слою (возможно уже с другой функцией). Вобщем одновременно разные функции в нитях и не должны выполняться.
Прямо сейчас пришла в голову мысль - если сделать выбор функции через if - быть может и не будет задержек на выполнение обеих ветвей (ведь у всех нитей выбор будет одинаков)?

.

если все нити выберут один и тот же путь выполнения при ветвлении, то конечно они все будут выполнять один и тот же код одновременно.

я, к сожалению, не знаком с теорией нейро-сетей, так что мне не особо понятны понятия слой, функция-активации, и пр. и тем более как организовать требуемые вам вычисления.