0

すでにJavaで書かれたプログラムにGPU計算を実装しています。その目的のために、私はjcudaバインディングを使用しています。場合によっては、比較的大きなアレイのデバイスへの高速なホストメモリ転送が必要です。ストリームを使用する場合は、固定メモリを使用する必要があります。問題は、cca 600 MbsのRAMを超えるホストに固定されたメモリを割り当てたい場合、「CUDA_ERROR_OUT_OF_MEMORY」例外が発生することです。これは、使用可能な固定メモリのサイズをテストするために使用したコードです。

    public static void main(String[] args) {
    //Init GPU
    JCudaDriver.setExceptionsEnabled(true);

    // Initialize the device and create device context
    cuInit(0);
    CUdevice device = new CUdevice();
    cuDeviceGet(device, 0);
    CUcontext context = new CUcontext();
    cuCtxCreate(context, 0, device);

    Pointer p = new Pointer();

    int Kb = 1024;
    int Mb = 1024 * Kb;
    int Gb = 1024 * Mb;
    int sequenceSize = 172*Mb; // times 4 for float
    float[] expecteds = new float[sequenceSize];
    float[] actuals = new float[sequenceSize];
    Arrays.fill(expecteds, 3.33f);
    int i = 0;
    try {
        JCudaDriver.cuMemAllocHost(p, sequenceSize* Sizeof.FLOAT);
        FloatBuffer fb = p.getByteBuffer(0, sequenceSize* Sizeof.FLOAT).
                order(ByteOrder.nativeOrder()).
                asFloatBuffer();

        fb.position(0);
        fb.put(expecteds);
        fb.position(0);
        fb.get(actuals);
        JCudaDriver.cuMemFreeHost(p);

    } catch (Exception e) {
        e.printStackTrace();
        JCudaDriver.cuMemFreeHost(p);
    }

}

現在、OSはページングできないため、固定されたメモリを使いすぎるのを防ぐことができることを認識しています。問題は、私には48Gb(45Gbの空き容量)の物理メモリがあり、OSにそれをもっと与えるように強制する方法が必要なことです。これを行う方法はありますか(可能であればエレガントに)?

編集:OSは64ビットのWindows 7ProfessionalSP1です

4

2 に答える 2

1

Java を 64 ビット モードで実行していることを確認します。FAQは、64 ビットのダウンロードであっても、デフォルトは 32 ビットであることを示唆しています。リンクされた FAQ には、64 ビット モードで実行する方法も記載されています。64 ビット DLL なども使用する必要があります。

cuMemHostRegister()/cuMemHostUnregister()を使用してメモリの小さなセクションを固定するという@ArchaeSoftwareの提案は、賢明な代替手段です。

于 2012-09-13T19:51:11.410 に答える
0

古いページのようですが、回答がありません..デフォルトでは、Javaはヒープ自体に多くのメモリを割り当てないため、RAMを適切に使用していないと思います。それぞれ -Xms と -Xmx によって、JVM に最小メモリと最大メモリを強制的に使用させることができます。64 ビット アーキテクチャで作業しているので、「-Xms」または「-Xmx」の後に「-d64」を使用します。

于 2013-02-22T10:05:51.360 に答える