2015-08-10 4 views
0

Я пытаюсь разработать приложение на C++, которое будет запускать многие вычисления параллельно. Алгоритмы будут довольно большими, но они будут чисто математическими и целыми числами с плавающей запятой. Поэтому они должны работать на графическом процессоре с использованием OpenCL. Я хотел бы, чтобы программа работала над системами, которые не поддерживают OpenCL, но я хотел бы, чтобы она также могла использовать GPU для дополнительной скорости в системах, которые это делают.Совместное использование многопоточного кода между стандартными C++ и OpenCL

Моя проблема в том, что я не хочу поддерживать два набора кода (стандартный C++, вероятно, используя std :: thread и OpenCL). Я действительно понимаю, что я смогу поделиться большим количеством фактического кода, но единственный очевидный способ сделать это - вручную скопировать разделяемые части между файлами, и это действительно не то, что я хочу сделать для соображений удобства и для предотвращения ошибок.

Я хотел был бы иметь возможность использовать только один набор файлов. Есть ли правильный способ сделать это? Будет ли эмуляция OpenCL опцией?

PS. Я знаю эмулятор AMD OpenCL, но, похоже, он предназначен только для разработки, а также только для Windows. Или я ошибаюсь?

ответ

1

OpenCL может использовать CPU в качестве вычислительного устройства, поэтому OpenCL-код может работать на платформах без GPU. Однако архитектурные различия между графическим процессором и процессором, скорее всего, потребуют от вас поддержки двух базовых кодов для обеспечения оптимальной производительности в обеих ситуациях.

+0

Я понимаю, что OpenCL может работать на процессоре, но на более старых платформах и особенно встраиваемых устройствах, как правило, не имеют собственных драйверов OpenCL, доступных для него. – Gerharddc

+0

Хорошо, я неправильно понял, я предположил, что OpenCL по-прежнему доступен на всех платформах, на которые вы нацеливались, и это был просто графический процессор, который отсутствовал. – Aderstedt

+0

@Gerhman Несвязанный, но есть ли у вас возможность использовать MMX/SSE на старых платформах/встроенных устройствах? Если вы хотите скорость, это определенно стоит посмотреть. – RyanP

Смежные вопросы