#include #include #include #include using namespace std; // BUFFERSIZE in KB const size_t BUFFERSIZE=8192; int main (void) { int gpuNumber, gpuID; cudaError_t errorCode; size_t bufferSize; int * d_buffer; int * h_buffer; cudaEvent_t start, end; float eventEtime, eventBandwidth; // conversion from KB to B bufferSize = BUFFERSIZE * 1024; cout << "Data Chunk Size: " << bufferSize << endl; h_buffer = (int *) malloc (bufferSize); errorCode = cudaGetDeviceCount( &gpuNumber ); if (errorCode) cerr << "Error with cudaDeviceCount" << endl; cout << "Available GPUs:" << gpuNumber << endl; for (gpuID = 0; gpuID < gpuNumber; gpuID++) { cudaSetDevice(gpuID); cudaEventCreate(&start); cudaEventCreate(&end); cudaMalloc((void**)&d_buffer, bufferSize); cudaEventRecord(start,0); cudaMemcpy(d_buffer, h_buffer, bufferSize, cudaMemcpyHostToDevice); cudaEventRecord(end,0); cudaDeviceSynchronize(); cudaEventElapsedTime(&eventEtime, start, end); cout << "GPU " << gpuID << " copy Host To Device" << endl; cout << "Copy duration: " << eventEtime << " ms " << endl; eventBandwidth = (float) bufferSize / (1<<20); eventBandwidth /= 0.001 * eventEtime; // bandwidth in MB/s cout << "Bandwidth " << eventBandwidth << " MB/s " << endl; cudaEventDestroy(start); cudaEventDestroy(end); cudaFree(d_buffer); } free(h_buffer); return 0; }