相关疑难解决方法(0)

如何有效地并行设置位向量的位?

考虑其中的位向量N(N大)和M数字数组(M中等,通常小得多N),每个都在范围内0..N-1指示必须将向量的哪个位设置为1.后一个数组未排序.位向量只是一个整数数组,具体而言__m256i,每个__m256i结构中包含256位.

如何在多个线程中有效地分割这项工作?

首选语言是C++(MSVC++ 2017工具集v141),汇编也很棒.首选CPU是x86_64(内在函数没问题).如果有任何益处,AVX2是理想的.

c++ algorithm parallel-processing x86 bit-manipulation

10
推荐指数
1
解决办法
613
查看次数

用于线程之间数据交换的内容是在一个Core上用HT执行的?

超线程技术是英特尔推出的一种同步多线程技术.

这些资源包括执行引擎,缓存和系统总线接口; 资源共享允许两个逻辑处理器更有效地相互协作,并允许停滞的逻辑处理器从另一个逻辑处理器借用资源.

在具有超线程的Intel CPU中,一个CPU内核(具有多个ALU)可以在同一时钟执行来自2个线程的指令.两个线程共享:存储缓冲区,缓存L1/L2和系统总线.

但是如果两个线程在一个Core上同时执行,则thread-1存储原子值,而thread-2加载此值,将用于此交换的内容:共享存储缓冲区,共享缓存L1/L2还是通常的缓存L3?

如果两个线程来自同一个进程(相同的虚拟地址空间)和两个不同进程(不同的虚拟地址空间),会发生什么?

Sandy Bridge Intel CPU - 缓存L1:

  • 32 KB - 缓存大小
  • 64 B - 缓存行大小
  • 512 - 行(512 = 32 KB/64 B)
  • 8路
  • 64 - 数组方式(64 = 512行/ 8路)
  • 6位[11:6] - 虚拟地址(索引)定义当前集合号(这是标记)
  • 4 K - 每个相同(虚拟地址/ 4 K)竞争同一组(32 KB/8路)
  • 低12位 - 对于确定当前设定数值很重要

  • 4 KB - 标准页面大小

  • 低12位 -每个地址的虚拟和物理地址相同

在此输入图像描述

concurrency x86 multithreading x86-64 hyperthreading

3
推荐指数
1
解决办法
721
查看次数