我制作了一个OpenCL程序并使用固定内存(CL_MEM_ALLOC_HOST_PTR)来获得从设备到主机的更高传输速率.
传输速率按我的预期增加(使用AMD APP Profiler 2.4获得传输速率).问题是矩阵4096 x 4096(64 MB)的传输速率高于PCIe带宽(93703 GB/s).
当我使用零复制缓冲区(CL_MEM_ALLOC_HOST_PTR + clEnqueueMapBuffer)时也发生了这种情况.我搜索一些信息,如果固定内存和零复制缓冲区具有高传输速率,但它仍然受限于PCIe带宽用于独立GPU.那么,如果传输速率超过PCIe带宽(使用PCIe带宽2.0 x 16),这是正常的吗?
我的操作系统是Windows 7 64位.我使用AMD APP SDK 2.6和独立GPU AMD HD 6630M.
编辑:这是代码:
#include <Windows.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include <CL/cl.h>
#endif
#define MAX_SOURCE_SIZE (0x100000)
cl_context context = NULL;
cl_command_queue queue = NULL;
cl_program program = NULL;
void MatrixMul(cl_mem d_A, cl_mem d_B, cl_mem d_C, int size)
{
cl_int err;
cl_kernel naive;
// Create Kernel Object Bound To …Run Code Online (Sandbox Code Playgroud) opencl ×1