cuvidCreateDecoder() returns error CUDA_ERROR_NO_DEVICE

I am using GeForce 930M GPU with driver version 384.94 on Windows 10 Enterprise (64 bit) pc. I am trying to run Nvidia decoder sample (NvDecodeD3D11) given in Nvidia Video_Codec_SDK_7.1.9 using cuvid decoder but cuvidCreateDecoder() function always fails with error “CUDA_ERROR_NO_DEVICE”.

As Geforce 930M supports Maxwell architecture and it is cuda capable gpu with 5.0 compute capability, so why it is still giving error CUDA_ERROR_NO_DEVICE? How to fix this issue?

Note: This pc has one more graphics card “Intel HD Graphics 520”. So is it causing any problem?

I had the same problem with the 920M. I created a bug report and they asked for code to demonstrate it. Of course the sample code is enough for that. Nevertheless, I gave them what they asked for, but after 9 months the bug is still open and they did not reply further.

My guess is that it is Optimus related, which puts the ball into the court of the laptop maker.

Thanks electrodynamics for your reply.
Did u get any workaround for this problem? I am still waiting for a responsible reply from NVIDIA Support, at least we should know this problem is related to lack capabilities of “GeForce 930M” GPU or something else.

No, I never found any workaround. I was investigating this for a user of my NVDec-based application (see my signature). Together we tried all angles we could think of, especially the Optimus angle. The user was unable to get anything useful from the laptop maker and I have been unable to get anything useful from nVidia.

Please do post again if you discover anything useful. Your best bet for success with NVDec is to use a full desktop PC with a recent nVidia card and driver. Laptops are always going to be hit or miss due to Optimus.

nvidia do not clearly document which GPUs have or don’t have nvdec, but as you’re discussing the 920M and 930M, it’s pretty safe to say they simply don’t have nvdec. In the optimus context, you’re expected to use the intel decoder hardware.

Some of my users can use NVDec successfully on 920M/930M laptops with Optimus technology. I suppose it depends on the laptop maker to implement Optimus correctly.

It is not unsupported speculation; certainly it is speculation as nvidia do not document this clearly.

I will provide the following:

  1. The statement from an nvidia engineer that GM108 has no video decoder

https://devtalk.nvidia.com/default/topic/1001770/video-technologies/geforce-940mx-decoding/

  1. A table that shows the various products that are a form of GM108.

https://videocardz.net/gpu/nvidia-gm108/

It’s not a first party table of course, but many of these tables exist in the world and are broadly consistent.

You can see that some 920, 930 and 940 parts exists based on GM108.

Equally, I am sure that there are 920/930/940 parts that are not based on GM108, and this will explain why some users with those parts report success.

I have no idea why nvidia make this so hard to discover.

I personally have a GT1030 that I use for testing which has no nvenc capability but you won’t find that written down anywhere.

Very interesting. Thanks. This is the first I have heard of a Maxwell not supporting the video decoder. Do you know if these GM108s can run CUDA code (not through NVDec) or is that also not supported?

I couldn’t say anything for certain without direct experience, but it’s pretty safe to say that it does support actual general purpose CUDA, as CUDA uses the same underlying hardware as the graphics APIs.

Despite using the CUDA API for memory management calls, nvdec/nvenc are backed by dedicated decode/encode hardware.

Thanks both of you for paying your attention towards my problem.

I am also shocked,video decoding is not supported on Maxwell architecture.I run cuda sample(not through NVDec) and it fails with same error code “CUDA_ERROR_NO_DEVICE”.

I also tried NvEncode sample given in Nvidia Video_Codec_SDK_8.0.14 on the same but it also fails with the error code “NV_ENC_ERR_UNSUPPORTED_DEVICE”.

So through our investigation it is enough to say that on GM108 there is not support of video decoding and encoding.

Personally i want to say that NVIDIA makes things complicated.Here the Video Encode and Decode GPU Support Matrix provided by NVIDIA https://developer.nvidia.com/video-encode-decode-gpu-support-matrix#Encoder but I have another system which is GeForce GTX 950 and it supports NvDec and NVEnc while GeForce Board does not take place in the table.So this table is not enough, there may be some another boards which has capabilities to Decode and Encode with the latest hardware.

The matrix page only covers their ‘professional’ hardware, so the Quadros, Teslas, etc. No GeForce at all. So there’s no official statement of hardware capability anywhere. The only way we find out is if someone buys one and reports what they see - that one official comment on the GM108 is very much the exception to the rule.

I have one more doubt about “ptx (NV12ToARGB_drvapi_x64.ptx or NV12ToARGB_drvapi_x632.ptx)” file, As per my understanding the use of ptx file is to convert nv12 into ARGB using NVIDIA Kernel,is there any other purpose of this file?
I want to write a generic decoder lib for all cuda supported GPUs. Is it possible to use common PTX file in my lib for all GPUs beacause ptx file points to a specific range of target architecture and GPUs have different compute capabilities?

When you generate PTX you specify the minimum compute capability. This will generate a line like this in the PTX header:

.target sm_30

Then any device >= sm_30 will be able to compile and run that PTX file.

There are a lot more subtleties for which I refer you to the CUDA documentation, especially for nvcc.

930M and 920M contain GM108 GPU. GM108 does not have hardware video encode/decode engines.

CUDA is completely independent of video hardware encode/decode engines. Both 930M and 920M should support CUDA.