Недавно я написал такую функцию:
#include "amp.h"#define DLLExport __declspec(dllexport)
using namespace concurrency;
namespace dll
{
class SomeMethods
{
public:
static DLLExport double CalcConvolution(double* mask, double* map, int size)
{
array_view<const double, 1> avMask(size, mask);
array_view<double, 1> avOMap(size, map);
array_view<double, 1> avCache(size, new double[size]);
avCache.discard_data();
parallel_for_each(
avCache.extent,
[=](index<1> idx) restrict(amp)
{
avCache[idx] = avMask[idx] * avOMap[idx];
}
);
avCache.synchronize();
double sum = 0;
auto cache = avCache.data();
for (int i = 0; i < size; i++)
sum += cache[i];
return sum;
}
};
}
Visual Studio сообщила о следующей ошибке:
ошибка C1451: не удалось сгенерировать отладочную информацию при составлении графа вызовов для параллелизма :: parallel_for_each
Как только я удалил DLLEXPORT
модификатор, ошибка исчезла, но я больше не могу экспортировать эту функцию в другие мои программы.
Как мне решить эту проблему?
Мы наблюдали сообщение об ошибке C1451, когда TMP
значение переменной среды содержит символы не ASCII. Временное решение состоит в том, чтобы установить переменную среды пользователя, например, равную. C:\tmp
,
Других решений пока нет …