LINUX.ORG.RU

Анонимные массивы в CUDA

 


0

1
__device__ const unsigned int *ff = (const unsigned int[]){90, 50, 100};



Это не работает, потому что анонимный массив размещен в host памяти. Возможно ли в CUDA инициализировать указатель массивом?


Возможно ли в CUDA инициализировать указатель массивом?

А cudaMemcpyToSymbol чем не подходит?

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

мне нужно проинициализировать, а не объявить указатель с последующим копированием значения

kasha
() автор топика
Ответ на: комментарий от Crocodoom

такой вариант не подходит, поскольку мне нужно проинициализировать массив структур, где в структуре несколько членов гибкие массивы

kasha
() автор топика
Ответ на: комментарий от kasha

Это не компилируется даже обычным gcc

test.cpp:7:46: error: braces around scalar initializer for type ‘unsigned int*’
 struct st c[] = {{{1,2},{2,3}}, {{3,6},{8,9}}};
                                              ^

Ты его чем собираешь?

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

это псевдокод, чтоб продемонстрировать идею.

struct st
{
  const unsigned int *a;
  const unsigned int *b;
};

struct st c[] = {{(const unsigned int[]){1,2},(const unsigned int[]){3}}, {(const unsigned int[]){3,6},(const unsigned int[]){8,9,10}}};

int main()
{
}

cc test.c

kasha
() автор топика
Ответ на: комментарий от kasha

Вынеси массивы в отдельные переменные.

struct st                                                                       
{                                                                               
  const unsigned int *a;                                                        
  const unsigned int *b;                                                        
};                                                                              
                                                                                
__device__ const unsigned int a1[] = {1, 2}, b1[] = {3}, a2[] = {3, 6}, b2[] = {8, 9, 10};
__device__ st c[] = {{a1, b1}, {a2, b2}}; 

Я бы и на хосте так писал, чем эти касты от анонимного массива. Но дело вкуса.

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

проблема в том что таких структур несколько, и каждая из них инициализируется массивом с количеством 5000+. но похоже другого выхода нет, чем делать переменные-массивы

kasha
() автор топика
Ответ на: комментарий от kasha

А что это кстати за атрибут памяти — __device__? Никогда с таким не сталкивался.

Синоним __constant__? Или, не дай бог, __global__?

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

подобно к __constant__, но дает доступ на запись

Что значит подобно?:) Раз дает доступ на запись, значит глобальная. То есть синоним __global__

Если твои данные помещаются в константную, то лучше используй её вместо глобальной, она намного эффективнее. Но её всего 64 КБ. А глобальной - гигабайты.

Crocodoom ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.