Я пытаюсь преобразовать ядро, написанное для 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);
Я что-то не хватает? Есть ли способ выделить несколько массивов в разделяемой памяти в Алее?
Спасибо Сян. Итак, что вы говорите, так это то, что вызов методов на совместном действии каждый раз создает новое распределение? Я предполагаю, что это сбивало с толку, потому что для запуска требуется указать объем разделяемой памяти. – Wil
'__shared __. Array2D' используется для создания массива фиксированного размера времени компиляции. Длины этого измерения должны определяться во время компиляции. Пока вы говорите о динамической памяти осколков, которая выделяется во время запуска. Для этого нужен другой API '__shared __. ExternArray();', и это поддерживает только 1 размерную линейную память. Если вам нужно сделать 2D, вам нужно рассчитать линейный адрес. Пожалуйста, проверьте [здесь] (http://quantalea.com/static/app/manual/programming_gpus-using_gpu_memories.html) на примере использования динамической общей памяти. –
'__shared __. Array2D' на самом деле является _defining_ массивом фиксированного размера ядра, это не означает распределения времени выполнения. Если вам нужен внешний массив, вам нужно _declare_ его в ядре через '__shared __. ExternArray', а затем вы укажете количество общего массива в' LaunchParam'. –