我想知道是否有人可以在內核中的這種行爲與新的運營商提供一些線索..以下是代碼新的運營商..奇怪的行爲
#include <stdio.h>
#include "cuda_runtime.h"
#include "cuComplex.h"
using namespace std;
__global__ void test()
{
cuComplex *store;
store= new cuComplex[30000];
if (store==NULL) printf("Unable to allocate %i\n",blockIdx.y);
delete store;
if (threadIdx.x==10000) store->x=0.0;
}
int main(int argc, char *argv[])
{
float timestamp;
cudaEvent_t event_start,event_stop;
// Initialise
cudaEventCreate(&event_start);
cudaEventCreate(&event_stop);
cudaEventRecord(event_start, 0);
dim3 threadsPerBlock;
dim3 blocks;
threadsPerBlock.x=1;
threadsPerBlock.y=1;
threadsPerBlock.z=1;
blocks.x=1;
blocks.y=500;
blocks.z=1;
cudaEventRecord(event_start);
test<<<blocks,threadsPerBlock,0>>>();
cudaEventRecord(event_stop, 0);
cudaEventSynchronize(event_stop);
cudaEventElapsedTime(×tamp, event_start, event_stop);
printf("test took %fms \n", timestamp);
}
在GTX680 Cuda的5運行此和調查輸出將會注意到,隨機存儲器未分配:(我在想,也許這是因爲所有的全局存儲器完成,但我有2GB的內存和積極以來塊的最高金額爲16的內存分配量此方法應該在最大爲16 * 30000 * 8 = 38.4x10e6 ..即約38MB,所以我還需要考慮什麼?
分配應該是'16 * 30000 *的sizeof(cuComplex)' – pQB
還要注意的是'threadIdx.x'將內存永遠不會等於'10000' – pQB
這可能只是運行時堆中的內存碎片。你有沒有試過增加運行時堆大小? – talonmies