falahati/NvAPIWrapper

GTX cards fan issue

MaynardMiner opened this issue · 8 comments

So I have user that was using my software with your wrapper with no issues. He has 3 GTX 1080ti cards.

This user decided to do a bios update on the cards. Upon doing a bios update, he noticed in EVGA precision (EVGA's overclocking software) now has the option to set both fans individually. It works correctly. Prior to the bios update, only 1 fan could be set.

Using the wrapper:

CoolerInformation.Coolers

The cards only return 1 fan cooler still.

I wasn't even aware that any GTX cards could be dual-fan aware. This is news to me. The user confirmed that he can now set fans individually after bios update.

This is a photo which uses the simple software I have made, along with the EVGA precision showing the card's fan speeds. Both this user and myself can set RTX dual-fan aware cards with the software. GTX cards however are failing due to only one cooler being found.

Do you have any ideas?

image

            NVIDIA.Initialize();
            var GPUs = PhysicalGPU.GetPhysicalGPUs();

                // Change speed if applicable
                if (Speed > -1)
                {
                    var Cool = GPUs[Index].CoolerInformation.Coolers;
                    Console.WriteLine("Current Fan Speed: " + GPUs[Index].CoolerInformation.CurrentFanSpeedLevel);
                    foreach (GPUCooler cooler in Cool)
                    {
                        Console.WriteLine("Current Fan Speed For Cooler " + cooler.CoolerId + ":" + GPUs[Index].CoolerInformation.CurrentFanSpeedLevel);
                        GPUs[Index].CoolerInformation.SetCoolerSettings(cooler.CoolerId, Speed);
                    }
                    Console.WriteLine("New Fan Speed: " + Speed);
                }

Code snippet from software.
Variable Speed and Index are arguments

@MaynardMiner, Hey, I got an email regarding a solution to this, but the comment is missing. Was it wrong?

"So I have user that was using my software with your wrapper with no issues. He has 3 GTX 1080ti cards.

This user decided to do a bios update on the cards. Upon doing a bios update, he noticed in EVGA precision (EVGA's overclocking software) now has the option to set both fans individually. It works correctly. Prior to the bios update, only 1 fan could be set.

Using the wrapper:

CoolerInformation.Coolers

The cards only return 1 fan cooler still.

I wasn't even aware that any GTX cards could be dual-fan aware. This is news to me. The user confirmed that he can now set fans individually after bios update.

This is a photo which uses the simple software I have made, along with the EVGA precision showing the card's fan speeds. Both this user and myself can set RTX dual-fan aware cards with the software. GTX cards however are failing due to only one cooler being found.

Do you have any ideas?"

I have tried to Flip around methods in GPUCooler. Have it run the new api first for RTX, then run the old one. I thought maybe that the bios update allowed the new one to work. I confirmed that the RTX version of fan setting didn't work at all. Just the original, but it sets only the first fan.

I think the original version you made seems to only returns 1 cooler by default. Is there a way to have the old version check for multiple coolers? Or does it already, and it's just not working?

I thought I solved it, but was wrong. I removed the comment. I thought the issue was that RTX method to search for GPUCooler should be first. But we found that it was still failing after I tried flipping around the methods.

Later tonight, I was going to try to have it run:

                    status = GPUApi.GetClientFanCoolersStatus(PhysicalGPU.Handle);
                    info = GPUApi.GetClientFanCoolersInfo(PhysicalGPU.Handle);
                    control = GPUApi.GetClientFanCoolersControl(PhysicalGPU.Handle);

Each individually instead of a try{} catch{} for all three, to see if one in particular is failing. I mean if v1 is working, the only one that is needed is status I believe to get the cooler count if I'm reading it right. The rest of the information can be pulled from the successful v1 method (it works with the bios update).

I will report when I get the user to test it.

Well, PrivateCoolerSettingsV1 supports multiple cooler information. So it should work and since it doesn't, there is probably another problem somewhere. You can try the low-level API GPUApi.GetCoolerSettings() and see what it really returns. You can also forcefully run GPUApi.SetCoolerLevels() with a greater cooler id, if this is the real method used by other software, it should be able to change the speed.

Is there any open-source program that shows you both fans? As of now, I can't think of a way to solve it except maybe diving into debugging AfterBurner again, but since this isn't even your card and you can't really help with that and the fact that I don't even own a 10xx GPU let alone a duel fan one, I can't do much for this except maybe keeping the issue open for later.

I have been searching for software outside of yours that will show both fans. I haven't found any as of yet, besides linux nvidia-settings

I will see what GPUAPI.GetCoolerSettings() returns.

I will try to forcefully run GPUApi.SetCoolerLevels().

I plan to continue trying to solve. This has been the only software that has worked thus far.

Just an update:

I don't think NVAPI is being used for their controller. I had him try multiple monitoring software like openharwaremonitor which is open source C# as well as some C programs that worked for me, but not for him.

Nvapi is only returning 1 cooler for that software as well. Only thing that works is manufacturer software for his cards. It must be the bios the user upgraded to.

Everything low level is returning one 1 fan cooler, I made some debug software that would output values as it running the lower level API...And it one returns a count of 1 and 1 coolersetting.

I'm going to close this, I think it is the after production manufacturer bios that is cause.