UpdatecudaMallocManaged вызывает нарушение прав доступа
Я запустил (модифицированный) ниже код на другой машине с GTX 780 и он не имеет каких-либо проблем. Он по-прежнему не работает на моем «GTX 680 Ti Boost» даже с новейшими драйверами. Я собираюсь предположить, что это проблема с оборудованием.
Оригинал [Обновлено]
Я обнаружил, что если я запускаю программу несколько раз, в моем случае для сбора экспериментальных данных, иногда падает с нарушением доступа на cudaMallocManaged. Если код не сбой, это приводит к ошибке «Не удалось выделить память».
Настройка
ОС: Windows 10
GPU: GTX 650 Ti Повышение ж/вычислительная способность 3,0.
API: CUDA 7,0/7,5
компиляции команд (Windows)
NVCC code.cu -gencode = арка = compute_30, код = \ "sm_30, compute_30 \" -m -g 64 -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;
}
«S cript "
Вот программа, написанная на 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()))
}
}
}
вообще говоря, идея CUDA удалось памяти в том, что она должна устранить необходимость явного 'операций cudaMemcpy'. Я не полностью разобрал то, что вы представили, но на первый взгляд ваше направление кажется немного странным. –
Это memset только от первоначальной реализации, которую я имел некоторое время назад, прежде чем перешел к управляемой памяти. Я просто оставил его, чтобы он был похож на то, что у меня есть. Я расскажу о том, что программа делает в вопросе, чтобы уточнить. – deathly809
Код, похоже, работает для меня в соответствии с вашими ожиданиями на 660Ti, cuda 7.5 и win10. Возможно, попробуйте обновить драйверы? –