gpt4 book ai didi

c++ - 旧显示驱动程序上奇怪的 CUDA 内核结果

转载 作者:行者123 更新时间:2023-11-28 02:15:37 25 4
gpt4 key购买 nike

我正在编写一个要在数千个不同 GPU 上运行的 CUDA 程序,这些机器会安装不同版本的显示驱动程序,我不能强制它们更新到最新的驱动程序。实际上,大多数代码在那些“旧”机器上运行良好,但某些特定代码会失败:

问题是:

#include <stdio.h>
#include <cuda.h>
#include <cuda_profiler_api.h>

__global__
void test()
{
unsigned i = 64;
unsigned j = 192;
int k = 7;

for(j = 1 << (k - 1); i &j; j >>= 1)
i ^= j;
i ^= j;

printf("i,j,k: %d,%d,%d\n", i,j,k);
// i,j,k: 32,32, 7 (correct)
// i,j,k: 0, 64, 7 (wrong)
}

int main() {
cudaSetDeviceFlags(cudaDeviceScheduleBlockingSync);

test<<<1,1>>>();
}

代码在具有最新驱动程序的 GPU 上打印 32,32,7 作为结果,这是正确的结果。但是在旧驱动程序(低于 CUDA 6.5)上它打印 0,64,7

我正在寻找任何解决方法。

环境:

  1. 开发:Win7-32​​ 位、VS2013、CUDA 6.5
  2. 当前结果:WinXP-32 位(和 Win7-32​​ 位),GTX-650(最新驱动程序)
  3. 错误结果:WinXP-32 位 + GTX-750-Ti(旧驱动),WinXP-32 位 + GTX-750(旧驱动)

最佳答案

没有解决方法。运行时 API 是版本化的,最低驱动程序版本要求是不可协商的。

您仅有的两个选择是使用支持正在使用的驱动程序的最低公分母工具包版本进行开发,或者切换到驱动程序 API。

关于c++ - 旧显示驱动程序上奇怪的 CUDA 内核结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34130555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com