Julia 中 GPU 计算的选项
Options for GPU computing in Julia
我正在考虑购买 GPU 卡以在 Julia 中试验 GPU 计算。在我看来,现在基本上有两种选择:NVIDIA 或 AMD 芯片组。
我的问题是:是否有与 Julia 一起使用的推荐选项?由于我是 GPU 计算的新手,我更关注易用性而不是性能,所以我可以想象目前作为 GPU 接口的 Julia 包基本上决定了答案。
我使用基于 Windows 7 的系统。感谢您的帮助。
几点:
1) ArrayFire 是一个非常易于使用的 GPU 平台,带有 Julia 界面 (https://github.com/JuliaGPU/ArrayFire.jl)。它适用于 NVIDIA 和 AMD GPU。
2) 如果你想要超越 ArrayFire 的东西,那么通常通过 NVIDIA 专有的 CUDA C 语言对 NVIDIA 卡提供更多支持。您可以看到 Julia here 的所有 GPU 包的列表。正如您将看到的,它们中更多的是用于 CUDA 而不是 OpenCL,OpenCL 是用于编写可在 NVIDIA 或 AMD 上运行的内核的 C 版本。但是,要知道如果你走这条路,你将需要开始用 C 编写你自己的内核。
在我看来,CUDA C 具有一些方便的自动化功能,可以自动处理以高效方式在核心之间分配工作的某些方面。 CUDA C 显然似乎更普遍地用于科学计算。
但是,我认为在 Open CL 中没有什么不能做的,学习如何用它做事可能也不会太难。此外,OpenCL 还具有适用于 GPU 以外的各种高性能平台的优势(例如在 Intel 的 Xeon Phi 上编程)。
3) 您应该特别注意浮点运算需要单精度还是双精度。这在选择任一制造商的 GPU 时都会产生很大的不同。例如,NVIDIA 有一些专门设计用于双精度运算的 GPU(主要是 Tesla 系列,也有 Titan Black)。如果您选择除此之外的 NVIDIA GPU,双精度性能将是单精度性能的 1/32。 AMD 芯片往往不太专业,单精度和双精度之间的性能更接近。我认为在某些用例中 NVIDIA 卡会更有价值,而在其他用例中 AMD 会更具成本效益。
4) GPU 可能会变得非常昂贵(尽管在 Ebay 等平台上通常有相当不错的二手选项)。他们的乐趣在于他们可以在比 CPUs 快几个数量级的时间内进行(某些)计算。但是,要获得这一优势,您通常至少要花费数千美元(特别是如果您需要购买一个新系统来支持强大的 GPU,因为许多基本的消费级计算机根本不支持它们出色地)。如果可能的话,首先进行一些试验工作以弄清楚您究竟需要什么,这对您确实是有利的。例如,NVIDIA 有一个测试程序,您可以将其应用于 here。我从来没有使用过它,所以我不能说太多。 AMD 可能有类似的东西。或者,如果您隶属于拥有可用 GPU 的公司或研究机构,或者如果您有朋友愿意让您通过 ssh 连接到他们的计算机并进行试用,那么这可能对您提前确定您需要什么非常有帮助时间.
5) 在查看不同的卡时,您不仅要仔细注意它们每美元提供多少次失败(在您想要的精度水平),还要注意诸如您需要多少 GPU ram 之类的事情,以及它们如何有效地支持多个 GPU 之间以及 GPU 与 CPU 之间的通信的潜在问题。据我所知,这些 GPU-GPU 和 CPU-CPU 计算的黄金标准是新的 NVIDIA P100 卡。这是非常非常昂贵的,而且现在只能作为从 NVIDIA 购买的 10 万美元以上系统(其中有 8 个)的一部分提供。到今年年底,其他制造商应该会提供 P100。他们可以在 CPU 和 GPU 之间的传输速度方面做出令人难以置信的事情,但要为此付出高昂的代价,如果你只是在寻找最多的失败,他们不会证明这个价格是合理的每美元。
我正在考虑购买 GPU 卡以在 Julia 中试验 GPU 计算。在我看来,现在基本上有两种选择:NVIDIA 或 AMD 芯片组。
我的问题是:是否有与 Julia 一起使用的推荐选项?由于我是 GPU 计算的新手,我更关注易用性而不是性能,所以我可以想象目前作为 GPU 接口的 Julia 包基本上决定了答案。
我使用基于 Windows 7 的系统。感谢您的帮助。
几点:
1) ArrayFire 是一个非常易于使用的 GPU 平台,带有 Julia 界面 (https://github.com/JuliaGPU/ArrayFire.jl)。它适用于 NVIDIA 和 AMD GPU。
2) 如果你想要超越 ArrayFire 的东西,那么通常通过 NVIDIA 专有的 CUDA C 语言对 NVIDIA 卡提供更多支持。您可以看到 Julia here 的所有 GPU 包的列表。正如您将看到的,它们中更多的是用于 CUDA 而不是 OpenCL,OpenCL 是用于编写可在 NVIDIA 或 AMD 上运行的内核的 C 版本。但是,要知道如果你走这条路,你将需要开始用 C 编写你自己的内核。
在我看来,CUDA C 具有一些方便的自动化功能,可以自动处理以高效方式在核心之间分配工作的某些方面。 CUDA C 显然似乎更普遍地用于科学计算。
但是,我认为在 Open CL 中没有什么不能做的,学习如何用它做事可能也不会太难。此外,OpenCL 还具有适用于 GPU 以外的各种高性能平台的优势(例如在 Intel 的 Xeon Phi 上编程)。
3) 您应该特别注意浮点运算需要单精度还是双精度。这在选择任一制造商的 GPU 时都会产生很大的不同。例如,NVIDIA 有一些专门设计用于双精度运算的 GPU(主要是 Tesla 系列,也有 Titan Black)。如果您选择除此之外的 NVIDIA GPU,双精度性能将是单精度性能的 1/32。 AMD 芯片往往不太专业,单精度和双精度之间的性能更接近。我认为在某些用例中 NVIDIA 卡会更有价值,而在其他用例中 AMD 会更具成本效益。
4) GPU 可能会变得非常昂贵(尽管在 Ebay 等平台上通常有相当不错的二手选项)。他们的乐趣在于他们可以在比 CPUs 快几个数量级的时间内进行(某些)计算。但是,要获得这一优势,您通常至少要花费数千美元(特别是如果您需要购买一个新系统来支持强大的 GPU,因为许多基本的消费级计算机根本不支持它们出色地)。如果可能的话,首先进行一些试验工作以弄清楚您究竟需要什么,这对您确实是有利的。例如,NVIDIA 有一个测试程序,您可以将其应用于 here。我从来没有使用过它,所以我不能说太多。 AMD 可能有类似的东西。或者,如果您隶属于拥有可用 GPU 的公司或研究机构,或者如果您有朋友愿意让您通过 ssh 连接到他们的计算机并进行试用,那么这可能对您提前确定您需要什么非常有帮助时间.
5) 在查看不同的卡时,您不仅要仔细注意它们每美元提供多少次失败(在您想要的精度水平),还要注意诸如您需要多少 GPU ram 之类的事情,以及它们如何有效地支持多个 GPU 之间以及 GPU 与 CPU 之间的通信的潜在问题。据我所知,这些 GPU-GPU 和 CPU-CPU 计算的黄金标准是新的 NVIDIA P100 卡。这是非常非常昂贵的,而且现在只能作为从 NVIDIA 购买的 10 万美元以上系统(其中有 8 个)的一部分提供。到今年年底,其他制造商应该会提供 P100。他们可以在 CPU 和 GPU 之间的传输速度方面做出令人难以置信的事情,但要为此付出高昂的代价,如果你只是在寻找最多的失败,他们不会证明这个价格是合理的每美元。