Монитор мигает и программа выдает исключение при использовании Alea
В 90% случаев, когда я запускаю свою программу на тех же самых тестовых данных, она вылетает.
Непосредственно перед тем, как он падает - монитор выключается и включается, как будто меняется разрешение.
Потребление памяти на момент сбоя составляет около 340 Mb
что гораздо меньше, чем доступная система 16 Gb
и гораздо меньше, чем видеокарта доступна 1 Gb
Сразу после этого - я получаю либо CUDA_ERROR_LAUNCH_FAILED
исключение:
или же CUDA_ERRROR_UNKNOWN
исключение:
Тестовый код:
static void Main(string[] args)
{
Console.WriteLine("Start");
var gpu = Gpu.Default;
int[] in1 = new int[1245456];
int[] in2 = new int[1245456];
double[] in3 = new double[100000];
bool[][] in4 = new bool[100000][];
for (int i = 0; i < in4.Length; i++)
{
in4[i] = new bool[2];
}
bool[] results = new bool[1245456];
//bool[] results2 = gpu.Allocate<bool>(results.Length); // option 2. Same result. explicit memory allocation
gpu.For(0, in1.Length, idx => Do2(idx, in1, in2, in3, in4, results)); // you can try change result with result2. Same "result".
//results = Gpu.CopyToHost(results2);
//Gpu.Free(results2);
Console.WriteLine("End");
Console.ReadKey();
}
public static void Do2(
int idx,
int[] in1,
int[] in2,
double[] in3,
bool[][] in4,
bool[] results)
{
bool isTrue = false;
int varA = in1[idx];
int varB = in2[idx];
double calculatable = 0;
for (int i = 0; i < in3.Length; i++)
{
if (isTrue)
{
if (in4[i][varA])
continue;
calculatable = calculatable + in3[i] + 2;
isTrue = false;
}
else
{
if (in4[i][varB])
continue;
calculatable = calculatable + in3[i] -1;
isTrue = true;
}
}
if (calculatable >= 1) // if we comment out this line (NOT the whole block) - then all finished successfully
{
results[idx] = true; // doesn't matter if true or false
}
}
К сожалению, на данный момент - я не могу проверить решение с [GpuManaged]
флаг, из-за 2 других проблем ( клик, клик), но я попытался вручную явно управлять памятью, что привело к тому же результату..
Кто-нибудь может подсказать, пожалуйста, что я делаю не так?
Это выглядит очень странно, потому что тот же код, но с закомментированной строкой if (calculatable >= 1)
работает просто отлично, что наводит меня на мысль, что проблема не имеет ничего общего с памятью.
Ps если вы не можете воспроизвести проблему - попробуйте увеличить in3
а также in4
длина больше чем 100000
, На меньших количествах это работает нормально на моем ПК, а также..
- выиграть 10 x64, 8700k, 16 Гб оперативной памяти
- Geforce GT 710 1GB
- Alea 3.0.4
- alea.fody 3.0.4
- fsharp.core 4.3.4