标签: processor

如何确保代码运行时不会因缓存而导致执行时间发生变化?

在具有硬实时约束的嵌入式应用程序(在 32 位处理器上用 C 语言编写)中,关键代码(特别是中断)的执行时间需要保持恒定。

如何确保代码执行过程中不会引入时间可变性,特别是由于处理器的缓存(无论是 L1、L2 还是 L3)?

请注意,我们关心缓存行为,因为它对执行速度有巨大影响(有时与访问 RAM 相比超过 100:1)。由于特定处理器架构而引入的可变性远不及高速缓存的大小。

time profiling caching processor

5
推荐指数
1
解决办法
485
查看次数

Intel Core Duo 上的硬件性能计数器

我读到有 AMD 处理器可以让您测量缓存命中和未命中的数量。我想知道 Intel Core Duo 机器上是否也提供这样的功能,或者它们是否尚不支持。

performance x86 processor intel intel-pmu

5
推荐指数
2
解决办法
1885
查看次数

C:线程 semaphore_wait 与 while 循环

以下代码片段在处理器使用方面有什么区别吗?

void *ManageSequencer(void *argument){
  SomeClass *someClass = (SomeClass *)argument;

  while (someClass->ThreadIsAlive()) {

    while(someClass->isAsleep) { }

    someClass->isAsleep = true;

    //thread execution statements 

  }
  return argument;
}
Run Code Online (Sandbox Code Playgroud)

其中某个类isAsleep=false在需要线程执行时定期设置

或者

void *ManageSequencer(void *argument){
  SomeClass *someClass = (SomeClass *)argument;

  while (someClass->ThreadIsAlive()) {

    semaphore_wait(sem);

    //thread execution statements 

  }
  return argument;
}
Run Code Online (Sandbox Code Playgroud)

其中 someClasssemaphore_signal(sem);在需要线程执行时定期调用。

这个问题与原子性无关,只是 while 循环是否会导致处理器比信号量解决方案做更多的工作。信号量内部是否只有一个 while 循环,该循环会阻塞直到满足条件(信号量的增量大于零)?

c semaphore processor pthreads while-loop

5
推荐指数
1
解决办法
2220
查看次数

如何将参数发送到回形针处理器

我试图了解如何将模型值发送到回形针自定义处理器中,但无法弄清楚为什么它如此困难,或者解决方案可能是什么,因为我现在正在尝试解决这个问题几天...这是我的代码,从我的模型和处理器中提取。

从我的模型来看:

...
  has_attached_file :receipt_file,
                    :storage => :s3,
                    :s3_credentials => "#{Rails.root}/config/s3.yml",
                    :path => "/:style/:id/:filename",
                    :s3_protocol => "https",
                    :styles => { :text => { style: :original, receipt_id: self.id }},
                    processors: [:LearnProcessor]
...
Run Code Online (Sandbox Code Playgroud)

为什么我不能使用“self.id”来获取收据 ID ?它是如何"/:style/:id/:filename"被翻译成类似/original/1/abc.pdf, 如果我输入receipt_id: :id, 我得到的只是options[:receipt_id](见下文):id而不是1

我需要某种插值吗?

处理器代码

module Paperclip

    class LearnProcessor < Processor
      attr_accessor :receipt_id,:style


      def initialize(file, options = {}, attachment = nil)
        @file           = file
        @current_format = File.extname(@file.path)
        @basename       = File.basename(@file.path, @current_format)
        @style = options[:style] …
Run Code Online (Sandbox Code Playgroud)

ruby arguments ruby-on-rails processor paperclip

5
推荐指数
1
解决办法
1707
查看次数

有关 Windows 注册表中的 CurrentProcessor FeatureSet 的信息?

我在安装程序中使用一些基本的处理器检测,以确定用户应该可以使用哪个版本的软件包。目前,我正在通过 WMI 获取一些基本信息,但我发现这样做时,我经常会得到不可靠的 CPU 功能结果(显然,许多移动处理器对 CPUID 的支持很差)。

为了避免此类问题并加快速度,我一直在考虑从 Windows 注册表获取处理器功能 - 毕竟,所有信息都应该在那里可用,位于HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor下{n} 从注册表中读取密钥使安装程序的代码更加简单,无需调用 WMI(速度很慢并且可能会失败,因为我必须依赖于调用具有 WMI 访问权限的 VBScript 等语言,虽然注册表操作在我的开发脚本语言中作为标准支持),并且应该避免通过它从 CPU 值问题中获取不正确的信息。

当然,我找到了大量信息,但最重要的部分,即存储在那里的“ FeatureSet ”值,我认为它是一个 DWORD,包含有关可用处理器功能(如 SIMD 指令集等)的标志,但没有在任何地方记录。我花了很长时间在网上搜索,试图找到有关此注册表值的任何类型的文档,但无济于事。

有人有概述或描述该注册表值中的位的文档吗?

windows registry processor simd

5
推荐指数
1
解决办法
1598
查看次数

如何以编程方式从设备获取片上系统数据

我想以编程方式获取完整的处理器名称,就像 CPU-Z 应用程序那样。例如:高通骁龙800。最后一项对我来说是最重要的信息,即800。

android processor soc

5
推荐指数
1
解决办法
2504
查看次数

多线程比单线程快吗?

我想检查多线程是否比单线程快,然后我在这里做一个演示:

public class ThreadSpeedTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println("cpu number:"
                + Runtime.getRuntime().availableProcessors());
        singleThreadStart();
//      secondThreadStart();
//      fiveThreadStart();
    }

    private static void sum() {
        long sum = 0;
        for (int i = 0; i < 1000000; i++) {
            sum += i;
        }
        System.out.println(sum);
    }

    private static void singleThreadStart() {
        new Thread(new Runnable() {

            public void run() {
                long start = System.nanoTime();
    //          sum();
    //          sum();
    //          sum();
                sum();
                sum();
                long end = System.nanoTime(); …
Run Code Online (Sandbox Code Playgroud)

java multithreading processor

5
推荐指数
1
解决办法
8173
查看次数

ARM 处理器是否有无效队列?

ARM 处理器是否有无效队列?我查找了 ARM 架构参考手册[ https://www.scss.tcd.ie/~waldroj/3d1/arm_arm.pdf],但它没有提到“无效队列”(它确实提到了“写入缓冲区”),那么这是否意味着ARM没有无效队列?

multithreading arm processor cpu-architecture

5
推荐指数
0
解决办法
102
查看次数

为什么ARM将返回地址保存在链接寄存器而不是堆栈中?

我一直在寻找这个答案一个多星期了,但没有运气。到目前为止,我已经了解到堆栈会在函数嵌套或中断发生时保存返回地址,但最近我了解到现代处理器使用链接寄存器来实现相同的目标。经过一些研究,我开始知道堆栈确实被用来保存旧处理器中的返回地址。但是,当旧的实现工作时,为什么现代处理器使用整个单独的寄存器( LR )来保存返回地址对我来说没有意义?LR 相对于基于堆栈的实现有什么好处?

提前致谢!!!

arm processor

5
推荐指数
1
解决办法
2730
查看次数

内存栅栏和内存屏障是一样的吗?

在这里,我对术语“记忆栅栏”(Rust 中的栅栏功能)感到困惑。我可以清楚地理解原子方面的内存屏障是什么,但我无法弄清楚什么是内存栅栏。

内存栅栏和内存屏障是一样的吗?如果不是,有什么区别以及何时使用内存栅栏而不是内存屏障?

c++ processor atomic rust

5
推荐指数
2
解决办法
4229
查看次数