Java, метод для закрепления и выравнивания массива

Могу ли я создать целочисленный массив с определенным выравниванием и остановить его перемещение?

 int [] arr = stopGcAndPageAlign(new int[1024]);
 or
 int [] arr = pin(align(new int[1024],4096));

так что я могу использовать его как источник программы opencl, используя USE_HOST_PTR(для этого требуется выравнивание страницы или какое-то большое число, например 4096-alignment)

Когда я создаю массив длиной 4M, он имеет высокую вероятность хорошего выравнивания, но когда массив короче, он выравнивается и opencl терпит неудачу.

Мне нужен метод, чтобы получить простой массив Java, а затем сделать его закрепленным и выровненным (как в прямом байтовом буфере), не заходя в JNI. Стоит ли вместо этого оборачивать прямой байтовый буфер как неуправляемый массив Java? (Но это будет сложнее, может быть?)

В C# есть вариант с маршалом, может быть, у java есть что-то похожее?

Могу ли я сказать GC прекратить управление этим и перейти в какое-нибудь пустое / выровненное место для меня?

Может ли код ниже работать всегда?

  // can java move the second array right at ending of first one or starting of next page?
  public class MyAlignedArrayWrapper
  {
       public int [] alignerArray;
       public int [] alignedArray;
       public MyAlignedArrayWrapper()
       {
              alignerArray=new int[1024*1024*32]; // forces below alignment
              alignedArray=new int[113];          // so this is page aligned
                                                  // at least
       }

       public int[] getArray()
       {
             return alignedArray;
       }
  }

Я думаю, что некоторые ребята из Java отчаянно ждут этого, чтобы добавить еще большую скорость своим приложениям, но без необходимости использовать больше памяти, чем требуется для заполнения.

0 ответов

Другие вопросы по тегам