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;
}

// results:
create_d3d9_interop() ch_21) create: TRUE (result code: 0)
create_d3d9_interop() ch_3) create: TRUE (result code: 0)
create_d3d9_interop() ch_24) create: TRUE (result code: 0)
create_d3d9_interop() ch_6) create: TRUE (result code: 0)
create_d3d9_interop() ch_4) create: TRUE (result code: 0)
create_d3d9_interop() ch_11) create: TRUE (result code: 0)
create_d3d9_interop() ch_14) create: TRUE (result code: 0)
create_d3d9_interop() ch_19) create: TRUE (result code: 0)
create_d3d9_interop() ch_5) create: TRUE (result code: 0)
create_d3d9_interop() ch_12) create: TRUE (result code: 0)
create_d3d9_interop() ch_22) create: TRUE (result code: 0)
create_d3d9_interop() ch_16) create: TRUE (result code: 0)
create_d3d9_interop() ch_10) create: TRUE (result code: 0)
create_d3d9_interop() ch_2) create: TRUE (result code: 0)
create_d3d9_interop() ch_1) create: TRUE (result code: 0)
create_d3d9_interop() ch_23) create: TRUE (result code: 0)

create_d3d9_interop() ch_9) create: FALSE (result code: 999)
create_d3d9_interop() ch_7) create: FALSE (result code: 999)
create_d3d9_interop() ch_17) create: FALSE (result code: 999)
create_d3d9_interop() ch_15) create: FALSE (result code: 999)
create_d3d9_interop() ch_8) create: FALSE (result code: 999)
create_d3d9_interop() ch_20) create: FALSE (result code: 999)
create_d3d9_interop() ch_0) create: FALSE (result code: 999)
create_d3d9_interop() ch_18) create: FALSE (result code: 999)
create_d3d9_interop() ch_13) create: FALSE (result code: 999)