Я хочу сделать это в ядре:
int count[8];
Я почти уверен, что вы можете объявлять массивы фиксированного размера в ядрах CUDA GPU. Так как же мне поступить так, используя Cudafy? Это не работает:
[Cudafy]
public static void kernelFunction(int[] input, int[] output)
{
int count[8];
// ....other stuff
}
Приведенный выше код приводит к ошибке C #: «Невозможно указать размер массива в объявлении переменной (попробуйте выполнить инициализацию с помощью выражения« new »)».
Согласно форумам Cudafy.NET и по состоянию на 20.03.2014, это в настоящее время не поддерживается. Поэтому я добавил этот ответ, чтобы облегчить будущим людям бесполезный поиск решения. Нить, где указано выше, Вот.
Обратите внимание, что человек в цепочке, который предлагает правильный способ сделать это — использовать разделяемую память, не прав. Вы можете объявить массивы фиксированного размера в ядрах графического процессора, Cudafy в настоящее время просто не поддерживает его. Общая память предназначена для увеличения области видимости переменных, чтобы все потоки в блоке имели к ним доступ. Он также действует как резервное место для хранилища переменных, когда хранилище реестра заполнено. Указывать, что разделяемая память является единственным местом для объявлений массива, неверно.
В C#
, вы бы сделали что-то вроде этого:
int[] count = new int[8];
Или если вы используете unsafe
код, вы также можете создать буферы фиксированного размера:
fixed int count[8];