В исходном коде кофейных (филиал OpenCL), иногда я могу увидеть некоторые, как они (например, в И/кофейный/слои/base_conv_layer.cpp линии 400.):OpenCL: преобразование из «флоит *» до «» cl_mem
void func(cl_mem a, ...)
{...}
void func2(float* a, ...)
{
...
func((cl_mem) a, ...);
...
}
Я думаю, что это действительно странно, поэтому я искал его, но ничего не получил об этом.
Тогда я написал простой тестовый код, чтобы выяснить, что случилось, но я нашел, что это преобразование не имеет смысла:
std::cout << long((void*)a) << " " << long((void*)(cl_mem(a))) << std::endl;
Их значение такое же!
Так что мой вопрос в том, почему это преобразование не вызывает проблем в caffe opencl? Что произошло в этом преобразовании?
'(cl_mem) a' является литой, а не конверсией. – simpel01
@ simpel01 Спасибо за замечание! Таким образом, на самом деле этот актер не делает ничего особенного, а данные в памяти не меняются. Но почему этот актер работал в caffe opencl? Как я знаю, cl_mem и float * довольно разные. Есть ли уловка, чтобы заставить ее работать? Благодарю. – wasd96040501