out_of_memory exception of C++ AMP

This blog post assumes you have read the introduction to C++ AMP exceptions.

An instance of the out_of_memory exception type is thrown when an underlying OS/DirectX API call fails due to failure to allocate system or device memory. Operations like parallel_for_each execution, copying data, accelerator.wait , Stage buffer creations, Data buffer creations etc. involve calling underlying OS/DirectX APIs.

Scenario

Exception Message

Code Snippet

Stage buffer creation between two accelerators.

Failed to create staging buffer

/* The below code creates large stagingbuffer of size 1024 * 1024 * 512 (2GB) between cpu accelerator and default accelerator.out_of_memory exception is thrown based on the availability of memory */

try

{

    concurrency::extent<1> ext(1024 * 1024 * 512);

    accelerator gpu;

    accelerator cpu(accelerator::cpu_accelerator);

    array<int, 1> src(ext,cpu.default_view,gpu.default_view);

}

catch(out_of_memory& ex)

{

    std::cout<< ex.what() << std::endl;

}

 

My next blog post covers accelerator_view_removed exception, the last one of C++ AMP Exceptions.