gpt4 book ai didi

c++ - cudaMallocManaged 导致访问冲突

转载 作者:行者123 更新时间:2023-11-28 05:57:24 26 4
gpt4 key购买 nike

<分区>

更新

我已经在另一台配备 GTX 780 的机器上运行了下面的(修改后的)代码,它没有任何问题。即使使用最新的驱动程序,它仍然无法在我的“GTX 680 Ti Boost”上运行。我将推测这是一个硬件问题。

原始[更新]

我发现如果我重复运行一个程序,在我的例子中是为了收集实验数据,它有时会因 cudaMallocManaged 上的访问冲突而崩溃。如果代码没有崩溃,它会给我一个错误“无法分配内存”。

设置

操作系统:Windows 10

GPU:具有计算能力 3.0 的 GTX 650 Ti Boost。

应用程序接口(interface):CUDA 7.0/7.5

编译命令(Windows)

nvcc code.cu -gencode=arch=compute_30,code=\"sm_30,compute_30\"-m 64 -g -G -o code.exe

代码

#include <iostream>
#include <string>

void CudaTest(std::string msg, cudaError_t err) {
if(err != cudaSuccess) {
std::string errMsg(cudaGetErrorString(err));
std::cerr << msg << ": " << errMsg << std::endl;
std::exit(1);
}
}

int main(void) {
int* d_Data;
CudaTest("Could not allocate memory for d_Data",cudaMallocManaged(&d_Data,sizeof(int)));
CudaTest("Could not free memory",cudaFree(d_Data));
cudaDeviceReset();
return 0;
}

“脚本”

这是我用来测试上述代码的用 Go 编写的程序。

package main

import (
"fmt"
"os"
"os/exec"
"strconv"
)

func toInt(str string) int {
res,err := strconv.Atoi(str)
if err != nil {
panic( fmt.Sprintf("Expected an integer but found '%s'\n",str))
}
return res
}

func main() {
if len(os.Args) != 3 {
fmt.Printf("usage: %s <iterations> <program>",os.Args[0])
return
}

iterations := toInt(os.Args[1])
program := os.Args[2]

for i := 0 ; i < iterations; i++ {
cmd := exec.Command(program)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stdout
err := cmd.Run()
if err != nil {
panic(fmt.Sprintf("iteration=%d, Error running executable '%s', error: '%s'\n",i,program,err.Error()))
}
}
}

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