私は実験をしようとしています。2つのアプリケーションがあります。あるアプリケーションでは、ヒープ メモリをデフォルトの 8MB から 4MB に変更し、カーネルを起動して、最後にビジー状態で待機します。別のアプリケーションでは、デバイスのヒープ メモリのサイズを照会するだけです。興味深いのは、カーネル起動後の最初のアプリケーションでは 4MB を取得し続け、他のアプリケーションでは 8MB を取得し続けていることです。なんでそうなの?
アプリケーション 1 のコードは -
__global__ void kernelA()
{
printf("I am running on kernelA\n");
}
int main()
{
size_t size;
cudaDeviceSetLimit(cudaLimitMallocHeapSize,100*sizeof(float));
cudaDeviceGetLimit(&size, cudaLimitMallocHeapSize);
printf("Heap size found to be %dn",(int)size);
kernelA<<<1,10>>>();
cudaThreadSynchronize();
while(1)
{
cudaDeviceGetLimit(&size, cudaLimitMallocHeapSize);
printf("Heap size found to be %d\n",(int)size);
}
}
アプリケーション 2 のコードは -
int main()
{
int k=1;
size_t size;
for(k=1;k<1000000;k++)
{
cudaDeviceGetLimit(&size, cudaLimitMallocHeapSize);
printf("Heap size found to be %d\n",(int)size);
}
}