Nov 22 2011

Нуждата от многоядрени процесори

Category: Dev,embedded,НонсенсLucho @ 17:02


Част I

Защо аджеба имаме многоядрени процесори в стандартните персонални компютри?

Не е защото програмите са супер добри в изпълнението на паралелни задачи. Програмите в обикновените компютри не са добри в изпълнението на паралелни задачи, защото хората, които ги пишат рядко измислят паралелни алгоритми за решаването на даден проблем.

Да вземем например процесор с 64 ядра. Всъщност дори и с 64 ядра… имаме 1 шина (северния мост), за достъп до паметта. Как 64 ядра могат ефективно да пишат и четата от паметта? Да не говорим за кеш кохийранс и потенциалните проблеми породени от false sharing-a.

Проблемът на многоядрените процесори са хората-мислещи-последователно-вместо-паралелно-защото-така-са-свикнали и достъпът до споделени ресурси. 64 ядра vs. една памет, един кеш, един кернел… и още много неща, които са по едно. Как 64 неща могат да работят ефективно с едно нещо едновремено и да са в синхрон – това е проблемът.

Защо нямаме едно ядро, което да върви на 64*3GHz?

Много уместен въпрос! Процесор с честота 192GHz звучи като решение на изначалния проблем – Защо да не си караме с едноядрен процесор на супер висока честота?

well…

  • Скоростта на светлината във вакуум е ~300 000 000 м/сек.
  • 192GHz са 192 000 000 000 такта в секунда

Простата сметка 300 000 000 / 192 000 000 000 = 1.5mm , показва че този процесор трябва да е голям около 1 милиметър (кв., куб.), за да може часовникът да разпространи сигнала си в него 192 милиарда пъти в секунда… и това са някакви груби, половинчати сметки. Това, което се опитвам да ви накарам да осъзнаете е че:

  1. Не може да поберете процесор в такова пространство.
  2. Ако поберете процесор в такова пространство ще ви трябва нещо по-студено от течен азот за да го охладите. Ще ви трябва и малка електроцентралка, за да го захраните.
  3. Ако успеете да намерите нещо по-бързо от светлината… good for you!

Част II

Единственият начин да имаме повече изчислителна мощ със сегашните закони на физиката е като имаме повече изчислителни устройства, които работят паралелно. За това си купувате 2-4-8 ядрени процесори на ниска честота (2 GHz).

Но един процес винаги върви на едно ядро – т.е. ако имате един единствен процес и искате да върви бързо, тогава ви трябва едно единствено ядро на висока честота (4 GHz например, вместо 2GHz). Това е миниатюрна частичка от един друг голям проблем – Ако имате програма, която изчислява някакъв резултат за X секунди на процесор с 1 ядро, нямате гаранция че ако пуснете програмата на процесор с 8 ядра със същата честота, тя ще върви 8 пъти по-бързо. Нещо повече, вашата програма може да върви дори по-бавно от колкото на 4 ядра. Т.е. вашият софтуер може да не се скалира добре върху многоядрена архитектура.

Това е като да си хирург в 13-ти век… взимаш някакъв труп и пориш, и изучаваш, и не разбираш, и си блъскаш главата… и след 100-200 години вече всичко е ясно и човечеството вече знае как работи човешкото тяло.

Ние сме в 13-ти век 🙂

Tags: ,

2 Responses to “Нуждата от многоядрени процесори”

  1. Стефан says:

    Отделно, дори и да се мъчиш да имплементираш нещо да работи на няколко ядра ( в моя случай използвайки Python ) проблемите, с които човек се сблъсква са невероятно странни ( multiprocessing + Python 2.7.2 = поне 10 бъга в core библиотеката на езика…)

  2. Lucho says:

    Последните месеци се наслушах на толкова хора, които се оплакват какъв ужас е програмирането за мултиядрени архитектури, че вече нищо не ме изненадва.

    Хабят по-малко ток и вероятно всички по-сложни вградени системи ще са мултиядрени в близко бъдеще (това вече важи за смартфоните).

Leave a Reply