Как объявить массив фиксированного размера в ядре Cudafy GPU

Я хочу сделать это в ядре:

int count[8];

Я почти уверен, что вы можете объявлять массивы фиксированного размера в ядрах CUDA GPU. Так как же мне поступить так, используя Cudafy? Это не работает:

[Cudafy]
public static void kernelFunction(int[] input, int[] output)
{
int count[8];
// ....other stuff
}

Приведенный выше код приводит к ошибке C #: «Невозможно указать размер массива в объявлении переменной (попробуйте выполнить инициализацию с помощью выражения« new »)».

2

Решение

Согласно форумам Cudafy.NET и по состоянию на 20.03.2014, это в настоящее время не поддерживается. Поэтому я добавил этот ответ, чтобы облегчить будущим людям бесполезный поиск решения. Нить, где указано выше, Вот.

Обратите внимание, что человек в цепочке, который предлагает правильный способ сделать это — использовать разделяемую память, не прав. Вы можете объявить массивы фиксированного размера в ядрах графического процессора, Cudafy в настоящее время просто не поддерживает его. Общая память предназначена для увеличения области видимости переменных, чтобы все потоки в блоке имели к ним доступ. Он также действует как резервное место для хранилища переменных, когда хранилище реестра заполнено. Указывать, что разделяемая память является единственным местом для объявлений массива, неверно.

2

Другие решения

В C#, вы бы сделали что-то вроде этого:

int[] count = new int[8];

Или если вы используете unsafe код, вы также можете создать буферы фиксированного размера:

fixed int count[8];
0

По вопросам рекламы [email protected]