2011-09-27 6 views
0

인터넷 검색이 도움이되지 않았습니까? AMP를 사용하는 사람이 있습니까?C++에서 double이 예상되는 int 인덱스 사용 AMP retrict (direct3d) 코드

아래의 코드 조각에서 정수에서 double (double v = idx.x)으로 캐스트하면 "Shader를 만들지 못했습니다"런타임 오류가 발생합니다. 나는 restrict (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] = 동시성 :: pow (u, idx.x)이고 그것은 그 excepion을 줄 것입니다. –

+0

그건 그렇고, 나는 에뮬레이션 아래에서 이것을 시도하고있다. –

답변

1

Windows에서 GPU를위한 이중 지원의 우리의 설명을 참조하시기 바랍니다, 또한 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++ 앰프로 질문을 태그하십시오.