我已经阅读了以下和大多数NVIDIA手册和其他内容.我去年也参加了GTC的论文和会谈.
我知道最新的GPU Computing Gems Emerald Edition但尚未阅读.
您会推荐哪些其他书籍和资源?例如,我确信80年代的第一波数据并行编程(连接机器等)有一些很棒的内容.我知道对这一代硬件的数据并行算法进行了大量研究.
跟进... 30/Mar/2011
我还发现GPU Gems第1-3册有一些关于GPU计算的章节,而不仅仅是图形.它们可以在线免费获得,http://developer.nvidia.com/object/gpu_gems_home.html.我还没有机会读它们.
我正在尝试使用Thrust/CUDA 4.0构建一个简单的应用程序并获得大量警告"警告:无法告诉指针指向哪个,假设全局内存空间"
有没有其他人看过这个,我如何禁用它们或修复我的代码?
谢谢,
阿德
这是我的代码.
Hello.h
class DECLSPECIFIER Hello
{
private:
thrust::device_vector<unsigned long> m_device_data;
public:
Hello(const thrust::host_vector<unsigned long>& data);
unsigned long Sum();
unsigned long Max();
};
Run Code Online (Sandbox Code Playgroud)
Hello.cu
#include "Hello.h"
Hello::Hello(const thrust::host_vector<unsigned long>& data)
{
m_device_data = data;
}
unsigned long Hello::Sum()
{
return thrust::reduce(m_device_data.cbegin(), m_device_data.cend(), 0, thrust::plus<unsigned long>());
}
unsigned long Hello::Max()
{
return *thrust::max_element(m_device_data.cbegin(), m_device_data.cend(), thrust::less<unsigned long>());
}
Run Code Online (Sandbox Code Playgroud)
输出
1> Compiling CUDA source file Hello.cu...
1>
1> C:\SrcHg\blog\HelloWorld\HelloWorldCuda>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2008 -ccbin "C:\Program …Run Code Online (Sandbox Code Playgroud) 我正在使用以下逻辑(MOQ)来尝试模拟MongoDB csharp驱动程序对象:
var svr = new Mock<MongoServer>(new MongoServerSettings());
var db = new Mock<MongoDatabase>(svr.Object, new MongoDatabaseSettings("hf_test",
new MongoCredentials("hf_test", "hf_pass"), GuidRepresentation.Standard,
SafeMode.False, false));
Run Code Online (Sandbox Code Playgroud)
当我调用db.Object时,MOQ尝试创建我的模拟MongoDatabase的实例,但它失败并带有空引用异常.
注意:我正在考虑创建一个IMongoCollection接口,并将MongoCollection包装在它的实例中.然后,我可以简单地嘲笑......但这似乎是一大堆不必要的工作.
我正在尝试使用 C++ AMP 计算矩阵。我使用宽度和高度为 3000 x 3000 的数组,并重复计算过程 20000 次:
//_height=_width=3000
extent<2> ext(_height,_width);
array<int, 2> GPU_main(ext,gpuDevice.default_view);
array<int, 2> GPU_res(ext,gpuDevice.default_view);
copy(_main, GPU_main);
array_view<int,2> main(GPU_main);
array_view<int,2> res(GPU_res);
res.discard_data();
number=20000;
for(int i=0;i<number;i++)
{
parallel_for_each(e,[=](index<2> idx)restrict(amp)
{
res(idx)=main(idx)+idx[0];//not depend from calculation type
}
array_view<TYPE, 2> temp=res;
res=main;
main=temp;
}
copy(main, _main);
Run Code Online (Sandbox Code Playgroud)
在计算之前,我将矩阵从主机内存复制到 GPU 内存,并创建一个array_view从 0 到 7 的代码行。
之后,我启动一个循环来计算某些操作并重复 20000 次。每次迭代我都会启动一个parallel_for_each使用 C++ AMP 进行计算的循环。
GPU计算速度非常快,但是当我将结果复制到主机时,array _main我发现这个操作需要很多时间,而且我发现如果我number从20000减少到2000,复制的时间也会减少。
为什么会出现这种情况,是同步问题吗?
使用时有没有办法保证订单Parallel.ForEach()?我正在循环的集合需要保持它的顺序,但我正在寻找一些性能改进.
parallel-processing asp.net-4.0 task-parallel-library parallel-for
如何安全地线程化下面的嵌套 for 循环,以便在具有 8 个线程的核心上并行运行程序,并且仍然以正确的顺序输出数据。我尝试使用#pragma omp for命令,但这给了我一条错误消息:工作共享区域可能不会紧密嵌套在工作共享、关键或显式任务区域内。
注意:此代码是并行编程的入门,所以为了优化,写得不好
#pragma omp parallel private(t, i, j) shared(nx, ny, nt)
{
// main loop
for (int t = 0; t < nt; t++)
{
cout << "\n" << t;
cout.flush();
// first block
for (int i = 0; i < nx; i++)
{
for(int j=0; j < ny ;j++)
{
if (i> 0 && i < nx - 1 && j >0 && j < ny - 1)
{ …Run Code Online (Sandbox Code Playgroud)