我最近在使用不同的内核,我注意到我的读/写效率低(至少在我看来)。
我读到了关于合并内存访问的内容,我想我明白了,但我不知道出了什么问题。所以我去了一个简单的测试:
__kernel void TestCoalesced(__global float* data) {
data[get_global_id(0)] = 200.0f;
}
我将内核排列如下:
m_err = clEnqueueNDRangeKernel(m_queue, m_kernel, 1, NULL, (size_t)(6220800), NULL, 0, NULL, NULL);
这是一个类似于我之前使用的图像的示例调用(1920 * 1080 * 3 = 6220800 =约6mb)。
因此内核只是在数组中的工作项位置写入。这应该不会更快?这需要大约1.06ms,当我查看CodeXL时,缓存命中率为0。
我有什么问题吗?我有一台带有2Go的AMD Radeon R7 200系列。
编辑:
根据以下评论,我的问题可能会改为:
是否有任何工具或探查器可以知道我的数据访问是否已合并?因为我觉得我的内核运行缓慢,所以这么简单。