标签: c++-amp

C++ AMP的当前状态是什么

我正在研究C++中的高性能代码,并且一直在使用CUDA和OpenCL以及最近的C++ AMP,我非常喜欢它.然而,我有点担心它没有被开发和扩展并且将会消亡.

让我想到这个想法的是,即使是MS C++ AMP博客已经沉默了大约一年.看看C++ AMP算法库http://ampalgorithms.codeplex.com/wikipage/history,似乎一年多没发生任何事情.

我看到的唯一开发是现在LLVM类型支持C++ AMP,因此它不仅仅是Windows,但这就是全部,而不是已被广泛讲述的东西.

你知道什么样的工作,如果有的话?

c++ gpgpu c++11 c++-amp

31
推荐指数
1
解决办法
6637
查看次数

C++ 11是否添加了C99限制说明符?如果没有,为什么不呢?

restrict是一个C99功能,它最近得到了很多关注,允许编译器对指针执行"以前只有fortran"的优化.这也是微软最近宣布的与C++ AMP规范基础相同的关键词.

该关键字实际上是在FCD中吗?如果没有,是否有特定原因被省略?

c++ c++11 c++-amp

30
推荐指数
4
解决办法
6895
查看次数

GCC是否支持C++ AMP

有谁知道,如果有任何计划发展以g ++语言支持(GCC)为新的C++ AMP标准,该标准被释放最近被微软作为一个开放的规范?我看到有人已在他们的论坛上询问英特尔支持.但是我没有看到GCC的任何东西.

c++ c++-amp

29
推荐指数
2
解决办法
5629
查看次数

对CUDA/openCL和C++ AMP的困惑

我读到微软正在与Nvidia密切合作,以提高AMP的性能.

但我的问题是:AMP是CUDA - 被微软取代吗?或者当NVIDIA CUDA视频卡可用时,AMP是否使用CUDA驱动程序?AMP是openCL的替代品吗?

我还是很困惑..

c++ cuda opencl c++-amp

14
推荐指数
1
解决办法
1万
查看次数

具有比CPU慢的GPU的C++ AMP

我刚刚开始学习C++ AMP,并且我已经获得了一些我用VS 2012 RC构建的示例,但我发现GPU的性能比CPU慢.例如,Kate Gregory的例子:http://ampbook.codeplex.com/releases/view/90595(与她即将出版的书http://www.gregcons.com/cppamp/相关).她在演讲中展示了她们,通过使用她的笔记本电脑的GPU(我相信她说它是6650)与CPU(不知道她有什么CPU)相比,她在第四章的例子中获得了约5倍的性能提升.我已经尝试过自己测试这个例子以及几个系统配置(如下所示)我总是发现CPU更快.我还测试了其他例子并发现了相同的例子.难道我做错了什么?性能低于预期的原因是否有原因?有没有人有一个肯定会表明GPU更快的例子?

  • 系统1:带有板载显卡的Intel i7 2600K(我希望速度更慢)
  • 系统2:带有Intel HD的Intel i7 2630QM可与AMD 6770一起切换(我在性能模式下运行它应该使用6770)
  • 系统3:采用2xCrossfire AMD HD 5850的Intel i5 750

结果示例:chapter4项目结果为1.15ms CPU,2.57ms GPU,2.55ms GPU平铺.

编辑:

Doh,我想我刚刚找到了原因 - 她在讲座中使用的矩阵大小的值是不同的.网站上的样本使用M = N = W = 64.如果我像在演讲中那样使用64,512和256,那么我的性能会相应提高~5倍.

c++ visual-c++ c++-amp

9
推荐指数
1
解决办法
3013
查看次数

并发和内存模型

我在看这个视频由香草萨特对GPGPU和新的C++ AMP库.他正在谈论内存模型,并提到弱内存模型,然后是强内存模型,我认为他指的是读/写顺序等,但我不确定.

谷歌在内存模型上发现了一些有趣的结果(主要是科学论文),但有人可以解释什么是弱内存模型,什么是强内存模型及其与并发的关系?

