创建cuda上下文管理器失败

问题描述 投票:1回答:1

我正在用PhysiX实现流体模拟器。不幸的是,cuda上下文管理器出了问题,我无法识别它是什么。我有一个init方法,它看起来像这样。

void InitializePhysX() {
    bool recordMemoryAllocations = true;
    const bool useCustomTrackingAllocator = true;

    PxAllocatorCallback* allocator = &gDefaultAllocatorCallback;
    PxErrorCallback* error = &gDefaultErrorCallback;
    PxFoundation* mFoundation = PxCreateFoundation(PX_PHYSICS_VERSION, *allocator, *error);
    if(!mFoundation)
            printf("PxCreateFoundation failed!\n");
    PxProfileZoneManager* mProfileZoneManager = &PxProfileZoneManager::createProfileZoneManager(mFoundation);
    if(!mProfileZoneManager)
            printf("PxProfileZoneManager::createProfileZoneManager failed!\n");
#ifdef PX_WINDOWS
    pxtask::CudaContextManagerDesc cudaContextManagerDesc;
    pxtask::CudaContextManager* mCudaContextManager = pxtask::createCudaContextManager(*mFoundation, cudaContextManagerDesc, mProfileZoneManager);
    if( mCudaContextManager ){
            if( !mCudaContextManager->contextIsValid() ){
                    mCudaContextManager->release();
                    mCudaContextManager = NULL;
                    printf("invalid context\n");
            }
    } else {
            printf("create cuda context manager failed\n");
    }
#endif
    mPhysX = PxCreatePhysics(PX_PHYSICS_VERSION, *mFoundation, PxTolerancesScale(), recordMemoryAllocations, mProfileZoneManager);
    if(!mPhysX)
            printf("PxCreatePhysics failed!\n");
    ...
}

当我试着运行我的应用程序时,会出现这样的情况: mCudaContextManger 从未正确创建。控制台上写着 "create cuda context manager failed"(创建cuda上下文管理器失败)。

"......\LowLevel/software/src/PxsContext.cpp (1122) : 警告 : GPU操作失败. 没有px::CudaContextManager可用......\SimulationController\src/particles\ScParticleSystemSim.cpp (73) : 警告 : GPU粒子系统创建失败。回落到CPU实现。"

我有GeForce560Ti与最新的驱动程序(在我朋友的笔记本电脑上的GeForce460上也会出现错误)。Physix在NVidia控制面板中设置为使用GPU。

有谁知道我们做错了什么,如何使GPU工作?先谢谢了

cuda gpu-programming physx cuda-context
1个回答
0
投票

缺少PhysX3Gpu_x86.dll文件。我添加了它,现在一切正常。

© www.soinside.com 2019 - 2024. All rights reserved.