Я пишу программу сложения матриц для графических процессоров, используя потоки и, очевидно, закрепленную память. Так что я выделил 3 матрицы в закрепленной памяти, но после определенных измерений отображает ошибку API 2: из памяти. Моя оперативная память - 4 ГБ но я не могу использовать более 800 МБ. Есть ли способ, которым мы можем контролировать этот верхний предел? Мой SYS конфигурации: NVIDIA Geforce 9800GTX Intel Core 2 Quad для поточного кода выполнения выглядит следующим образомПрикрепленная память в Nvidia CUDA
(int i=0;i<no_of_streams;i++)
{
cudaMemcpyAsync(device_a+i*(n/no_of_streams),hAligned_on_host_a+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyHostToDevice,streams[i]);
cudaMemcpyAsync(device_b+i*(n/no_of_streams),hAligned_on_host_b+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyHostToDevice,streams[i]);
cudaMemcpyAsync(device_c+i*(n/no_of_streams),hAligned_on_host_c+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyHostToDevice,streams[i]);
matrixAddition<<<blocks,threads,0,streams[i]>>>(device_a+i*(n/no_of_streams),device_b+i*(n/no_of_streams),device_c+i*(n/no_of_streams));
cudaMemcpyAsync(hAligned_on_host_a+i*(n/no_of_streams),device_a+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyDeviceToHost,streams[i]);
cudaMemcpyAsync(hAligned_on_host_b+i*(n/no_of_streamss),device_b+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyDeviceToHost,streams[i]);
cudaMemcpyAsync(hAligned_on_host_c+i*(n/no_of_streams),device_c+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyDeviceToHost,streams[i]));
}
Могло быть множество причин, от фрагментированной памяти до плохого кода. Было бы хорошо видеть, что вы делаете, чтобы действительно сделать полезное предложение. –
потока кода следующим образом '2 потоков, созданных для каждого потока cudamemcpy (половина части массива, hostToDevice) ядро запуска cudaMemcpy (halfportion массива, DeviceToHost) Ничего особенного программа работает нормально с разницы в производительности, я просто хочу, чтобы у вас было больше памяти, поскольку это происходит потому, что глобальная память GPU составляет около 1 ГБ? –
Поместите любой код, отредактировав вопрос. –