2011-09-27 5 views
0

Googling мало помог, кто-нибудь использовал AMP?Использование индекса int, где double ожидается в C++ AMP retrict (direct3d) код

В фрагменте кода под листингом от integer до double (double v = idx.x) приводят к ошибке времени выполнения «Не удалось создать шейдер». Я думал, что ограничение (direct3d) предупредило бы меня о вещах, которые GPU не сможет обработать во время компиляции. Есть ли альтернатива pow() - или мне нужно написать цикл, чтобы сделать это?

concurrency::array_view<double,1> prices = … 
concurrency::parallel_for_each(
    prices.grid, [=](index<1> idx) mutable restrict(direct3d) { 
     double v = idx.x; 
     prices[idx] = concurrency::pow(u, v); 
… 
+0

Вы уверены, что это действительно то, что вызывает проблемы? Я склонен сомневаться в этом. Что происходит, когда вы просто оцениваете 'idx.x', отбрасываете результат и устанавливаете' double v = 2.502907875'? – leftaroundabout

+0

double v = 2.502907875 будет работать. Фактически мне нужны были цены [idx] = concurrency :: pow (u, idx.x), и это дало бы это исключение. –

+0

Кстати, я пытаюсь это под эмуляцию. –

ответ

1

смотрите наше объяснение двойной поддержки графических процессоров на Windows, а также математической библиотеки C++ AMP http://blogs.msdn.com/b/nativeconcurrency/archive/2012/02/08/math-library-for-c-amp.aspx http://blogs.msdn.com/b/nativeconcurrency/archive/2012/02/07 /double-precision-support-in-c-amp.aspx

Если у вас все еще есть вопрос, не стесняйтесь публиковать сообщения. Также, пожалуйста, пометьте ваши вопросы с помощью усилителя C++, чтобы у нас был больше шансов найти их.

 Смежные вопросы

  • Нет связанных вопросов^_^