1

最近我写了一个这样的函数:

#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:编译 concurrency::parallel_for_each 的调用图时无法生成调试信息

删除DLLEXPORT修饰符后,错误消失了,但我无法再将此功能导出到其他程序。

我该如何解决这个问题?

4

1 回答 1

1

我们观察到当TMP环境变量值包含非 ASCII 字符时会报告错误 C1451。临时解决方法是将用户环境变量设置为例如C:\tmp

于 2013-11-01T19:36:11.100 回答