andrzejn: (Curious)
[personal profile] andrzejn
(По наводке [livejournal.com profile] fantaseour)
Но я назвал это второстепенной причиной; первостепенная же кроется в том, что... машины стали на несколько порядков мощнее! Говоря прямолинейно: пока машин не было вовсе, не существовало проблемы программирования; когда появились немногочисленные слабые компьютеры, программирование стало малозаметной проблемой; а теперь, когда у нас есть гигантские компьютеры, программирование само превратилось в гигантскую проблему. В этом смысле электронная промышленность не решила ни единой проблемы, она только породила их, создав проблему использования своей продукции. Другими словами, по мере того как мощность доступных машин выросла более чем в тысячу раз, стремление общества найти им применение выросло пропорционально, и бедный программист вынужден метаться буквально по минному полю. Возросшая мощь оборудования совместно с, возможно, еще более возросшей надежностью, сделали возможными решения, о которых программист даже не отваживался мечтать несколько лет назад. А теперь, спустя несколько лет, он должен мечтать о них и, более того, он обязан воплощать эти мечты в реальность! Удивительно ли, что мы оказались в кризисе программирования? Конечно же, нет, и как вы можете догадаться, это даже было предсказано заранее; но трагедия пророков, предсказывающих неприятности, состоит в том, что только лет через пять вы действительно осознаете, что они были правы.

( отсюда )
Э. Дийкстра. 1972 год. 35 лет назад.

Неудержимый прогресс информационных технологий, говорите?

Date: Thursday, 29 November 2007 21:05 (UTC)
From: [identity profile] zvantsev.livejournal.com
Общие слова, не более того. Тогдашний кризис программирования состоял, в основном, в том, что Дийкстре не понравился оператор GO TO.

Date: Thursday, 29 November 2007 21:25 (UTC)
From: [identity profile] faceted-jacinth.livejournal.com
Да, это и есть неудержимый прогресс информационных технологий. За 35 лет компы стали ещё приблизительно в 65536 раз мощнее, а программисты до сих пор не умерли в страшных мучениях и даже порой, хоть и очень недолго, не ощущают себя в кризисе. Ну, там, когда что-нибудь запрограммируют эдакое, или обзор фишек следующей версии любимого языка перечитают.

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

Date: Thursday, 29 November 2007 23:00 (UTC)
From: [identity profile] faceted-jacinth.livejournal.com
Кстати, 65536 раз -- это ещё дико консервативная оценка, полагающая удвоение раз в два с лишним года. Если считать по изначальной формулировке, twice in every 18 months, то получается аж восемь миллионов раз.

И ещё кстати: на самом деле программисты успели стать такими скромными, результатоориентированными и ошибкобоязненными, что сейчас опять стало модно писать на динамически типизированных языках, заниматься agile development (без стадии проектирования) и говорить, что жава сажает программиста в темниццу, а настоящие программисты обладают парадоксальным мышлением и обожают заумные трюки на лисповых макросах.

Date: Saturday, 1 December 2007 18:46 (UTC)
netch: (Default)
From: [personal profile] netch
> За 35 лет компы стали ещё приблизительно в 65536 раз мощнее

Средний компьютер 1972 года выполнял примерно 100 тысяч операций в секунду. Современный - считая на тактовую 2 ГГц, и существенные задержки из-за промахов в кэше - примерно 200 миллионов. Рост - 2000 раз.

Средний компьютер 1972 года имел 512KB памяти, современный - 1GB - рост в ~2000 раз.

Но: при этом компьютер такого класса, о котором я говорю, стоил около 200 тысяч долларов, а современный - около 400 долларов или даже меньше (я не учитываю монитор, навороченный звук и прочее). Умножив рост характеристик на падение цены, получаем рост в миллион раз. На больших задачах на параллельности много теряется на синхронизацию - получаем ~200000 раз.

Но на один компьютер остаются те же 2000 раз.

