Программирование на будущем оборудовании? - PullRequest
0 голосов
/ 30 мая 2009

Я хочу попрактиковаться в программировании для будущего оборудования. Что это? На ум приходят две основные вещи: 64-битные и многоядерные. Я также отмечаю, что кеш важен, и у GPU есть своя технология, но сейчас я не заинтересован в каком-либо графическом программировании.

О чем еще я должен знать?

-edit- я знаю, что многие из них в настоящее время, но довольно скоро все процессоры будут многоядерными, и многопоточность будет более важной. Я считаю, что порядковые номера (большие и маленькие), но обнаружили, что это не важно, и уже есть процессор с прямым порядком байтов для тестирования.

Ответы [ 7 ]

6 голосов
/ 30 мая 2009

Моя рекомендация на будущее:)

Или вы можете сосредоточиться на трассировке лучей.

6 голосов
/ 30 мая 2009

Если вы хотите погрузиться в «мейнстримовую» ОС, которая имеет полную поддержку 64-битных систем, я предлагаю вам начать писать код для бета-версии Mac OS X «Snow Leopard» (кодовое название 10.6). Одним из больших улучшений является Grand Central, который представляет собой «средство» для разработчиков для написания кода для многоядерных систем. Grand Central должен распределять рабочую нагрузку не только между ядрами, но и с графическим процессором.

Также очень важен взрыв интеллектуальных устройств, таких как iPhone, Android и т. Д. Я твердо верю, что некоторые будущие так называемые «нетбуки» будут полагаться на такие ОС, как Android и iPhone, и, как таковые, знают, как код в соответствии с SDK, и очень важно знать, как оптимизировать код для мобильных устройств (например, оптимизировать графику производительности или иным образом, использовать батарею).

3 голосов
/ 30 мая 2009

Я не могу предсказать будущее, но один аспект, на который стоит обратить внимание, - это что-то вроде CELL-процессора , используемого в PS3, где вместо множества идентичных ядер общего назначения есть только одно (хотя и способное симметричной многопоточности) плюс много ядер, которые имеют более конкретное назначение.

В простом анализе процессор Cell можно разделить на четыре компонента: внешние структуры ввода и вывода, основной процессор называется Power Processing Element (PPE) (двухстороннее одновременное многопоточное ядро, совместимое с Power ISA v.2.03) восемь полнофункциональных сопроцессоров, называемых Synergistic Processing Elements, или SPE, и специализированная круговая шина данных с высокой пропускной способностью, соединяющая PPE, элементы ввода-вывода и SPE, называемые Element Interconnect Bus или EIB.

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

2 голосов
/ 30 мая 2009

Как насчет обучения OpenCL ? Это массивно параллельный язык обработки, основанный на C. Он похож на CUDA от nVidia, но не зависит от производителя. Пока еще нет крупных реализаций, но скоро они появятся.

Что касается 64-битных, не беспокойтесь. Программирование на самом деле не будет отличаться, если вы не делаете действительно низкоуровневые вещи (ядра). Платформы более высокого уровня, такие как Java и .NET, позволяют запускать код на 32-разрядных и 64-разрядных компьютерах. Даже C / C ++ позволяет вам сделать это (но не совсем так).

2 голосов
/ 30 мая 2009

64 бит и многоядерный - это настоящее, а не будущее.

О будущем: Квантовые вычисления или что-то в этом роде?

1 голос
/ 30 мая 2009

Я согласен с ответом Оли (+1) и добавил бы, что в дополнение к 64-битным средам вы смотрите на многоядерные среды. Индустрия приближается к концу цикла улучшений скорости. Но мы видим все больше и больше многоядерных процессоров. Таким образом, параллельное или параллельное программирование - что очень сложно - быстро становится очень востребованным.

Как вы можете подготовиться к этому и практиковать это? Я задавал себе тот же вопрос. Так что, мне кажется, что такие функциональные языки, как ML , Haskell , LISP , Arc , Scheme и т. д. - это хорошее место для начала, поскольку действительно функциональные языки обычно не имеют побочных эффектов и поэтому очень "распараллеливаемы". Erlang - еще один интересный язык.

Другие интересные разработки, которые я обнаружил, включают

  • Singularity Research OS
  • Транзакционная память и программно-изолированные процессы
  • Множество эпизодов подкаста разработки программного обеспечения по параллелизму. (Вот первый .)
  • Эта статья из ACM Queue на тему " Real World Concurrency "
0 голосов
/ 30 мая 2009

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

Я бы также предложил работать с вычислениями на GPU, такими как CUDA / Stream, но это может быть проблемой, потому что очень вероятно, что это сильно изменится в следующие годы.

...