#include "stdafx.h"
#include <amp.h>
#include <assert.h>
#include <iostream>
#include <vector>
#include <iostream>
#include <ppl.h>
#include<stdio.h>
#include<conio.h>
using namespace ::Concurrency;
using std::vector;
static array<double, 1> *P_GPU;
int _tmain(int argc, _TCHAR* argv[])
{
accelerator default_device(accelerator::default_accelerator);
accelerator_view acc_v = default_device.default_view;
int N = 4*4096*4096;
double *xdata = new double[N];
memset(xdata,0,N);
extent<1> e_b(N);
P_GPU = new array<double, 1>(e_b, acc_v); // dynamic allocation of array
array<double, 1> bb(e_b, xdata, acc_v);
array_view<double, 1> dest(*P_GPU);
dest.discard_data();
parallel_for_each(dest.extent, [=,&bb](index<1> idx) restrict(amp)
{
dest[idx]=bb[idx];
});
dest.synchronize();
std::cout << "before delete .." << std::endl;
std::cin.get();
delete [] xdata; // the DATA of xdata pointer is deleted ..
delete P_GPU; // the DATA GPU of P_GPU is not deleted ???
std::cout << "Hit any key to exit..." << std::endl;
std::cin.get();
return 0;
}
二进制代码已由Microsoft Process Explorer v16.04进行测试。C++ Amp GPU数据在删除指针阵列GPU(动态分配)的数据后不会自由
我测试了在C++ AMP中动态分配数组(或array_view)的问题.. 我看到删除P_GPU指针后GPU内存不是空闲的!
这个程序在Matlab上测试过...(mexFunction) - >我有同样的问题...... delete P_GPU;
我需要在matlab中进行矩阵的动态分配(GPU C++ AMP)。 我找到了窍门,但我有并发症时,我做了释放 (删除)矩阵在GPU内存 .... ???? 解除分配GPU内存...
是否有使用指针任何特别的理由一个数组在这里?记住P_GPU是指向数组<>其又用于在GPU上而不是实际数据的数据的容器。我想这会有助于更多地了解你的情况。 – 2014-09-26 18:50:50
这是示例程序中,我分配数据的GPU在Matlab – user3394578 2014-09-26 18:57:04
我需要在MATLAB – user3394578 2014-09-26 19:11:51