А воз и ныне здесь
Thursday, 29 November 2007 22:46(По наводке
fantaseour)
Неудержимый прогресс информационных технологий, говорите?
Но я назвал это второстепенной причиной; первостепенная же кроется в том, что... машины стали на несколько порядков мощнее! Говоря прямолинейно: пока машин не было вовсе, не существовало проблемы программирования; когда появились немногочисленные слабые компьютеры, программирование стало малозаметной проблемой; а теперь, когда у нас есть гигантские компьютеры, программирование само превратилось в гигантскую проблему. В этом смысле электронная промышленность не решила ни единой проблемы, она только породила их, создав проблему использования своей продукции. Другими словами, по мере того как мощность доступных машин выросла более чем в тысячу раз, стремление общества найти им применение выросло пропорционально, и бедный программист вынужден метаться буквально по минному полю. Возросшая мощь оборудования совместно с, возможно, еще более возросшей надежностью, сделали возможными решения, о которых программист даже не отваживался мечтать несколько лет назад. А теперь, спустя несколько лет, он должен мечтать о них и, более того, он обязан воплощать эти мечты в реальность! Удивительно ли, что мы оказались в кризисе программирования? Конечно же, нет, и как вы можете догадаться, это даже было предсказано заранее; но трагедия пророков, предсказывающих неприятности, состоит в том, что только лет через пять вы действительно осознаете, что они были правы.Э. Дийкстра. 1972 год. 35 лет назад.
( отсюда )
Неудержимый прогресс информационных технологий, говорите?
no subject
Date: Thursday, 29 November 2007 21:05 (UTC)no subject
Date: Thursday, 29 November 2007 21:25 (UTC)Откуда можно заключить, что информационные технологии тоже стали приблизительно в 65536 раз мощнее.
no subject
Date: Thursday, 29 November 2007 23:00 (UTC)И ещё кстати: на самом деле программисты успели стать такими скромными, результатоориентированными и ошибкобоязненными, что сейчас опять стало модно писать на динамически типизированных языках, заниматься agile development (без стадии проектирования) и говорить, что жава сажает программиста в темниццу, а настоящие программисты обладают парадоксальным мышлением и обожают заумные трюки на лисповых макросах.
no subject
Date: Friday, 30 November 2007 01:43 (UTC)"Могут быть также препятствия политического характера. Если даже мы знаем, как учить завтрашних профессиональных программистов, неочевидно, что общество, в котором мы живем, позволит нам делать это. Первый эффект от обучения методологии - а скорее, распространения знаний - состоит в том, что, расширяя возможности уже возможного в данный момент, тем самым усиливается различие в интеллектуальных способностях. В обществе, где система образования используется как инструмент для создания однородной культуры, в котором сливкам не дают подниматься к вершине, обучение компетентных программистов может оказаться политически некорректным."
no subject
Date: Friday, 30 November 2007 06:18 (UTC)no subject
Date: Friday, 30 November 2007 12:27 (UTC)ЗЫ: И только в Индии программисты едины :)
no subject
Date: Saturday, 1 December 2007 18:46 (UTC)Средний компьютер 1972 года выполнял примерно 100 тысяч операций в секунду. Современный - считая на тактовую 2 ГГц, и существенные задержки из-за промахов в кэше - примерно 200 миллионов. Рост - 2000 раз.
Средний компьютер 1972 года имел 512KB памяти, современный - 1GB - рост в ~2000 раз.
Но: при этом компьютер такого класса, о котором я говорю, стоил около 200 тысяч долларов, а современный - около 400 долларов или даже меньше (я не учитываю монитор, навороченный звук и прочее). Умножив рост характеристик на падение цены, получаем рост в миллион раз. На больших задачах на параллельности много теряется на синхронизацию - получаем ~200000 раз.
Но на один компьютер остаются те же 2000 раз.
no subject
Date: Saturday, 1 December 2007 18:50 (UTC)no subject
Date: Saturday, 1 December 2007 20:58 (UTC)Предвидя очевидное возражение: нет, мне не кажется уместным сравнение "среднестатистической" неоптимизённой программы сейчас с круто оптимизённой, выжимающей все 100к операций в секунду, программой тогда.
Ещё, кстати, очень смешно получается, если смотреть не только на процессоры, но и на видеокарты, которые раз эдак в 50-200 мощнее в хорошо параллелящихся вычислениях, типа умножений матриц.
Сейчас ещё один коммент запощу, там будет немножко кода, который демонстрирует, что современные процессоры намного умнее, чем можно было бы предположить.
no subject
Date: Saturday, 1 December 2007 21:39 (UTC)no subject
Date: Saturday, 1 December 2007 22:14 (UTC)---
int main(int k) { int i, zzz = 13; k++; { double l = 13, j = k; #define op do { /*if (k != 0)/* */ {l *= 13; /* zzz *= k; /* */} } while(0) for (i=200000000/8; i; i--) { op; /* */ op; op; op; op; op; op; op;/* */ } return zzz + (int)l; } }---
PS C:\Programming> function measure
>> {
>> $zzz = Get-Date
>> ./test
>> ((Get-Date) - $zzz).TotalMilliseconds
>> }
>>
PS C:\Programming> cl /Fa /O2 /arch:SSE2 test.c
PS C:\Programming> measure
И видим 4 такта на условную итерацию. В листинге вполне предсказуемое:
$LL27@main (mailto:$LL27@main):
sub eax, 1
mulsd xmm1, xmm0
mulsd xmm1, xmm0
mulsd xmm1, xmm0
mulsd xmm1, xmm0
mulsd xmm1, xmm0
mulsd xmm1, xmm0
mulsd xmm1, xmm0
mulsd xmm1, xmm0
jne SHORT $LL27@main (mailto:$LL27@main)
(мне как-то удавалось его заставлять умножать за три такта, но я потерял скиллы. Или меня глючит).
То есть плавающее умножение жрёт четыре такта. Теперь удаляем в сурце стратегически расставленные комментоскобки и деление на 8, чтобы получить одну итерацию, зато с проверкой и дополнительным целочисленным умножением. Видим в листинге:
$LL7@main (mailto:$LL7@main):
; Line 12
test eax, eax
je SHORT $LN3@main (mailto:$LN3@main)
mulsd xmm0, xmm1
imul ecx, eax
$LN3@main (mailto:$LN3@main):
; Line 10
sub edx, 1
jne SHORT $LL7@main (mailto:$LL7@main)
А теперь угадайте, сколько тактов уходит на итерацию! Ну? Вот у меня опять четыре, нифига ж себе, а? Два условных джампа, тест, вычитание, целочисленное умножение -- всё укладывается в те четыре такта, которые занимает mulsd. Это я к тому, что закон Мура, конечно, говорит только о количестве транзисторов, но эти транзисторы не просто так там сидят, из них какой-то жуткий думатель собран. И нельзя оценивать производительность современных процов снизу, по тактам. Они дико сложные внутри, они страшные вещи делают.
no subject
Date: Saturday, 1 December 2007 22:19 (UTC)no subject
Date: Saturday, 1 December 2007 23:06 (UTC)Я же пытался строить свои оценки на основании хоть и прикидок "из пальца", но на средний круг задач.
> И ещё надо посмотреть, что за операции умел выполнять тот монстр 1972 года по 100к в секунду. Исходя из моих неполных знаний, там может быть что угодно, от неинтересных присвоений регистров до конвеерного умножения восьмибайтовых флоатов.
Конвейерного умножения таки не было - по крайней мере в основных средствах. Матричные процессоры были экзотикой.
Можно ещё вспомнить БЭСМ-6 с хорошими прототипами групповых операций (как в современном SSE), но это тоже не основная масса.
> но и на видеокарты, которые раз эдак в 50-200 мощнее в хорошо параллелящихся вычислениях, типа умножений матриц.
Это опять-таки математика.
no subject
Date: Sunday, 2 December 2007 06:44 (UTC)no subject
Date: Sunday, 2 December 2007 13:11 (UTC)Кодить можно научить и обезьяну, а вот программировать - далеко не всякого человека. Разница - как между малеванием кистью по стене согласно эскизу и рисованием картин.