Hat die GTX 980M mit 8GB die volle Speicherbandbreite?

halo19fan95

Schraubenverwechsler(in)
Erst einmal ein Hallo an die PCGH-Community! :)

Vor ein paar Monaten war ja dieser Skandal wegen dem beschnittenen GM204 Chip der 970.
Da die 980M ja auch auf dem GM204 basiert und auch einige SMMs deaktiviert wurden kam mir die Frage auf: Hat sie ebenfalls dieses aufgeteilte Speichersystem?

Ich habe schon im Internet recherchiert aber leider kein Programm (oder ähnliches) zum Testen gefunden.
GPU-Z zeigt mir nur die errechntete Datenrate an aber ich bezweifle das dort die Speicherkompression der Maxwell-Architektur mit eingerechnet wurde.

Habt ihr Erfahrung mit den mobilen Maxwell-Chips?
Oder kennt ihr ein Programm mit dem ich meine 980M testen kann? :)
 
Ja, es sollte der gesamte Speicher über das 256 Bit breite Interface angesprochen werden...
 
Zuletzt bearbeitet:
Gibt es irgendeine Möglichkeit oder ein Programm um das zu testen?
Ich habe in dem Forum von 3D Center ein Programm gefunden mit dem man die einzelnen Speicherblöcke und deren Anbindung testet. Es verwendet die CUDA-Bibliothek von Nvidia. Leider ist der Download-Link nicht mehr aktuell :/.
Hier der Link: 3DCenter berichtet über angeblichen VRAM Fehler der 970 - ComputerBase Forum

Wenn jemand die Möglichkeit hat könnte er es auch neu Coden und hochladen ^^
Ich poste den Code mal :P
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "helper_math.h"
#include <stdio.h>
#include <iostream>
#define CacheCount 3
__global__ void BenchMarkDRAMKernel(float4* In)
{
int ThreadID = blockDim.x *blockIdx.x + threadIdx.x ;

float4 Temp = make_float4(1);

Temp += In[ThreadID];


if (length(Temp) == -12354)
In[0] = Temp;

}




__global__ void BenchMarkCacheKernel(float4* In, int Zero)
{
int ThreadID = blockDim.x *blockIdx.x + threadIdx.x;

float4 Temp = make_float4(1);

#pragma unroll
for (int i = 0; i < CacheCount; i++)
{
Temp += In[ThreadID + i*Zero];
}

if (length(Temp) == -12354)
In[0] = Temp;

}



int main()
{
static const int PointerCount = 5000;

int Float4Count = 8 * 1024 * 1024;
int ChunkSize = Float4Count*sizeof(float4);
float4* Pointers[PointerCount];
int UsedPointers = 0;
printf("Nai's Benchmark \n");
printf("Allocating Memory . . . Chunk Size = %i Byte \n", ChunkSize);
system("pause");
while (true)
{

int Error = cudaMalloc(&Pointers[UsedPointers], ChunkSize);

if (Error == cudaErrorMemoryAllocation)
break;

cudaMemset(Pointers[UsedPointers], 0, ChunkSize);
UsedPointers++;
}
printf("Allocated %i Chunks \n", UsedPointers);
cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);

int BlockSize = 128;
int BlockCount = Float4Count / BlockSize;

int BenchmarkCount = 10;

printf("Benchmarking DRAM \n");
system("pause");
for (int i = 0; i < UsedPointers; i++)
{
cudaEventRecord(start);
for (int j = 0; j < BenchmarkCount; j++)
BenchMarkDRAMKernel <<<BlockCount, BlockSize >>>(Pointers);

cudaEventRecord(stop);
cudaEventSynchronize(stop);

float milliseconds = 0;
cudaEventElapsedTime(&milliseconds, start, stop);

float Bandwidth = ((float)(BenchmarkCount * ChunkSize)) / milliseconds/ 1000.f/1000.f;
printf("DRAM-Bandwidth of %i. Chunk: %f GByte/s \n", i, Bandwidth);
}


system("pause");
printf("Benchmarking L2-Cache \n");
system("pause");


for (int i = 0; i < UsedPointers; i++)
{
cudaEventRecord(start);
for (int j = 0; j < BenchmarkCount; j++)
BenchMarkCacheKernel << <BlockCount, BlockSize >> >(Pointers, 0);

cudaEventRecord(stop);
cudaEventSynchronize(stop);

float milliseconds = 0;
cudaEventElapsedTime(&milliseconds, start, stop);

float Bandwidth = (((float)CacheCount* (float)BenchmarkCount * (float)ChunkSize)) / milliseconds / 1000.f / 1000.f;
printf("L2-Cache-Bandwidth of %i. Chunk: %f GByte/s \n", i, Bandwidth);
}


system("pause");

cudaDeviceSynchronize();
cudaDeviceReset();
return 0;
}
 
Zurück