Куда трансформация кода шла? [закрытый]

Я хотел отследить прогресс, основываясь на количестве строк, которые выводила команда, против целевого числа строк из предыдущего запуска:

#!/bin/bash
function lines {
  local file=$1
  local default=$2
  if [[ -f $file ]]; then
    wc -l $file | awk '{print $1}';
  else
    echo $default
  fi
}

function bar {
  local items=$1
  local total=$2
  local size=$3
  percent=$(($items*$size/$total % $size))
  left=$(($size-$percent))
  chars=$(local s=$(printf "%${percent}s"); echo "${s// /=}")
  echo -ne "[$chars>";
  printf "%${left}s"
  echo -ne ']\r'
}

function clearbar {
  local size=$1
  printf " %${size}s  "
  echo -ne "\r"
}

function progress {
  local pid=$1
  local total=$2
  local file=$3

  bar 0 100 50
  while [[ "$(ps a | awk '{print $1}' | grep $pid)" ]]; do
    bar $(lines $file 0) $total 50
    sleep 1
  done
  clearbar 50
  wait $pid
  return $?
}

Затем используйте его так:

target=$(lines build.log 1000)
(mvn clean install > build.log 2>&1) &
progress $! $target build.log

Он выводит индикатор выполнения, который выглядит примерно так:

[===============================================>   ]

Индикатор растет по мере того, как количество выводимых строк достигает цели. Если количество строк превышает цель, планка начинается снова (надеюсь, цель хорошая).

Кстати: я использую bash на Mac OSX. Я основал этот код на счетчике из Мариасио .

16
задан Stefano Borini 30 June 2009 в 00:10
поделиться

6 ответов

The company did not do as well as they expected, and were eventually acquired by Novafora for it's power-saving technology. ( http://www.novafora.com/pr01-28-09.html )

From all accounts that I am aware of, the technology simply did not compete with existing systems. They fell far short of their performance numbers. Also, while it may have been possible to put another translator on top of their VLIW design, I'm not aware of any products they produced that did. I don't remember the Crusoe chip being able to accept an alternative "translation" microcode download.

I personally owned a device that used a Crusoe processor, and while it certainly delivered on battery life, the performance of the device was dismal. Some of the blame could probably be leveled on the special version of Windows it used, but it was still slow.

At best, it was good for portable remote desktop.

IMHO, the technology has the same benefits as software VM's like .Net and the JVM:

  • The upside is that you can probably ускорить код с помощью аппаратное решение (например, IBM с это процессоры ускорителя Java) чем чистый программный JIT.
  • Обратной стороной является то, что вы никогда не получаете сырого производительность, выполняемая процессорами Собственный код get.

С некоторых точек зрения современные чипы x86 можно рассматривать как преобразование кода, хотя и как очень специализированные. Они переводят архитектуру x86 в более эффективный набор подинструкций, подобных RISC, а затем выполняют их.

Другим примером такого рода технологий могут быть FPGA, которые можно запрограммировать для имитации на уровне схемы различных типов процессоров или необработанных схем. . Я считаю, что некоторые системы Cray могут поставляться с подобными «узлами ускорителя».

7
ответ дан 30 November 2019 в 22:02
поделиться

For one thing most CISC processors internally translate their opcodes to uops micro-ops which are similar to RISC ops. Pipelining and multiple cores have closed the gap on RISC processors to the point where it's a very small difference between them, if any. If you need cross compatibility from C source or another assembly front end you can use LLVM. http://llvm.org/

4
ответ дан 30 November 2019 в 22:02
поделиться

Очевидные плюсы:

  • Возможность запуска любой ОС (просто переключите эмуляцию процессора на то, что нужно)
  • Возможность (конечно, с поддержкой ядра) запускать двоичные файлы для разных архитектур на тот же процессор / ОС без поддержки программного обеспечения.

Очевидный недостаток:

  • Дополнительный уровень эмуляции == дополнительные накладные расходы == более быстрый процессор, необходимый для получения эквивалентной производительности для ВСЕГО.
3
ответ дан 30 November 2019 в 22:02
поделиться

I would say that cost reductions come with quantity, so something like the Transmeta chip has to sell a lot of volume before it can compete on price with existing high volume x86 chips.

If I recall, the point of the Transmeta chip was that it was low power. Having less silicon gates to flip back and forth every clock cycle saves energy. The code morphing was so you could run a complex instruction set (CISC) on a low power RISC chip.

Transmeta's first processor, the Crusoe, didn't do very well due to problems even running benchmark software. Their second processor, the Efficeon, did manage to use less power than the Intel Atom (in the same performance category), and perform better than the Centrino in the same power envelope.

Now, looking at it from the software and flexibility standpoint like you are, Code Morphing is just a form of Just-In-Time compilation, with all the benefits and detriments of that technology. Your x86 code is essentially running on a virtual machine and being emulated by another processor. The biggest benefit of virtualization right now is the ability to share a single processor among many virtual machines so you have fewer idle CPU cycles, which is more efficient (hardware cost and energy cost).

So it seems to me that code morphing, just like any form of virtualization, is all about being more efficient with resources.

3
ответ дан 30 November 2019 в 22:02
поделиться

Большинство современных процессоров фактически реализуют свои наборы команд с использованием микрокода . Для этого есть много причин, включая проблемы совместимости, но есть и другие причин.

На самом деле трудно провести различие между «аппаратным обеспечением» и «программным обеспечением». Современные виртуальные машины, такие как JVM или CIL (.NET), также могут быть реализованы аппаратно, но это, вероятно, все равно будет сделано с использованием микрокода.

Одна из причин наличия нескольких уровней абстракции в системе заключается в том, что в программистам / инженерам не нужно думать о несущественных деталях, когда они работают над более высокий уровень.

Операционная система и системные библиотеки также предоставляют дополнительные уровни абстракции. Но наличие этих уровней делает систему «медленнее» только в том случае, если не требуются функции, которые они предоставляют (т.е. планирование потоков, выполняемое ОС). Создать собственный программный планировщик, превосходящий планировщик ядра Linux, - непростая задача.

2
ответ дан 30 November 2019 в 22:02
поделиться

Чтобы узнать о другом подходе к аппаратной виртуализации x86 ISA, вы можете прочитать о ЦП Loongson 3 .

3
ответ дан 30 November 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: