草庐IT

OpenMP_FLAG_DETECTED

全部标签

c++ - 如何确定是否在 openMP 并行区域内?

在我的代码中,我想避免从任何openMP并行区域内抛出异常(因为如果未在同一区域内捕获,这将导致未处理的异常)。为此,我尝试使用openmp运行时库函数omp_in_parallel();决定是抛出异常还是写出错误信息并终止。但是,在gcc4.7.0下,如果并行区域只有一个线程,这将不起作用:#include#includevoiddo_something(){if(!omp_in_parallel())//omp_in_parallel()returnsfalse!throw3;//soshouldbeabletosafelythrow}intmain(){omp_set_num_t

c++ - 我怎么能在 VC 2008 中删除 "error C4335: Mac file format detected"

我现在用VC++2008编译一个项目,得到的错误如下:Error7errorC4335:Macfileformatdetected:pleaseconvertthesourcefiletoeitherDOSorUNIXformat我想知道如何解决此类错误。我找到了thislink有用,但该解决方案适用于VC++2010而不是VC++2008。任何建议将不胜感激。 最佳答案 对于VS2012,在解决方案资源管理器中选择并打开文件。文件->高级保存选项->设置编码:西欧(Windows)&&设置行结尾:Unix

c++ - 使用 atomic_flag 自旋锁进行内存排序

我正在尝试熟悉c++11的新内存排序概念,并且相信我实际上已经很好地掌握了它们,直到我偶然发现了自旋锁的这个实现:#includenamespaceJayZ{namespaceTools{classSpinLock{private:std::atomic_flagspin_lock;public:inlineSpinLock(void):atomic_flag(ATOMIC_FLAG_INIT){}inlinevoidlock(void){while(spin_lock.test_and_set(std::memory_order_acquire));}inlinevoidunlock

c++ - OpenMP:深度优先搜索的好策略

我正在编写一个C++程序,对已关闭的Knight'stours进行暴力搜索。.密码是here.我想使用OpenMP将其并行化。我的问题是以创建足够程度的并行性的方式来执行此操作。目前therelevantportion我的代码看起来像这样#pragmaompparallelforreduction(+:count)if(depth==4)for(size_ti=0;iif(depth==4)是我尝试确保不会创建太多并行任务,但另一方面创建的并行任务足以让所有处理器保持忙碌。设置depth==2不会改变程序的运行时间。这似乎行不通。对于3x12问题,在我的双核处理器上,OpenMP版本消

c++ - openmp条件并行循环

如果满足特定条件,我正在尝试使用openmpfor循环。如果条件成立,我可以简单地使用ifelse语句来使用并行for循环,但是for循环中的代码有点长,如果我只使用ifelse语句,代码长度会加倍。所以基本上,我想要一个更好的方法来做到这一点:if(condition_holds){//useparallelforloop#pragmaompparallelforfor(...){//Longpieceofcode}}else{//Don'tuseparallelforloopfor(...){//Longpieceofcode}}这样我就不必在for循环中编写代码两次。

c++ - 如何判断 OpenMP 是否适用于我的 C++ 程序

我正在使用OpenMP对我的嵌套循环进行多线程处理。由于是新手,我不确定我是否以正确的方式使用OpenMP,以便它实际上可以进行并行编程。所以我想知道我是否可以测量使用OpenMP的C++程序的性能,以便我可以判断它是否确实有效并且我走在正确的轨道上?比如有多少线程并行运行,每个线程完成需要多长时间。谢谢和问候! 最佳答案 #include...inttarget_thread_num=4;omp_set_num_threads(target_thread_num);unsignedlongtimes[target_thread_n

c++ - 多线程 (openMP) - 有多少并行线程

我想知道在8核的硬件上是否可以并发运行超过8个线程。如果是这样,使用openMP并行化N个计算,我可以创建大小为N/8的block,并在每个线程中进一步fork成(N/8)/8个线程,甚至更多?嵌套并行化时会发生什么情况?我还有8个可用线程用于嵌套并行吗?谢谢!! 最佳答案 8核在给定的时间点最多只能同时运行8个线程。但是,很大程度上取决于您的线程在做什么。如果他们正在执行CPU密集型任务,则不建议生成比内核数量更多的线程(几个可能没问题)。否则过多的上下文切换和缓存未命中将开始降低性能。但是,如果有大量I/O,线程可能会阻塞很多,

c++ - OpenCV 2.4.2 错误 "OpenCV Error: Bad flag"

我刚开始尝试使用OpenCV,并且根据一本书编写了一个非常简单的小程序。问题是当我尝试编译它时,出现此错误。我会告诉你我所有的信息。我使用Homebrew软件为MacOSX10.7安装了openCV。#include#includeintmain(intargc,char*argv[]){cv::Matimage=cv::imread("usf.gif");cv::namedWindow("MyImage");cv::imshow("MyImage",image);cv::waitKey(5000);return1;}我喜欢这样编译:g++-otestopencvtest.cc-lop

c++ - 在运行时本地启用/禁用 OpenMP

是否可以在运行时启用或禁用OpenMP并行化?我有一些代码应该在某些情况下并行运行,而不是在不同情况下并行运行。同时,其他线程中的其他计算也使用OpenMP,应该始终并行运行。有没有办法告诉OpenMP不要在当前线程中并行化?我知道omp_set_num_threads,但我假设全局设置OpenMP使用的线程数。 最佳答案 您可以使用的替代方法是将if条件添加到#pragmaomp结构中。只要条件为假,这些将跳过对从编译指示派生的OpenMP运行时调用的调用。考虑以下使用基于变量t和f(分别为true和false)的条件的程序:#i

c++ - OpenMP - 只创建一次线程

我尝试使用OpenMP编写简单的应用程序。不幸的是我有加速问题。在这个应用程序中,我有一个while循环。这个循环的主体由一些应该按顺序执行的指令和一个for循环组成。我使用#pragmaompparallelfor使这个for循环并行。这个循环没有太多工作,但被调用得非常频繁。我准备了两个版本的for循环,并在1、2和4核上运行应用程序。版本1(for循环中的4次迭代):22秒、23秒、26秒。版本2(for循环中的100000次迭代):20秒、10秒、6秒。如您所见,当for循环没有太多工作时,2核和4核上的时间比1核上的时间长。我猜原因是#pragmaompparallelfor