【发布时间】:2018-12-01 00:15:21
【问题描述】:
我正在尝试在 C++ 中使用 CUBLAS 重写一个 python/tensorflow 脚本,该脚本对批量输入样本(形状为 BxD,B:BatchSize,D:扁平二维矩阵的深度)进行操作
第一步,我决定使用 CUBLAS cublasSgemmBatched 来计算批量矩阵的 MatMul。
我在link to the question 中找到了几个工作示例代码, 但我想要的是分配一个大的连续设备阵列来存储成批的扁平相同形状的矩阵。我不想在设备内存上存储彼此分开的批次(因为它们在给定的 StackOverflow 问题链接中提供的示例代码中)
根据我的想象,我必须以某种方式获取指向设备内存上每个批次的起始元素的指针列表。像这样:
float **device_batch_ptr;
cudaMalloc((void**)&device_batch_ptr, batch_size*sizeof(float *));
for(int i = 0 ; i < batch_size; i++ ) {
// set device_batch_ptr[i] to starting point of i'th batch on device memory array.
}
请注意,cublasSgemmBatched 需要一个 float**,其中的每个 float* 都指向给定输入矩阵中每个批次的起始元素。
任何意见和建议将不胜感激。
【问题讨论】: