摘要: 单节点情况下 不显式绑定CPU核心 MPI运行时环境会依赖操作系统来管理MPI进程与CPU核心的映射和调度。操作系统会尝试均匀分配负载,但可能会出现缓存污染、上下文切换开销增加以及 NUMA 访问延迟等问题。 默认调度 操作系统的默认调度器会将进程分配到可用的 CPU 核心上,尝试均匀分布负载。 M 阅读全文
posted @ 2024-05-30 20:43 酥炸小黄瓜 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 六大基础函数 MPI_Init int MPI_Init(int *argc, char ***argv)初始化 MPI 环境 MPI_Finalize int MPI_Finalize(void)结束MPI环境 MPI_Comm_rank int MPI_Comm_rank(MPI_Comm co 阅读全文
posted @ 2024-03-17 12:57 酥炸小黄瓜 阅读(19) 评论(0) 推荐(0) 编辑
摘要: gpu dcu 阅读全文
posted @ 2024-03-16 17:09 酥炸小黄瓜 阅读(17) 评论(0) 推荐(0) 编辑
摘要: task制导 显式地将代码块作为任务创建,并将这些任务分配给线程池中的线程执行,多个任务可以并行执行,每个任务都可能在不同的线程上执行。通过#pragma omp task指令来创建任务,以及通过#pragma omp taskwait指令来等待任务的完成。 #include <iostream> 阅读全文
posted @ 2024-03-16 14:31 酥炸小黄瓜 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 常用函数。 #include <iostream> #include <omp.h> #define NUM_THREADS 16 using namespace std; int main(int argc, char* argv[]){ omp_set_num_threads(NUM_THREA 阅读全文
posted @ 2024-03-15 17:32 酥炸小黄瓜 阅读(9) 评论(0) 推荐(0) 编辑
摘要: OpenMP是基于共享内存编程模型的,这意味着除非明确指定,否则所有的变量在并行区域中都是共享的。 使用default子句,程序员可以更改这种默认行为。default(none)指定在并行区域内,除非明确指定为shared或private,否则所有变量都是未定义的。这要求程序员显式地指定每个变量的作 阅读全文
posted @ 2024-03-15 16:55 酥炸小黄瓜 阅读(58) 评论(0) 推荐(0) 编辑
摘要: collapse子句用于将多个嵌套的循环折叠成一个单独的循环。这个特性通常用于在嵌套循环上并行化以提高性能。参数n指定了折叠的层数。 #include <iostream> #include <omp.h> using namespace std; int main(int argc, char* 阅读全文
posted @ 2024-03-15 16:27 酥炸小黄瓜 阅读(268) 评论(0) 推荐(0) 编辑
摘要: OpenMP 中的锁(lock)是一种同步机制,用于保护共享资源,以防止多个线程同时访问或修改它,从而避免竞态条件。锁允许线程在访问临界区之前获取锁,并在退出临界区时释放锁。这样可以确保在任何给定时间只有一个线程能够访问临界区,从而保证了数据的一致性。 简单锁 最基本的锁,只能被一个线程锁定。当一个 阅读全文
posted @ 2024-03-15 13:35 酥炸小黄瓜 阅读(130) 评论(0) 推荐(0) 编辑
摘要: nowait nowait是OpenMP中用于指示编译器在并行执行完指定代码块后不需要隐式等待的指令。通常情况下,当并行区域的代码执行完毕后,OpenMP 会隐式地等待所有线程都执行完毕,然后再继续执行下面的代码。但是,如果在并行区域的结尾使用了nowait指令,则编译器会立即执行下面的代码,而不等 阅读全文
posted @ 2024-03-12 16:09 酥炸小黄瓜 阅读(151) 评论(0) 推荐(0) 编辑
摘要: critical制导 critical 用于在多线程环境中确保临界区代码的互斥执行。临界区是一段代码,当多个线程同时尝试访问共享资源时,只允许一个线程执行,以防止数据竞争和不确定行为。由于 critical 区域会引入串行化,过度使用会降低并行性能,因此应谨慎使用,只在必要时才使用 critical 阅读全文
posted @ 2024-03-12 10:12 酥炸小黄瓜 阅读(341) 评论(0) 推荐(0) 编辑