invalid_compute_domain exception of C++ AMP
This blog post assumes you have read the introduction to C++ AMP exceptions.
An instance of the invalid_compute_domain exception type is thrown when the runtime fails to execute the AMP kernel for the compute domain specified at a parallel_for_each call site. The table below lists the common scenarios that result in invalid_compute_domain exception.
Scenario |
Exception Message |
Code Snippet |
Invalid Extent at parallel_for_each |
concurrency::parallel_for_each: unsupported compute domain,the extent of dimension 0 of the compute domain (-120)cannot be smaller than or equalto 0. |
accelerator a; concurrency::extent<1> ext(-120); int x; try { parallel_for_each(ext, [=](index<1> idx) restrict(amp) { int y = x; }); } catch(invalid_compute_domain& ex) { std::cout<< ex.what() << std::endl; } |
Extent not divisible by Tiled extent |
concurrency::parallel_for_each(tiling): unsupported computedomain, the extent of dimension 0 of the computedomain (32) cannot be evenlydivided by the extent ofdimension 0 of the tile (6). |
array<int,1> intArr(1024); concurrency::extent<2> ext(32,32); try { parallel_for_each(ext.tile<6,6>(),[&](tiled_index<6,6> idx) restrict(amp){ int y = idx.local[0]; }); } catch(invalid_compute_domain& ex) { std::cout<< ex.what() << std::endl; } |
In my next blog post, I will cover the unsupported_feature exception.