高级内存优化
备注
本篇文档的数字仅做示例参考。具体数据,请以实际情况为准。
本文档帮你深入理解 MUSA 高级内存特性:系统内存优化、L2 缓存管理、Cluster 内存和异步执行。
页锁定内存
分配和释放
#include <musa.h>
#include <stdio.h>
int main() {
size_t size = 1000000 * sizeof(float);
// 分配页锁定内存
float* h_pinned;
musaMallocHost(&h_pinned, size);
// 初始化数据
for (int i = 0; i < 1000000; i++) {
h_pinned[i] = float(i);
}
// 使用完成后释放
musaFreeHost(h_pinned);
return 0;
}
异步内存传输
void asyncTransfer(float* h_pinned, float* d_data, size_t size) {
musaStream_t stream;
musaStreamCreate(&stream);
// 异步 H2D 拷贝
musaMemcpyAsync(d_data, h_pinned, size,
musaMemcpyHostToDevice, stream);
// 启动 kernel(与传输重叠)
processKernel<<<grid, block, 0, stream>>>(d_data);
// 异步 D2H 拷贝
musaMemcpyAsync(h_pinned, d_data, size,
musaMemcpyDeviceToHost, stream);
// 等待完成
musaStreamSynchronize(stream);
musaStreamDestroy(stream);
}