LINUX.ORG.RU

Видеокарта для расчетов


0

2

Есть задача: быстро перемножать скалярно два вектора даблов по 300 элементов в каждом. Какую видеокарту выгоднее в плане цена/производительность (для этой конкретной задачи) взять для таких целей? AMD или NVidia? Дорогую профессиональную или обычную игровую? Что проще и эффективнее использовать для разработки: cuda или opencl?

Примечание: использовать float нельзя, только double.

Deleted

Последнее исправление: Deleted (всего исправлений: 2)

А CPU не устроит? В видеокарту ведь передать еще нужно, потом результат забрать.

ebantrop
()

radeon hd 6850 + opencl (относительно дёшево и производительно)

Dron ★★★★★
()
Последнее исправление: Dron (всего исправлений: 1)

Haswell, avx2, память в два канала. Можно попробовать перемножать двумя тредами (в разных линейках кэша).

mv ★★★★★
()

300 это слишком мало, чтобы загрузить видеокарту работой - почти все compute unit'ы будут простаивать. Плюс время копирования памяти с хоста и обратно. Попробуйте лучше OpenCL для CPU, для такой задачи должно быть самое то.

tim239 ★★
()

300 элементов

Это маловато для использования карточки. Лучше CPU со SIMD и подгонка под кэши.

Kosyak ★★★★
()
Ответ на: комментарий от tim239

Так все 16 ядер CPU будут отправлять в видюху эти 300 значений одновременно (у каждого CPU свои 300).

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от Ford_Focus

Т.е. я правильно понимаю, что лучше Sapphire Radeon HD 7970 ничего нет по соотношению цена/производительность? (кстати, насколько я помню, майнеры как раз такие брали).

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от Deleted

С другой стороны, на nvidia тоже запускали opencl, а не напрямую запускали cuda. А на stackoverflow где-то писали, что разница в производительности между opencl и cuda на одной и той же карте 1:3 в пользу cuda.

Deleted
()
Ответ на: комментарий от Deleted

THG почему-то не гонял 7850/7870/7950 на FP64, тут я ничего не могу сказать.

Но очевидно, что невидео для вычислений не подходит.

Ford_Focus ★★★★★
()
Ответ на: комментарий от Ford_Focus

Тут еще проблема в том, что для ATI надо писать на opencl, который подходит лишь для твердых телом и духом. А для nvidia можно использовать cuda, которая заметно попроще в изучении. А здесь вообще пишут, что opencl на amd намного медленнее, чем opencl на nvidia (писать на glsl желания как-то нет).

Deleted
()
Ответ на: комментарий от Deleted

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

там сравнили абсолютно разные карты (шина, количество памяти, prof/desktop). такого я даже от похороникса не припомню. альзо, GTX480 и GTX580 были неплохими картами для вычислений, но GTX680 и GTX780 серьёзно деградировали.

Ford_Focus ★★★★★
()

Имел возможность сравнить GTX 580 и HD 7970, запускал свою наколенную поделку на OpenCL (грубо говоря, преобразование Фурье, все числа — двойной точности). Ну и, значит, считает AMD у меня в два-три раза быстрее, чем Nvidia, но... у AMD страшно глючный компилятор. Сидя на невидии я ничего подобного представить себе не мог. Чтобы оценить всю глубину страданий тех несчастных, что купили себе красную видеокарту, почитайте официальные форумы самоподдержки пользователей AMD. Ну и работу без иксов никак не может запилить... угадайте кто.

Чужой опыт: говорят, какой-то коллектив в моей организации пытался приспособить видеокарту к обработке сигналов. То ли руки у коллег были кривые, то ли время копирования убило весь профит, но выигрыша в производительности не получилось. Так что смотрите, где у вас может быть боттлнек.

CUDA даже не пробовал учить — у стандарта, контролируемого одной корпорацией, нет будущего. Ну и CPU fallback не сделаешь, ясное дело.

anonymous
()
Ответ на: комментарий от Deleted

opencl, который подходит лишь для твердых телом и духом

Интересно, кто тебе такое рассказал. OpenCL - это по виду С, ничего в нем особо сложного нет по сравнению с CUDA. Правда, тебе в обоих случаях придется изучать, как работает память на GPU, за тебя это никто не сделает. CUDA в целом не настолько сильно отличается от OpenCL, достаточно хорошие мануалы есть по обоим. При этом OpenCL отличается хорошей поддержкой GPU от AMD/nVidia, CPU от AMD/Intel, а также есть драйвера для всяких специализированных процессоров типа Parallella.

Субъективно про сложность изучения - лично мне OpenCL показался более логичным и простым по структуре, чем CUDA.

Про производительность - сам не проверял, было лень. В данный момент использую OpenCL на нвидиевской карте. Считает хорошо и ладно.

Про твою задачу - вангую, что использование практически любой GPU будет медленнее процессора. У тебя задача плохо параллелится - не думаю, что тебе удастся раскидать сложение 300 пар чисел на несколько тысяч потоков. Второе - сами операции простые, следовательно, у тебя всё время будет уходить на передачу данных между GPU и RAM. А это одно из основных бутылочных горлышек в GPGPU. Так что мой совет - OpenMP.

lu4nik ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.