Есть несколько различий между типами устройств.Простой ответ на ваш векторный вопрос: используйте gpu для больших векторов и cpu для небольших рабочих нагрузок.
1) Копирование памяти.Графические процессоры полагаются на данные, с которыми вы работаете, для передачи в них, а результаты позднее считываются на хост.Это делается через PCI-e, который дает около 5 ГБ / с для версии 2.0 / 2.1.Процессоры могут использовать буферы «на месте» - в DDR3 - используя флаги CL_MEM_ALLOC_HOST_PTR или CL_MEM_USE_HOST_PTR.Смотрите здесь: clCreateBuffer .Это одно из самых узких мест для многих ядер.
2) Тактовая частота.В настоящее время процессоры имеют большую опережающую скорость в тактовой частоте.2 ГГц на нижнем конце для большинства процессоров, против 1 ГГц на верхнем уровне для большинства процессоров в наши дни.Это один из факторов, который действительно помогает процессору «побеждать» над процессором для небольших рабочих нагрузок.
3) Параллельные «потоки».Высококачественные графические процессоры обычно имеют больше вычислительных единиц, чем их коллеги.Например, 6970 GPU (Cayman) имеет 24 вычислительных блока opencl, каждый из которых разделен на 16 блоков SIMD.Большинство топовых процессоров для настольных ПК имеют 8 ядер, а серверные процессоры в настоящее время останавливаются на 16 ядрах.(карта ядер процессора 1: 1 для вычисления количества единиц) Вычислительная единица в opencl - это часть устройства, которая может выполнять работу, отличную от остальной части устройства.
4) Типы потоков.У gpus SIMD-архитектура со многими графически ориентированными инструкциями.У процессоров есть много областей, посвященных предсказанию ветвлений и общим вычислениям.Процессор может иметь SIMD-блок и / или модуль с плавающей запятой в каждом ядре, но упомянутый выше чип Cayman имеет 1536 блоков с набором команд gpu, доступным для каждого.AMD называет их потоковыми процессорами, и в каждом из упомянутых выше блоков SIMD их по 4 (24x16x4 = 1536).Ни у одного процессора не будет такого количества модулей типа sin (x) или с поддержкой точечных продуктов, если только производитель не захочет отключить кеш-память или оборудование для прогнозирования ветвлений.SIMD-компоновка графического процессора, вероятно, самая большая «победа» в ситуациях сложения больших векторов.Это также делает другие специализированные функции - большой бонус.
5) Пропускная способность памяти.Процессор с DDR3: ~ 17 ГБ / с.Высокопроизводительные графические процессоры> 100 ГБ / с, скорости более 200 ГБ / с в последнее время стали обычным явлением.Если ваш алгоритм не ограничен PCI-e (см. # 1), gpu будет опережать процессор при доступе к сырой памяти.Единицы планирования в графическом процессоре могут скрыть задержку памяти, выполняя только те задачи, которые не ожидают доступа к памяти.AMD называет это волновым фронтом, а Nvidia - варпом.У cpus есть большая и сложная система кэширования, которая помогает скрыть время доступа к памяти в случае, когда программа повторно использует данные.Для вашей проблемы сложения векторов вы, вероятно, будете более ограничены шиной PCI-e, поскольку векторы обычно используются только один или два раза каждый.
6) Эффективность энергопотребления.GPU (используется правильно) обычно будет более электрически эффективнее, чем процессор.Поскольку процессоры доминируют по тактовой частоте, один из единственных способов действительно снизить энергопотребление - это снизить тактовую частоту микросхемы.Это, очевидно, приводит к увеличению времени вычислений.Многие из лучших систем в списке Green 500 сильно ускорены GPU.см. здесь: green500.org