multiple cuda contexts interop with a D3D device

cuda context creation with d3d device interop fails when the number of instances is greater than 16.
is it normal ?

I tested as below,

//
int create_d3d9_interop(int chId, int adapter, void *d3ddevice)
{
CUcontext ctx = NULL;
CUdevice device = NULL;

    auto cuResult = cuD3D9CtxCreate(&ctx, &device, CU_CTX_BLOCKING_SYNC, (IDirect3DDevice9 *)d3ddevice);
    printf("%s() ch_%d) create: %s (result code: %d)\n", __FUNCTION__, chId, cuResult == CUDA_SUCCESS ? "TRUE" : "FALSE", cuResult);
    return cuResult == CUDA_SUCCESS ? 1 : 0;

}

//
int main(int argc, char *argv)
{
HWND hwnd = NULL;
static int adapter = cuda_get_proper_adapter(); // auto detect cuda adapter

    int numThreads = 25;
    {
            CD3D9Env d3d(adapter, hwnd);
            vector<std::thread> threads;
            for (int i = 0; i < numThreads; i++) {
                    threads.push_back(std::thread(create_d3d9_interop, i, adapter, d3d.GetDevice()));
            }
            for (int i = 0; i < threads.size(); i++) {
                    if (threads[i].joinable())
                            threads[i].join();
            }
    }
    system("pause");
    return 0;

}