Может ли Alea Gpu просто скопировать последний элемент в массиве? - PullRequest
1 голос
/ 27 марта 2020

Я использую Alea GPU для программирования на GPU с использованием языка C#. В моем проекте я хочу уменьшить все нулевые элементы в массиве на графическом процессоре, поэтому я планирую использовать исключительную сумму сканирования для его реализации. Следующим шагом является получение последнего элемента результатов сканирования, чтобы найти все ненулевые элементы в алгоритме. На этом этапе я не хочу копировать все результаты на хост, потому что это очень дорого, но мне не удается найти метод для извлечения последнего элемента без копирования всех элементов (может быть, есть способ, которого я не знаю?) .

Вот мой код в моей части сканирования. d_voxeOccupy - это массив sprase на устройстве. Что я должен сделать, чтобы получить последний элемент d_voxeOccupyScan ?

    var op = new Func<int, int, int>((a, b) => { return a + b; });
    Alea.Session session = new Alea.Session(gpu);
    var d_voxeOccupyScan = gpu.Allocate<int>(numVoxels);
    GpuExtension.Scan<int>(session, d_voxeOccupyScan, d_voxeOccupy, 0, op, 0);

=== ОБНОВЛЕНИЕ ===

Я сделал пример, чтобы ясно объяснить эту проблему.

        static void Main(string[] args)
        {
            int[] arrayA = new int[14]{ 0, 0, 3, 0, 0, 6, 0, 9, 0, 12, 0, 0, 0, 15 };

            var gpu = Gpu.Default;
            var op = new Func<int, int, int>((a, b) => { return a + b; });
            Alea.Session session = new Alea.Session(gpu);
            var d_voxeOccupyScan = gpu.AllocateDevice<int>(14);
            var d_voxeOccupy = gpu.AllocateDevice<int>(arrayA);
            GpuExtension.Scan<int>(session, d_voxeOccupyScan.Ptr, d_voxeOccupy.Ptr, 0, 14,op, 0);

            var result = Gpu.CopyToHost(d_voxeOccupyScan);
            foreach (var item in result)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }

Запустите этот код, мы получим массив, последний элемент 45. Как извлечь последний элемент из этого массива, а не копировать все элементы?

...