Почему ядро ​​Aparapi, работающее на GPU AMD, допускает очень большие массивы @Local, но не с Nvidia? - PullRequest
1 голос
/ 22 октября 2019

У меня есть Java-программа, которой нужен доступ к большому массиву из локальной памяти графического процессора. Я могу объявить и получить доступ к большому массиву с помощью '@Local float [] mem = new float [1000000];'используя Aparapi на ноутбуке с графическим процессором AMD Radeon, он работает отлично, но когда я пытаюсь сделать то же самое на ноутбуке с Nvidia GeForce 1660 Ti, я получаю ошибку нехватки ресурсов в OpenCl. Карта Nvidia имеет 3 гигабайта совместно используемой памяти, поэтому я подумал, что у нее не должно быть проблем, но, очевидно, нет.

Я искал решение проблемы с Google уже несколько часов, но не могунайти любые соответствующие документы.

Вот код, который инициализирует память ядра:

public class MemoryKernel extends Kernel {

    /** Working memory - each worker gets its own individual area of fixed memory.  It is 
     * protected so that the test cases can access it. */
    @Local protected final float[] mem;


    /** Memory size in blocks  */
    final int memSize;

    /** Size of a block of memory */
    final int blockSize;

    /** Number of worker items */
    int workGroupSize;

    /** A small buffer for testing purposes */
    final float[] buf;

    public MemoryKernel(int blockSize, int memSizeInBlocks, int workGroupSize) {
        this.memSize = memSizeInBlocks;
        this.blockSize = blockSize;
        // A typical initialisation is 17 * 50 * 1000
        mem = new float[memSizeInBlocks * blockSize * workGroupSize];
        initMem(workGroupSize);

        // A small buffer accessed only by the test cases in the gputrace.test package for testing
        // the ray tracer's functions
        buf = new float[blockSize];
        setExplicit(true);
        put(buf);
    }
...
...