我是一名商科专业,三分之二通过我的学位课程,有一点PHP经验,参加过一门C ++课程,现在后悔我选择的业务而不是编程/计算机科学。
我有兴趣学习更高级的编程;特别是C,并最终开始使用CUDA架构进行人工神经网络数据分析(不是用于AI,视觉或语音处理,而是用于查找大数据集和一般数据/统计分析中数据点之间的相关性)。 p>
关于我应该如何开始学习C的任何建议?以及用于分析数据的ANN /贝叶斯技术?那里有很多书,我不知道该选择什么。
由于CUDA相当新,因此似乎没有太多学习者友好(即愚蠢)的材料。除了NVIDIA文档之外,还有CUDA的学习资源吗?
此外,您会向我推荐哪些资源来讨论GPGPU计算以及可以帮助我的大规模并行编程?
答案 0 :(得分:5)
我不建议首先尝试学习CUDA,因为它是一项新技术,而且你没有太多的编程背景。
由于你没有太多的C(或C ++)经验,因为CUDA缺乏成熟度,libs,错误信息等等,所以很难学习。
CUDA适用于熟悉C语言的人(C ++经验也有帮助),并且存在需要通过重新编码或重新思考众所周知的问题的解决方案来提高性能的问题。
如果您正在尝试解决“ANN /贝叶斯”问题,我建议您使用C ++或C创建解决方案。不要为创建线程或多线程而烦恼。然后,在评估完串行解决方案的响应时间之后,尝试使用OpenMP,Boost线程使其并行,w / e。在此之后,如果您仍然需要更多性能,那么我建议学习CUDA。
我认为这些是有效的,因为CUDA有一些非常神秘的错误,难以调试,完全不同的架构等。
如果你仍然感兴趣,这些是学习CUDA的一些链接:
在线课程:
论坛(最佳信息来源):
工具:
CUDA解决了问题:
答案 1 :(得分:3)
你已经表达了3个不同的目标:
首先:对于那些已经拥有多个学位的人来说,这些事情并不容易。如果您只做一个,请务必了解贝叶斯推理。它是迄今为止最强大的可用于推理数据的框架,您需要了解它。查看MacKay的书(在底部提到)。你当然为自己设定了一项具有挑战性的任务 - 我祝你一切顺利!
你的目标都是完全不同的水壶。学习用C编程并不太难。我想尽可能在你的大学里学习“算法和数据结构简介”(通常是CS专业的第一门课程)(可能用Java教授)。这对你来说非常有用,C中的基本编码只是学习语法的问题。
学习为CUDA平台编写代码更具挑战性。如上所述,请先查看OpenMPI。一般来说,阅读一些关于计算机体系结构的东西(Patterson& Hennessy很好),以及一本关于并行算法的书,你将获得很好的服务。如果您从未见过并发(即如果您还没有听说过信号量),那么查找它是很有用的(从操作系统课程讲解笔记可能会涵盖它 - 请参阅麻省理工学院开放课件)。最后,如上所述,因为它是一个新领域,所以很少有可用于GPU编程的好参考。所以你最好的选择是阅读示例源代码以了解它是如何完成的。
最后,贝叶斯网和神经网络。首先,请注意这些是完全不同的。贝叶斯网络是表示(通常大)数量的变量上的联合概率分布的图形(节点和边缘)方式。术语“神经网络”有点模糊,但通常是指使用简单的处理元件来学习用于对数据点进行分类的非线性函数。一本非常好地介绍贝叶斯网和神经网络的书是David J.C.MacKay的信息理论,推理和学习算法。该书可在http://www.inference.phy.cam.ac.uk/mackay/itila/免费在线获取。到目前为止,这本书是我最喜欢的主题。博览会非常清晰,演习很有启发性(大多数都有解决方案)。
答案 2 :(得分:0)
如果您正在寻找对并行编程的友好介绍,请考虑在CPU群集上使用Open MPI或Posix线程。您需要开始使用的是单个多核处理器。
普遍的共识是,对这些新架构(gpu,cell等)的多编程在编程模型和api的成熟度方面有一条路要走。相反,Open MPI和PThreads已经存在了很长一段时间,并且有很多资源可供学习它们。一旦你对这些技术感到满意,那就考虑尝试更新的技术。
虽然对于许多其他语言来说肯定存在编程接口,但C可能是最常用的现代语言(Fortran和Pascal仍然在这个领域徘徊)用于高性能计算。 C ++也很受欢迎,但有几个Bioinformatics软件包使用它。无论如何,C肯定是一个很好的起点,如果你想要更多的语言特性或库(可能会以性能为代价),你可以提升到C ++。
答案 3 :(得分:0)
如果您对数据挖掘感兴趣,您可能还想查看名为Orange的开源系统。它以C ++实现,但它也支持Python或可视链接和节点语言的最终用户编程。
我不知道它是否支持NN,但我知道人们用它来学习数据挖掘技术。它支持聚类和关联规则等内容。
(另外,如果您不了解它,您可能想要找到B-school中负责运营管理的人。如果您对CS和数据挖掘感兴趣,您可能会在那里找到志同道合的人。 )
答案 4 :(得分:0)
链接:gpgpu.org有一些有趣的讨论
答案 5 :(得分:0)
最新的CUDA版本(3.1,3.2)有一套功能齐全的功能,名为CuBLAS,可以在单卡设置上为您处理多核心矩阵操作。并行反向传播将是一个挑战,但我正在努力。
答案 6 :(得分:0)
我能够在iTunesU上找到一些免费的斯坦福大学视频课程
编程方法(CS106A) 编程抽象(CS106B) 编程范式(CS107) 机器学习(CS229) 使用CUDA编程大规模并行处理器
这些课程中的每一个都有大约20个左右的讲座,所以投资看它们都值得一试。