OpenMP矩阵向量乘法只在一个线程上执行
OpenMP Matrix-Vector Multiplication Executes on Only One Thread
我有这段代码(如下所示)用于并行化矩阵-向量乘法。但是每当我运行它时,我发现它只在一个线程上执行(即使我指定了4个线程)。我如何将并行代码的部分分开在单独的线程上运行?任何帮助都将非常感激。由于
int nthreads;
nthreads = 4;
omp_set_num_threads(nthreads);
chunk = m/nthreads;
#pragma omp parallel for private(i,j,H) schedule(static,chunk)
for (i=0; i<m; i++ ){
C[i]=0;
for (j=0; j<p; j++) {
int H = omp_get_thread_num();
C[i] += (A[i+(j*m)]*B[j]);
}
}
您是否将此片段包含在#pragma omp parallel{...}
中,或者您可能缺少parallel
这个词?
您必须指定线程数。您可以使用OMP_NUM_THREADS环境变量来执行此操作。
您确定您正在编译启用Openmp吗?如果是这样,编译器应该抛出一个错误,因为变量H
被声明在包含private(i, j, H)
子句的并行区域的范围内。
根据您的编译器,您应该添加相应的OpenMp标志,例如gcc的-fopenmp
。您还可以通过调用omp_get_num_threads()
在运行时检查可用线程的数量。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- 在另一个线程中调用luaL_error会引发qWarning
- C++一个线程如何正确通信其任务已完成?
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- C++线程:如何在一个线程仍在运行时阻止另一个线程执行 (Win32)
- 如何制作一个只能在一个线程上同时执行的函数?
- 结束另一个线程中使用的对象的生存期
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 一个线程等待多个线程事件
- 从不同进程中的另一个线程挂起/恢复线程或进程
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- 计时器是否从另一个线程启动?
- 互斥,Windows 10,c ++,在一个线程上获取,在另一个线程上发布
- Qt 在另一个线程中无限循环
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 当只有一个线程主要使用该对象而其他线程很少使用它时,如何最小化该对象的互斥锁锁定?
- 从另一个线程发出信号是否安全?
- AMQP-CPP,libev >停止ev_loop来自另一个线程