4

我是商科专业的,我的学位课程已经完成了三分之二,有一点 PHP 经验,上过一门 C++ 入门课程,现在后悔选择了商科而不是编程/计算机科学。

我有兴趣学习更高级的编程;特别是 C,并最终使用 CUDA 架构进行人工神经网络数据分析(不是用于人工智能、视觉或语音处理,而是用于查找大型数据集中数据点之间的相关性和一般数据/统计分析)。

关于我应该如何开始学习 C 的任何建议?以及用于分析数据的 ANN/贝叶斯技术?书太多了,不知道选什么。

由于 CUDA 相当新,因此似乎没有太多对学习者友好(即简化)的材料。除了 NVIDIA 文档之外,是否还有针对 CUDA 的学习资源?

此外,您会向我推荐哪些有关 GPGPU 计算和大规模并行编程的资源来帮助我?

4

7 回答 7

5

我不建议先尝试学习 CUDA,因为它是一项新技术,而且您没有太多编程背景。

由于您在 C(或 C++)方面没有太多经验,CUDA 学习起来会很痛苦,因为它缺乏成熟度、库、漂亮的错误消息等。

CUDA 适用于熟悉 C 的人(C++ 经验也有帮助)并且有需要通过重新编码或重新思考众所周知的问题的解决方案来提高性能的问题。

如果您正在尝试解决“ANN/贝叶斯”问题,我建议您使用 C++ 或 C 创建您的解决方案,您可以选择。不要为创建线程或多线程而烦恼。然后,在评估串行解决方案的响应时间后,尝试使用 OpenMP、Boost 线程、w/e 使其并行。在此之后,如果您仍然需要更高的性能,那么我建议您学习 CUDA。

我认为这些都是有效的,因为 CUDA 有一些非常神秘的错误,难以调试,完全不同的架构等。

如果您仍然感兴趣,这些是学习 CUDA 的一些链接:

在线课程:

论坛(最佳信息来源):

工具:

CUDA 中解决的问题:

于 2009-03-11T17:30:17.970 回答
3

您已经表达了 3 个不同的目标:

  • 学习用 C 编程
  • 学习为 CUDA 平台编写代码
  • 学习使用贝叶斯网络和/或神经网络进行数据分析

首先:对于已经在该领域拥有多个学位的人来说,这些事情并不容易。如果你只做一个,一定要了解贝叶斯推理。它是迄今为止最强大的数据推理框架,您需要了解它。查看 MacKay 的书(在底部提到)。你当然给自己设定了一项具有挑战性的任务——祝你一切顺利!

你的目标都是完全不同的鱼壶。学习用 C 编程并不难。如果可能的话,我会在你的大学学习“算法和数据结构简介”(通常是 CS 专业的第一门课程)(它可能是用 Java 教授的)。这对您将非常有用,C 中的基本编码将只是学习语法的问题。

学习为 CUDA 平台编写代码更具挑战性。如上所述,请先检查 OpenMPI。一般来说,阅读有关计算机体系结构的东西(Patterson & Hennessy 很好)以及一本关于并行算法的书,你会得到很好的服务。如果您从未见过并发(即,如果您还没有听说过信号量),那么查找它会很有用(操作系统课程的讲义可能会涵盖它 - 请参阅 MIT Open Courseware)。最后,如前所述,GPU 编程很少有好的参考资料,因为它是一个新领域。所以你最好的选择是阅读示例源代码来了解它是如何完成的。

最后,贝叶斯网络和神经网络。首先,请注意这些是完全不同的。贝叶斯网络是一种图形(节点和边)方式,表示在(通常很大)数量的变量上的联合概率分布。“神经网络”这个术语有些模糊,但一般是指使用简单的处理元素来学习用于对数据点进行分类的非线性函数。David JC MacKay 的《信息论、推理和学习算法》是一本很好地介绍了贝叶斯网络和神经网络的书。该书可在http://www.inference.phy.cam.ac.uk/mackay/itila/在线免费获得。这本书是迄今为止我最喜欢的主题。阐述非常清楚,练习很有启发性(大多数都有解决方案)。

于 2009-04-09T22:50:35.353 回答
0

如果您正在寻找对并行编程的友好介绍,请考虑使用 CPU 集群上的Open MPI或 Posix Threading。您只需一个多核处理器即可开始使用。

普遍的共识是,在这些新架构(gpu、cell 等)上的多编程在其编程模型和 api 的成熟度方面还有一段路要走。相反,Open MPI 和 PThreads 已经存在了很长一段时间,并且有很多资源可供学习它们。一旦您对这些感到满意,然后考虑尝试更新的技术。

虽然肯定有许多其他语言的编程接口,但 C 可能是高性能计算中使用的最常见的现代语言(Fortran 和 Pascal 仍在这一领域活跃)。C++ 也相当流行,一些生物信息学包使用它。无论如何,C 肯定是一个很好的起点,如果你想要更多的语言特性或库,你可以升级到 C++(尽管可能会以性能为代价)。

于 2009-03-11T17:12:47.013 回答
0

如果您对数据挖掘感兴趣,您可能还想查看名为 Orange 的开源系统。它是用 C++ 实现的,但它也支持 Python 或可视链接和节点语言的最终用户编程。

我不知道它是否支持神经网络,但我知道人们用它来学习数据挖掘技术。它支持诸如集群和关联规则之类的东西。

(另外,如果你不知道,你可能想在你的商学院找到一个做运营管理的人。如果你对计算机科学和数据挖掘感兴趣,你可能会在那里找到志同道合的人。)

于 2009-03-11T18:09:12.573 回答
0

链接:gpgpu.org有一些有趣的讨论

于 2009-03-11T18:12:08.400 回答
0

最新的 CUDA 版本(3.1、3.2)具有一套完整的功能,称为 CuBLAS,可以在单卡设置上为您处理多核矩阵运算。并行反向传播将是一个更大的挑战,但我正在努力。

于 2010-09-29T06:43:28.310 回答
0

我能够在 iTunesU 上找到一些来自斯坦福的免费视频课程

编程方法论 (CS106A) 编程抽象 (CS106B) 编程范式 (CS107) 机器学习 (CS229) 使用 CUDA 编程大规模并行处理器

这些课程中的每一门都有大约 20 节左右的讲座,因此观看它们是一项投资,但非常值得。

于 2011-03-23T03:00:13.513 回答