language-agnostic concurrency memory-model c++-amp

8
推荐指数
3
解决办法
1751
查看次数

限制(amp)比CUDA内核代码更具​​限制性吗?

在C++ AMP中,内核函数或lambda标记为restrict(amp),这对C++的允许子集(此处列出)施加了严格的限制.CUDA是否允许内核函数中C或C++子集的更多自由?

parallel-processing cuda gpu-programming c++-amp

7
推荐指数
1
解决办法
900
查看次数

C++ AMP会在没有兼容GPU的机器上运行吗?

我知道C++ AMP由支持DirectX 11的GPU加速.
但是,我的问题是,如果编译的C++ AMP程序在没有DirectX 11兼容GPU的机器上运行,会发生什么?

是否可以通过DirectCompute的某些软件实现来模拟?
它是否在CPU上执行(可能使用SSE样式指令)?
或者,它是否无法执行?

c++ gpgpu directcompute c++-amp

6
推荐指数
1
解决办法
1444
查看次数

C#AMP库是否适用于F#?

我正在试验F#中的C++ AMP库,作为使用GPU并行工作的一种方式.但是,我得到的结果似乎并不直观.

在C++中,我创建了一个带有一个函数的库,它使用AMP对数组中的所有数字进行平方:

extern "C" __declspec ( dllexport ) void _stdcall square_array(double* arr, int n)
{
// Create a view over the data on the CPU
    array_view<double,1> dataView(n, &arr[0]);

// Run code on the GPU
    parallel_for_each(dataView.extent, [=] (index<1> idx) restrict(amp)
    {
        dataView[idx] = dataView[idx] * dataView[idx];
    });

// Copy data from GPU to CPU
    dataView.synchronize();
}
Run Code Online (Sandbox Code Playgroud)

(代码改编自Igor Ostrovsky 在MSDN上的博客.)

然后我编写了以下F#来比较任务并行库(TPL)和AMP:

// Print the time needed to run the given function
let time f =
    let s = new …
Run Code Online (Sandbox Code Playgroud)

f# gpgpu task-parallel-library c++-amp

5
推荐指数
1
解决办法
399
查看次数

使用 C++ AMP 处理大型数组(65536+ 个元素)

我在 C++ AMP 中处理大型数组(超过 65536 个元素)时遇到问题。我正在使用 C++ amp 来计算多边形列表的法线、切线和双切线向量。输入由位置数组(每个位置 3 个浮点数)和 uv 坐标数组(每个顶点 2 个浮点数)组成。在我的parallel_for_each函数中,我计算法线、切线和双切线(每组3个顶点各1个)。我将它们写回数组(封装在 array_view 中)。该算法如下所示:

concurrency::extent<2> ePositions(positionsVector.size() / 3, 3);
concurrency::array_view<const float, 2> positions(ePositions, positionsVector);
concurrency::extent<2> eUVs(uvsVector.size() / 2, 2);
concurrency::array_view<const float, 2> UVs(eUVs, uvsVector);
concurrency::extent<2> eNormalDirections(normalDirectionsVector.size() / 3, 3);
concurrency::array_view<float, 2> normalDirections(eNormalDirections, normalDirectionsVector);
normalDirections.discard_data();
concurrency::extent<2> eTangentDirections(tangentDirectionsVector.size() / 3, 3);
concurrency::array_view<float, 2> tangentDirections(eTangentDirections, tangentDirectionsVector);
tangentDirections.discard_data();
concurrency::extent<2> eBitangentDirections(bitangentDirectionsVector.size() / 3, 3);
concurrency::array_view<float, 2> bitangentDirections(eBitangentDirections, bitangentDirectionsVector);
bitangentDirections.discard_data();

concurrency::parallel_for_each(eNormalDirections.tile<1, 3>(), [=](concurrency::tiled_index<1, 3> t_idx) restrict(amp)
{
    < ... calculate the normals, tangents …
Run Code Online (Sandbox Code Playgroud)

c++ arrays parallel-processing gpgpu c++-amp

5
推荐指数
1
解决办法
1172
查看次数