草庐IT

mars-cpu

全部标签

c++ - OpenMP 和 CPU 亲和性

sched_setaffinity或pthread_attr_setaffinity_np是否可以在OpenMP下设置线程关联?相关:CPUAffinity 最佳答案 是的,命名调用将用于设置线程关联。唯一的问题是修复线程数并在正确的线程中设置正确的亲和性(您可以尝试对已知线程数使用for循环的静态调度)。据我所知,几乎每个openmp都允许通过环境设置亲和性。环境变量的名称各不相同(前段时间还没有标准化)。我用http://www.spec.org/omp2001/results/omp2001.html找到openMP实现的页面

具有比 CPU 慢的快速 GPU 的 C++ AMP

我刚刚开始学习C++AMP,并且获得了一些使用VS2012RC构建的示例,但我发现GPU的性能比CPU慢。例如,KateGregory的示例:http://ampbook.codeplex.com/releases/view/90595(与她即将出版的书http://www.gregcons.com/cppamp/有关)。在我观看的一次讲座中,她展示了它们,她通过使用笔记本电脑的GPU(我相信她说的是6650)与CPU(不确定她使用的是什么CPU)相比,将第4章示例的性能提高了约5倍。我已经尝试自己测试示例并在几个系统配置(如下所示)上我总是发现CPU更快。我还测试了其他示例并发现相同

c++ - 使用 vsync (OpenGL) 时 CPU 利用率为 100%

这是一个非常简单的测试程序。当vsync被禁用时,该程序以100FPS的速度运行并且几乎占用0%的CPU。当我启用vsync时,我得到60FPS和25%(4核系统上一个核的100%)CPU利用率。这是使用NvidiaGPU。在线搜索让我想到了在Nvidia控制面板中禁用“多线程优化”的建议。这确实会降低CPU利用率,但只会降低到10%。此外,如果我在SwapBuffers之后删除对sleep的调用,即使禁用了多线程优化,我也会再次获得25%的利用率。任何人都可以阐明这一点吗?难道我做错了什么?Nvidia的OpenGL实现是否存在无可救药的缺陷?#include#include#inc

c++ - 返回的 cpu 时钟时间必须在运行中完全相同吗?

我有一个用C++编写的大项目。它可能有一些稳定性问题(即随机运行时),但我不确定。我知道由于操作系统多任务处理,执行时间(以挂钟时间衡量)在运行中可能会有所不同。但我不知道,对于稳定的程序来说,在具有相同输入的运行中,执行时间由cpu时钟时间测量不同是否正常。我尝试使用time.h中的clock()和boost::chrono:::process_user_cpu_clock::now();但在这两种情况下,我都在图表上看到了尖峰。我会给你一个这样的图表的例子。这里Y轴-执行时间,X轴-同一程序在相同输入数据上的连续运行。红色图-挂钟时间,红色-cpu时钟时间,由clock()从tim

c++ - 限制 CPU 速度以进行分析

我正在尝试优化应用程序的几个瓶颈,这些应用程序应该在非常广泛的CPU和架构(其中一些非常接近嵌入式设备)上运行。但是,由于我的CPU速度,我的分析器的结果并不是很重要。有没有什么方法(最好是在Windows或MacOSX下)来限制我的CPU速度以进行分析?我考虑过使用虚拟机,但还没有找到具有这种功能的虚拟机。 最佳答案 这很好用并且支持多核。http://www.cpukiller.com/ 关于c++-限制CPU速度以进行分析,我们在StackOverflow上找到一个类似的问题:

c++ - x64 CPU 上的原子 16 字节读取

我需要以原子方式读/写16个字节。我只使用cmpxchg16进行写作,它在所有x64处理器上都可用,除了我认为是一个不起眼的AMD处理器。现在的问题是对齐的16字节值,仅使用cmpxchg16进行修改(它就像一个完整的内存屏障)是否有可能读取一半旧数据和一半新数据的16字节位置?只要我用SSE指令读取(所以线程不能在读取中间中断)我认为读取是不可能的(即使在多处理器numa系统中)看到不一致的数据。我认为它必须是原子的。我假设当执行cmpxchg16时,它会原子地修改16个字节,而不是通过写入两个8字节的block,其他线程有可能在两者之间进行读取(老实说,我不明白它是怎么做到的)如果

c++ - ld 链接器错误 "cpu model hidden symbol"

尝试在ubuntu16.04上编译sfml程序时出现ld错误。这显然是一个已知问题,应该有解决方法,但我不明白它是什么...http://web.archive.org/web/20160509014317/https://gitlab.peach-bun.com/pinion/SFML/commit/3383b4a472f0bd16a8161fb8760cd3e6333f1782.patchld吐出的错误是hiddensymbol`__cpu_model'in/usr/lib/gcc/x86_64-linux-gnu/4.9/libgcc.a(cpuinfo.o)isreferenc

c++ - 为什么 std::shared_ptr 使用原子 cpu 操作

我无法理解为什么shared_ptr使用原子cpu指令...我无法找出原因,因为它不是线程安全的。有人可以解释一下吗。如果你想知道我是怎么知道它使用原子结构的:有一段来自C++的剪辑以及Herb和Andrei谈论它的地方,但他们从未提及为什么会这样。 最佳答案 shared_ptr的任何实例都是多线程安全的。它指向的数据不是多线程安全的。参见this.如果正确应用原子指令(通过竞争线程访问以相同顺序完成保护)是实现线程安全的一种方法。另一种方法是使用互斥体。查看BOOST的类似问题:Isboostshared_ptrxxxthrea

CPU、MPU、MCU、SOC的概念与区别

参考资料:SoC和MCU的区别CPU、MCU和SOC的区别以及外设的概念理解CPU、MPU、MCU和SOC还傻傻分不清楚看这篇文章就够了1.概念1.1CPU(CentralProcessingUnit)CPU(CentralProcessingUnit),是一台计算机的运算核心和控制核心。CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构成。众所周知的三级流水线:取址、译码、执行的对象就是CPU,差不多所有的CPU的运作原理可分为四个阶段:提取(Fetch)、解码(Decode)、执行(Execute)和写回(Writeback)。CPU从存储器或高速缓冲存储器中取出指

c# - Windows 上的 Java 需要记录 CPU 负载和类似的操作系统特定性能信息

有一个在Windows机器上运行的Java库需要记录有关操作系统的信息,例如CPU负载、JVM占用的内存等。我很确定Java本身无法获取这些信息,因为它是特定于操作系统的。此库的日志中需要此信息,以便向客户指出某些操作因库无法获得足够的资源而失败。无法选择JVM,即我们不能要求我们的客户应使用实现Windows操作系统特定功能的特定JVM。是否有可以通过JNI使用的Windows库(DLL)或API?我们也可以自己用C++或C#实现DLL,我需要在哪里查看如何最有效地完成此操作?编辑:我需要访问有关JVM本身进程的数据,我猜我只能通过nativeWindowsAPI获得这些数据。所以我