摘要: 1、提示与技巧 访问内存的成本非常高,一次缓存未命中可能会耗费100~300个周期。L3缓存加载需要40~50个周期,L2缓存大约需要10个周期,即使L1缓存的访问速度也明显慢于寄存器。所以要尽量保持数据结构对SIMD友好,优先选择std::vector、CAtlArray、eastl::vecto 阅读全文
posted @ 2023-11-04 17:15 MoonZZZ 阅读(438) 评论(0) 推荐(0) 编辑
摘要: 1、算术指令 算术类型 函数示例 加 _mm_add_epi32、_mm256_sub_epi16 减 _mm_sub_epi32、_mm256_sub_epi16 乘 _mm_mul_epi32、_mm_mullo_epi32 除 无 水平加/减 _mm_hadd_epi16、_mm256_hsu 阅读全文
posted @ 2023-11-04 15:47 MoonZZZ 阅读(569) 评论(0) 推荐(0) 编辑
摘要: 1、算术指令 算术类型 函数示例 备注 加 _mm_add_sd、_mm256_add_ps 减 _mm_sub_sd、_mm256_sub_ps 乘 _mm_mul_sd、_mm256_mul_ps 除 _mm_div_sd、_mm256_div_ps 平方根 _mm_sqrt_sd、_mm256 阅读全文
posted @ 2023-11-04 13:09 MoonZZZ 阅读(680) 评论(0) 推荐(0) 编辑
摘要: 1、重解释转换 虽然128位的XMM寄存器在硬件上只是256位YMM寄存器的下半部分,但在C++中它们是不同的类型。有一些intrinsic函数可以将它们重新解释为不同的类型,如下表所示,行代表源类型,列代表目标类型。 __m128 __m128d __m128i __m256 __m256d __ 阅读全文
posted @ 2023-11-04 12:05 MoonZZZ 阅读(652) 评论(0) 推荐(0) 编辑
摘要: 1、简介 SIMD(Single Instruction, Multiple Data)是一种并行计算技术,它通过向量寄存器存储多个数据元素,并使用单条指令同时对这些数据元素进行处理,从而提高了计算效率。SIMD已被广泛应用于需要大量数据并行计算的领域,包括图像处理、视频编码、信号处理、科学计算等。 阅读全文
posted @ 2023-11-04 10:50 MoonZZZ 阅读(2185) 评论(0) 推荐(3) 编辑
摘要: ## 1、标准原子类型 标准原子类型的定义位于头文件``内。原子操作的关键用途是取代需要互斥的同步方式,但假设原子操作本身也在内部使用了互斥,就很可能无法达到期望的性能提升。有三种方法来判断一个原子类型是否属于无锁数据结构: - 所有标准原子类型(`std::atomic_flag`除外,因为它必须 阅读全文
posted @ 2023-09-05 21:54 MoonZZZ 阅读(230) 评论(0) 推荐(0) 编辑
摘要: ## 1、条件变量 当线程需要等待特定事件发生、或是某个条件成立时,可以使用条件变量`std::condition_variable`,它在标准库头文件``内声明。 ```c++ std::mutex mut; std::queue data_queue; std::condition_variab 阅读全文
posted @ 2023-09-04 21:05 MoonZZZ 阅读(94) 评论(0) 推荐(0) 编辑
摘要: ## 1、使用互斥量 在C++中,我们通过构造`std::mutex`的实例来创建互斥量,调用成员函数`lock()`对其加锁,调用`unlock()`解锁。但通常更推荐的做法是使用标准库提供的类模板`std::lock_guard`,它针对互斥量实现了RAII手法:在构造时给互斥量加锁,析构时解锁 阅读全文
posted @ 2023-09-03 12:24 MoonZZZ 阅读(87) 评论(0) 推荐(0) 编辑
摘要: ## 1、线程的基本管控 包含头文件``后,通过构建`std::thread`对象启动线程,任何可调用类型都适用于`std::thread`。 ```c++ void do_some_work(); struct BackgroundTask { void operator()() const; } 阅读全文
posted @ 2023-09-02 10:43 MoonZZZ 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 统一内存(unified memory)是一种逻辑上的概念,它既不是显存、也不是主机内存,而是CPU和GPU都可以访问并能保证一致性的虚拟存储器。使用统一内存对硬件有较高的要求: - 对于所有功能,GPU架构都必须不低于Kepler架构,主机应用程序必须为64位。 - 对于一些较新的功能,至少需要P 阅读全文
posted @ 2023-08-12 10:58 MoonZZZ 阅读(403) 评论(0) 推荐(0) 编辑