2015-11-05 5 views
0

Я пытаюсь преобразовать ядро, написанное для Cudafy, в Alea. Cudafy позволяет выделять несколько массивов разных типов в общей памяти. Пример:Как распределить несколько массивов в общей памяти

int[,] paths = thread.AllocateShared<int>("path", 128, 9); 
float[] best = thread.AllocateShared<float>("best", 128); 

Кажется, что в Alea вы можете выделить только один массив в общей памяти. Я вижу только следующее:

var lp = new LaunchParam(128, 128, 1024); 
... 
int[,] paths = __shared__.Array2D<int>(128, 9); 

Я что-то не хватает? Есть ли способ выделить несколько массивов в разделяемой памяти в Алее?

ответ

0

__shared__.Array2D используется в ядре для определения 2D массива с фиксированным размером времени компиляции. Он не может использоваться вне ядра. Вот несколько примеров: https://github.com/quantalea/AleaGPUTutorial/blob/master/src/csharp/examples/matrix_multiplication/MatrixMult.cs#L52

+0

Спасибо Сян. Итак, что вы говорите, так это то, что вызов методов на совместном действии каждый раз создает новое распределение? Я предполагаю, что это сбивало с толку, потому что для запуска требуется указать объем разделяемой памяти. – Wil

+0

'__shared __. Array2D' используется для создания массива фиксированного размера времени компиляции. Длины этого измерения должны определяться во время компиляции. Пока вы говорите о динамической памяти осколков, которая выделяется во время запуска. Для этого нужен другой API '__shared __. ExternArray ();', и это поддерживает только 1 размерную линейную память. Если вам нужно сделать 2D, вам нужно рассчитать линейный адрес. Пожалуйста, проверьте [здесь] (http://quantalea.com/static/app/manual/programming_gpus-using_gpu_memories.html) на примере использования динамической общей памяти. –

+0

'__shared __. Array2D' на самом деле является _defining_ массивом фиксированного размера ядра, это не означает распределения времени выполнения. Если вам нужен внешний массив, вам нужно _declare_ его в ядре через '__shared __. ExternArray', а затем вы укажете количество общего массива в' LaunchParam'. –