“local memory program”与“serial program”是否等同?无并行接口的程序是否属于本地内存程序?
问题1:“local memory program”和“serial program”是否为同一概念?
二者完全不是同一概念,核心判定维度完全不同:
- *本地内存程序(local memory program)*的核心判断标准是内存访问范围:程序运行过程中用到的所有内存资源都属于当前进程的本地地址空间,不需要跨节点、跨进程访问远端内存。这类程序既可以是串行执行的,也可以是单节点上的共享内存并行程序(比如用OpenMP、pthreads实现的多线程并行程序,只要跑在单节点上都属于本地内存程序)。
- *串行程序(serial program)*的核心判断标准是执行逻辑:程序全程只有一条执行流,同一时间只会占用一个CPU核心,没有任何并行调度逻辑。所有串行程序都属于本地内存程序的子集,但本地内存程序的范围远大于串行程序,二者不能划等号。
问题2:未实现pthreads、MPI、OpenMP等并行接口的代码是否属于本地内存程序?
你给出的这段代码可以被认定为本地内存程序:
int main() { int arr[] = { 10, 7, 8, 9, 1, 5 }; int n = sizeof(arr) / sizeof(arr[0]); quickSort(arr, 0, n - 1); printf("Sorted quicksort: \n"); printArray(arr, n); return 0; }
这段代码没有任何跨节点、跨进程的远端内存访问逻辑,所有操作的变量和数组都在当前进程的栈空间分配,完全满足本地内存程序的判定条件。同时它也属于典型的串行程序,没有调用任何并行编程接口,全程只有单执行流运行。
内容的提问来源于stack exchange,提问作者marti
相关产品推荐
相关产品推荐