Date: Saturday, 1 December 2007 20:58 (UTC)
From: [identity profile] faceted-jacinth.livejournal.com
Очень не хочется устраивать флейм, но всё же: я уже неделю где-то неторопливо читаю пдфку про память по ссылке от Аввы (http://avva.livejournal.com/1834882.html), специально сейчас нашёл пример, правильное умножение матриц 1000х1000 (64-битных флоатов) (то есть 10^9 только умножений) укладывается в 1.5*10^9 тактов (полтора такта на умножение, всё остальное -- бесплатно). Потому что кэш-промахов нет вообще (префетч!), зато есть SSE, два (а то и больше) конвеера на процессор, out of order execution и прочие радости жизни. Процессор у них был одноядерный, кстати, что уже не вполне соответствует современному компьютеру за 400 долларов. И ещё надо посмотреть, что за операции умел выполнять тот монстр 1972 года по 100к в секунду. Исходя из моих неполных знаний, там может быть что угодно, от неинтересных присвоений регистров до конвеерного умножения восьмибайтовых флоатов.

Предвидя очевидное возражение: нет, мне не кажется уместным сравнение "среднестатистической" неоптимизённой программы сейчас с круто оптимизённой, выжимающей все 100к операций в секунду, программой тогда.

Ещё, кстати, очень смешно получается, если смотреть не только на процессоры, но и на видеокарты, которые раз эдак в 50-200 мощнее в хорошо параллелящихся вычислениях, типа умножений матриц.

Сейчас ещё один коммент запощу, там будет немножко кода, который демонстрирует, что современные процессоры намного умнее, чем можно было бы предположить.

Date: Saturday, 1 December 2007 23:06 (UTC)
netch: (Default)
From: [personal profile] netch
Прочитал оба комментария. Ну что сказать... результаты показательны, но мне таки кажется, что пример очень узкий. Даже в чисто расчётных задачах (которые уже во времена Дейкстры хоть и занимали заметную часть, но уже не были единственной нагрузкой) такие ситуации как массовое умножение - не единственные. Сейчас же это вообще маргинальная часть случаев.

Я же пытался строить свои оценки на основании хоть и прикидок "из пальца", но на средний круг задач.

> И ещё надо посмотреть, что за операции умел выполнять тот монстр 1972 года по 100к в секунду. Исходя из моих неполных знаний, там может быть что угодно, от неинтересных присвоений регистров до конвеерного умножения восьмибайтовых флоатов.

Конвейерного умножения таки не было - по крайней мере в основных средствах. Матричные процессоры были экзотикой.
Можно ещё вспомнить БЭСМ-6 с хорошими прототипами групповых операций (как в современном SSE), но это тоже не основная масса.

> но и на видеокарты, которые раз эдак в 50-200 мощнее в хорошо параллелящихся вычислениях, типа умножений матриц.

Это опять-таки математика.

Date: Saturday, 1 December 2007 22:14 (UTC)
From: [identity profile] faceted-jacinth.livejournal.com
Уфф, что-то я запарился объяснять компилятору, чего я от него хочу... Так вот, экспонат номер один

---
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. Это я к тому, что закон Мура, конечно, говорит только о количестве транзисторов, но эти транзисторы не просто так там сидят, из них какой-то жуткий думатель собран. И нельзя оценивать производительность современных процов снизу, по тактам. Они дико сложные внутри, они страшные вещи делают.

Date: Saturday, 1 December 2007 22:19 (UTC)
From: [identity profile] faceted-jacinth.livejournal.com
Если вдруг возникнут сомнения по поводу того, что таки происходит с джампом и чему равно k, поэкспериментируйте самостоятельно, пожалуйста. Я очень долго игрался с этой хренью, я не могу полный аточот постить.

Date: Friday, 30 November 2007 01:43 (UTC)
From: [identity profile] wandererdragon.livejournal.com
Мне понравился вот этот кусок:
"Могут быть также препятствия политического характера. Если даже мы знаем, как учить завтрашних профессиональных программистов, неочевидно, что общество, в котором мы живем, позволит нам делать это. Первый эффект от обучения методологии - а скорее, распространения знаний - состоит в том, что, расширяя возможности уже возможного в данный момент, тем самым усиливается различие в интеллектуальных способностях. В обществе, где система образования используется как инструмент для создания однородной культуры, в котором сливкам не дают подниматься к вершине, обучение компетентных программистов может оказаться политически некорректным."

Date: Friday, 30 November 2007 06:18 (UTC)
From: [identity profile] gds.livejournal.com
Да уж. Он опасался, что у обучения программированию есть приоритет над человеческой тупостью. В реальности, к сожалению, наоборот. Это не общество разделяется на "умных программистов" и "тупых людей", а программисты разделяются на "умных программистов" и "таких же, как в обществе".

Date: Friday, 30 November 2007 12:27 (UTC)
From: [identity profile] marrch-caat.livejournal.com
+10000!

ЗЫ: И только в Индии программисты едины :)

Date: Saturday, 1 December 2007 18:50 (UTC)
netch: (Default)
From: [personal profile] netch
В Индии программисты очень разнообразны. И смотреть надо на происхождение человека. Кастовая система у индусов работает до сих пор. Поэтому с индусами проблемы. С бенгальцами, например, полегче - из крестьян получаются отличные кодеры без претензий.

Date: Sunday, 2 December 2007 06:44 (UTC)
netch: (Default)
From: [personal profile] netch
Так оно и есть. Большие фирмы (феоды), крестьяне-кодеры, надсмотрщики-ПМ... и узкая прослойка "образованных" архитекторов, алгоритмистов и прочих...

Date: Sunday, 2 December 2007 13:11 (UTC)
From: [identity profile] marrch-caat.livejournal.com
Да разумеется, это обобщение. Проблема с Индией не в том, что там нет хороших программистов - я лично знаю нескольких - а в том, что там очень дешевый outsorcing, и из-за этого (и всвязи с низким уровнем жизни в стране) на него огромный спрос, который рождает соответствующее предложение. В результате программированием там занимаются все, кому не лень, и общий уровень этого программирования - ниже всякого плинтуса.
Кодить можно научить и обезьяну, а вот программировать - далеко не всякого человека. Разница - как между малеванием кистью по стене согласно эскизу и рисованием картин.

Profile

andrzejn: (Default)
Андрій Новосьолов

January 2026

M T W T F S S
    1 2 3 4
5 6 7 8 9 10 11
12 1314 151617 18
19 20 2122 23 24 25
26 27 28293031 

Most Popular Tags

-

Style Credit

Expand Cut Tags

No cut tags
Page generated Wednesday, 28 January 2026 10:24
Powered by Dreamwidth Studios