Вопрос по c, visual-studio – Как набрать тип char * в int * в openCL

3

Может кто-нибудь сказать мне, как типизироватьchar* указатель наint* в функции ядра OpenCL ?? Я старался((int*) char_pointer) Но это не работает.

я знаю, что на это ответили & amp; принято, но из интереса, вы * имеете в виду, что вы хотите хранить 4 байта по адресуallocatedBuf какint ? violet313
Параметры сборки: -fno-strict-aliasing Ошибка: Ошибка программы :: build (). Код ошибки: CL_INVALID_BUILD_OPTIONS sahil
/tmp/OCLqZ3crS.cl(710): ошибка: недопустимое преобразование типов a [0] = * ((int *) allocBuf); allocBuf имеет тип global char * sahil
Убедитесь, что вы отключили строгое псевдонимы в компиляторе, такая операция не разрешена из-за строгого правила псевдонимов, но в большинстве компиляторов вы можете отключить его. Let_Me_Be
Какую ошибку вы получаете? user1202136

Ваш Ответ

2   ответа
0

инициализируйте с помощью char *, используйте его с int *:

 union {
     char *cp;
     int  *ip;
 } ptr;

 ptr.cp = allocatedBuf;
 a[0] = *(ptr.ip);

Ужасно, но разве трюк без приведения, по крайней мере, в C. Это неопределенное поведение, но, эй, вы не используете это в кардиомониторе или с ядерными боеголовками на другом конце, верно?

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededcanError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
11

вы должны квалифицировать указатель с правильным адресным пространством.

Если вы не указали адресное пространство,__private предполагается, но ваш указатель источника, кажется,__global указатель (из вашего комментария), поэтому адресные пространства несовместимы.

Так что попробуйте использовать(__global int*) вместо просто(int*).

Error: User Rate Limit Exceeded sahil

Похожие вопросы