AVX-512CD(冲突检测)与原子变量访问有何不同?
Posted
技术标签:
【中文标题】AVX-512CD(冲突检测)与原子变量访问有何不同?【英文标题】:How AVX-512CD (conflict detection) differs from atomic variables access? 【发布时间】:2017-03-27 14:42:40 【问题描述】:所以我在看this ANL Training video,他们展示了如何
void Histogram ( const float* age, int* const hist, const int n, const float group_width, const int m)
const float oogw = 1.0f / group_width;
// Populating the histogram.
for( int i = 0; i < n; i++)
// Calculating the index of the bin age[i] goes to.
const int j = (int) ( age[i] * oogwflh );
// Incrementing the appropriate bin in the histogram.
hist[j]++;
并且循环被verctorized。带有this 指令。
它与原子有什么不同,期望编译器将来在指令级别(针对不同的实体,例如 POD 结构)提供冲突检测支持是否合理?
【问题讨论】:
【参考方案1】:AVX512 冲突检测指令检测当单个分散指令多次写入同一存储位置时会发生的冲突。这是同一条指令中不同向量通道之间的冲突。
原子操作可以防止当多个逻辑CPU“同时”执行加载/存储到同一地址时发生的竞争条件。
因此,如果您的代码是矢量化的,即使它运行单线程,您也需要冲突检测指令,而在您的代码被并行化并使用多个线程执行之前,不需要原子操作。
【讨论】:
以上是关于AVX-512CD(冲突检测)与原子变量访问有何不同?的主要内容,如果未能解决你的问题,请参考以下文章
当使用带有 AVX-512 加载和存储的屏蔽寄存器时,是不是会因对屏蔽元素的无效访问而引发错误?