Варианты вычислений на GPU в Julia
Я подумываю о покупке видеокарты, чтобы поэкспериментировать с вычислениями на GPU в Джулии. На мой взгляд, сейчас есть два основных варианта: чипсеты NVIDIA или AMD.
Мой вопрос: есть ли рекомендуемый вариант для использования с Юлией? Поскольку я новичок в вычислениях на GPU, я больше ориентируюсь на простоту использования, чем на производительность, поэтому я могу себе представить, что текущие пакеты Julia, которые служат интерфейсами GPU, в основном определяют ответ.
Я использую систему на базе Windows 7. Любая помощь приветствуется.
1 ответ
Несколько моментов:
1) ArrayFire - довольно простая в использовании графическая платформа с интерфейсом Julia ( https://github.com/JuliaGPU/ArrayFire.jl). Он работает как с графическими процессорами NVIDIA, так и с AMD.
2) Если вы хотите, чтобы вещи выходили за рамки того, что есть в ArrayFire, тогда, как правило, больше поддержки карт NVIDIA через язык CUDA C, который является собственностью NVIDIA. Вы можете увидеть список всех пакетов GPU для Джулии здесь. Как вы увидите, гораздо больше из них для CUDA, чем для OpenCL, который является версией C, которая работает для написания ядер, работающих на NVIDIA или AMD. Но знайте, что если вы пойдете по этому пути, вам нужно начать писать свои собственные ядра на C.
На мой взгляд, в CUDA C есть несколько удобных функций автоматизации, которые автоматически будут эффективно обрабатывать определенные аспекты распределения работы между ядрами. CUDA C, безусловно, более широко используется в научных вычислениях.
Но я не думаю, что многое можно сделать в открытом CL, и, вероятно, не намного сложнее научиться делать что-то с этим. Кроме того, OpenCL также имеет преимущество в том, что он применим к широкому спектру высокопроизводительных платформ, помимо графических процессоров (например, программирование на Intel Xeon Phi).
3) Следует внимательно следить за тем, нужно ли вам работать с одинарной или двойной точностью для операций с плавающей запятой. Это имеет большое значение при выборе графического процессора любого производителя. Например, у NVIDIA есть несколько графических процессоров, специально разработанных для выполнения операций с двойной точностью (в основном линейка Tesla, но также и Titan Black). Если вы выберете графический процессор NVIDIA, отличный от этого, вы получите 1/32 производительности для двойной точности по сравнению с одинарной. Чипы AMD имеют тенденцию быть немного менее специализированными, более сопоставимыми с одинарной и двойной точностью Я полагаю, что в некоторых случаях использование карт NVIDIA будет более выгодным, а в других - повышение эффективности затрат AMD.
4) Графические процессоры могут быть довольно дорогими (хотя на Ebay и т. Д. Часто есть довольно неплохо используемые опции). Их радость в том, что они могут выполнять (определенные) вычисления в разы, которые на несколько порядков быстрее, чем процессоры. Но чтобы получить это преимущество, вы часто будете тратить минимум тысячи долларов (в частности, если вам нужно купить новую систему для поддержки мощного графического процессора, поскольку многие базовые компьютеры потребительского уровня просто не поддерживают их, что Что ж). Если это вообще возможно, будет действительно в ваших интересах сначала выполнить пробную работу, чтобы точно выяснить, что вам понадобится. Например, у NVIDIA есть тестовая программа, к которой вы можете обратиться здесь. Я никогда не использовал это, поэтому я не могу сказать, так или иначе. У AMD, наверное, есть что-то похожее. В качестве альтернативы, если вы связаны с компанией или исследовательским учреждением, имеющим доступные графические процессоры, или если у вас есть друг, который позволит вам подключиться к компьютеру через ssh и опробовать его, это может быть очень полезно для определения того, что вам нужно заранее. время.
5) Когда вы смотрите на разные карты, вам нужно обращать особое внимание не только на то, сколько флопов на доллар они поставляют (с желаемым уровнем точности), но и на то, как вам нужно количество оперативной памяти графического процессора и, возможно, насколько эффективно они поддерживают связь между несколькими GPU и между GPU и CPU. Насколько я знаю, золотым стандартом для этих вычислений на GPU-GPU и CPU-CPU является новая карта NVIDIA P100. Это супер, супер дорого, хотя и сейчас доступно только как часть системы стоимостью более $100 тыс. (У которой их 8), купленной у NVIDIA. К концу года P100 должны быть доступны от других производителей. Они могут делать невероятные вещи с точки зрения скорости передачи между процессором и графическим процессором, но за это есть огромная цена, и они не оправдывают цену, если все, что вы ищете, это просто наибольшее количество провалов за доллар.