, 내가 얻을 :
- 100 %의 스토리지 효율성
- 69.4 % (128.6 GB/s)의 DRAM 활용
- 18.3 % 총 재생 오버 헤드
- 전체 메모리 재생 오버 헤드가 18.3 %입니다.
메모리 쓰기가 병합되고 커널에 분기가 없으므로 전역 메모리 재생 오버 헤드는 어디에서 오는가? 나는 이것을 Ubuntu 13.04에서 실행하고 있으며, nvidia-cuda-toolkit 버전 5.0.35-4ubuntu1을 사용하고 있습니다.전역 메모리 재생 오버 헤드는 어디에서 발생합니까? 엔비디아 비주얼 프로파일에서 글로벌 메모리 1 GB를 작성하는 아래의 코드를 실행
#include <cuda.h>
#include <unistd.h>
#include <getopt.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdint.h>
#include <ctype.h>
#include <sched.h>
#include <assert.h>
static void
HandleError(cudaError_t err, const char *file, int line)
{
if (err != cudaSuccess) {
printf("%s in %s at line %d\n", cudaGetErrorString(err), file, line);
exit(EXIT_FAILURE);
}
}
#define HANDLE_ERROR(err) (HandleError(err, __FILE__, __LINE__))
// Global memory writes
__global__ void
kernel_write(uint32_t *start, uint32_t entries)
{
uint32_t tid = threadIdx.x + blockIdx.x*blockDim.x;
while (tid < entries) {
start[tid] = tid;
tid += blockDim.x*gridDim.x;
}
}
int main(int argc, char *argv[])
{
uint32_t *gpu_mem; // Memory pointer
uint32_t n_blocks = 256; // Blocks per grid
uint32_t n_threads = 192; // Threads per block
uint32_t n_bytes = 1073741824; // Transfer size (1 GB)
float elapsedTime; // Elapsed write time
// Allocate 1 GB of memory on the device
HANDLE_ERROR(cudaMalloc((void **)&gpu_mem, n_bytes));
// Create events
cudaEvent_t start, stop;
HANDLE_ERROR(cudaEventCreate(&start));
HANDLE_ERROR(cudaEventCreate(&stop));
// Write to global memory
HANDLE_ERROR(cudaEventRecord(start, 0));
kernel_write<<<n_blocks, n_threads>>>(gpu_mem, n_bytes/4);
HANDLE_ERROR(cudaGetLastError());
HANDLE_ERROR(cudaEventRecord(stop, 0));
HANDLE_ERROR(cudaEventSynchronize(stop));
HANDLE_ERROR(cudaEventElapsedTime(&elapsedTime, start, stop));
// Report exchange time
printf("#Delay(ms) BW(GB/s)\n");
printf("%10.6f %10.6f\n", elapsedTime, 1e-6*n_bytes/elapsedTime);
// Destroy events
HANDLE_ERROR(cudaEventDestroy(start));
HANDLE_ERROR(cudaEventDestroy(stop));
// Free memory
HANDLE_ERROR(cudaFree(gpu_mem));
return 0;
}
GPU가 ECC를 지원하는 경우 활성화되어 있습니까? – njuffa
이것은 GeForce GTX 580이며 현재 "ECC 지원 장치 : 사용 안 함"으로 설정되어 있습니다. 어떤 생각입니까? – coder