Вопрос

Я специализируюсь в бизнесе, прошла две трети своей дипломной программы, имею небольшой опыт работы с PHP, прослушала один вводный курс по C ++ и теперь сожалею о своем выборе бизнеса, а не программирования / компьютерных наук.

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

Есть какие-нибудь советы о том, как мне следует начать изучать C?А также ANN / байесовская технология анализа данных?Сейчас так много книг, что я не знаю, какую выбрать.

Поскольку CUDA является довольно новым, он, похоже, не очень удобен для учащихся (т. Е.урезанный) материал для этого.Существуют ли учебные ресурсы для CUDA помимо документации NVIDIA?

Кроме того, какие ресурсы вы бы порекомендовали мне, рассказывающие о вычислениях на GPGPU и массово параллельном программировании, которые помогли бы мне в этом?

Это было полезно?

Решение

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

Поскольку у вас нет большого опыта работы с C (или C ++), освоение CUDA будет затруднено, поскольку ему не хватает зрелости, библиотек, приятных сообщений об ошибках и т.д.

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

Если вы пытаетесь решить "ANN / байесовские" задачи, я бы рекомендовал создать свое решение на C ++ или C, на ваш выбор.Не беспокойтесь о создании потоков или многопоточности.Затем, после оценки времени отклика вашего последовательного решения, попробуйте сделать его параллельным, используя OpenMP, Boost threads и т. Д.После этого, если вам все еще нужна большая производительность, я бы рекомендовал изучить CUDA.

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

Если вам все еще интересно, вот несколько ссылок для изучения CUDA:

Онлайн-курсы:

Форум (лучший источник информации):

Инструменты:

Проблемы, решаемые в CUDA:

Другие советы

Вы сформулировали 3 разные цели:

  • Учимся программировать на C
  • Учимся писать код для платформы CUDA
  • Научиться использовать сети Байеса и/или Нейронные сети для анализа данных

Во-первых:эти вещи нелегки для людей, которые уже имеют несколько степеней в данной области.Если вы делаете только одно, обязательно ознакомьтесь с байесовским выводом.Это, безусловно, самая мощная платформа, доступная для рассуждений о данных, и вам нужно это знать.Ознакомьтесь с книгой Маккея (упомянута внизу).Вы, безусловно, поставили перед собой сложную задачу - я желаю вам всего наилучшего!

Все ваши цели - это довольно разные котелки с рыбой.Научиться программировать на языке Си не так уж сложно.Я бы хотел, если это вообще возможно, пройти "Введение в алгоритмы и структуры данных" (обычно это первый курс для специалистов CS) в вашем университете (вероятно, он преподается на Java).Это будет чрезвычайно полезно для вас, и тогда базовое кодирование на C будет просто вопросом изучения синтаксиса.

Научиться писать код для платформы CUDA значительно сложнее.Как рекомендовано выше, пожалуйста, сначала ознакомьтесь с OpenMPI.В общем, вам будет полезно почитать что-нибудь о компьютерной архитектуре (Patterson & Hennessy - это здорово), а также книгу о параллельных алгоритмах.Если вы никогда не видели параллелизм (т.е.если вы не слышали о семафоре), было бы полезно посмотреть его (вероятно, об этом будут рассказаны заметки к лекциям из курса по операционным системам - см. MIT Open Courseware ).Наконец, как уже упоминалось, существует несколько хороших ссылок на программирование на GPU, поскольку это новая область.Поэтому вам лучше всего прочитать пример исходного кода, чтобы узнать, как это делается.

Наконец, байесовские сети и Нейронные сети.Во-первых, пожалуйста, имейте в виду, что это совершенно разные вещи.Байесовские сети - это графический (узлы и ребра) способ представления совместного распределения вероятностей по (обычно большому) числу переменных.Термин "нейронная сеть" несколько расплывчат, но в целом относится к использованию простых элементов обработки для изучения нелинейной функции для классификации точек данных.Книга, которая дает действительно хорошее введение как в сети Байеса, так и в нейронные сети, называется David J.C.Теория информации Маккея, алгоритмы логического вывода и обучения.Книга доступна бесплатно онлайн по адресу http://www.inference.phy.cam.ac.uk/mackay/itila/.Эта книга, безусловно, моя любимая на эту тему.Изложение предельно четкое, а упражнения - наглядные (в большинстве из них есть решения).

Если вы ищете дружественное введение в параллельное программирование, рассмотрите возможность открыть MPI или Posix Threading в кластере процессора. Все, что вам нужно для начала работы, - это одноядерный процессор.

Общее мнение заключается в том, что многопрограммное программирование на этих новых архитектурах (gpu, cell и т. д.) должно идти с точки зрения зрелости их моделей программирования и API. И наоборот, Open MPI и PThreads существуют уже довольно давно, и есть много ресурсов для их изучения. Когда вы освоитесь с ними, подумайте о том, чтобы опробовать новые технологии.

Хотя, безусловно, есть интерфейсы программирования для многих других языков, C, вероятно, является наиболее распространенным современным языком (Fortran и Pascal все еще работают в этой области), используемым в высокопроизводительных вычислениях. C ++ также довольно популярен, хотя некоторые пакеты Биоинформатики используют это. В любом случае, C, безусловно, является хорошей отправной точкой, и вы можете перейти на C ++, если вам нужно больше языковых функций или библиотек (хотя, вероятно, это будет стоить производительности).

Если вы заинтересованы в интеллектуальном анализе данных, вы также можете взглянуть на систему с открытым исходным кодом под названием Orange. Он реализован на C ++, но также поддерживает программирование для конечных пользователей на Python или на визуальном языке ссылок и узлов.

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

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

Ссылка: gpgpu.org Есть интересная дискуссия

В последних выпусках CUDA (3.1, 3.2) имеется полнофункциональный набор функций, называемый CuBLAS, который будет выполнять операции с несколькими матричными матрицами для вас при настройке одной карты. Распараллелить обратное распространение будет немного сложнее, но я над этим работаю.

Мне удалось найти несколько отличных видеокурсов бесплатно от Стэнфорда в iTunesU

Методология программирования (CS106A) Программные абстракции (CS106B) Парадигмы программирования (CS107) Машинное обучение (CS229) Программирование массивно параллельных процессоров с помощью CUDA

Каждый из этих курсов имеет около 20 или около того лекций, поэтому стоит посмотреть их все, но оно того стоит.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top