Я пишу программу OpenCL, которую я впервые написал на своем Macbook Pro, и поскольку мой настольный компьютер сильнее, я хотел портировать код и посмотреть, есть ли какие-либо улучшения.OpenCL медленнее на настольном компьютере, чем macbook 13 «
Тот же самый код баллотировался:
Mac: 0.055452s
Win7: 0.359s
характеристики обоих компьютеров: Mac: 2.6GHz Intel Core i5, 8 Гб 1600 МГц DDR3, Intel Iris 1536MB
PC: 3,3 ГГц Intel Core i5-2500K, 8 Гб 1600 МГц DDR3, AMD Radeon HD 6900 Series
Теперь, как вы можете увидеть код побежал на моем Mac почти в 10 раз быстрее, чем на моем настольном ПК.
я приурочил код с помощью
#include<ctime>
clock_t begin = clock();
....// Entire main file
float timeTaken = (float)(clock() - begin)/CLOCKS_PER_SEC;
cout << "Time taken: " << timeTaken << endl;
Если я не ошибаюсь, как CPU и GPU сильнее на ПК. Я смог запустить Battlefield 3 на настройках Ultra с помощью этого настольного компьютера.
Только разница может заключаться в том, что Visual Studio на ПК компилируется с другим компилятором? Я использовал g ++ на своем mac, не уверен, что использует Visual Studio.
Эти результаты не имеют смысла для меня. Ребята, что вы думаете? Если вы хотите, чтобы проверить код, который я могу разместить ссылку GitHub
EDIT: Следующая ссылка GitHub показывает код https://github.com/Batkow/OpenCL/tree/master/OpenCL. PSO_V2 использует тип кодирования, используемые в учебнике из: https://www.fixstars.com/en/opencl/book/OpenCLProgrammingBook/introduction-to-parallelization/
И ПСО упрощает кодирование с использованием пользовательских заголовков из этого GitHub репо: https://github.com/HandsOnOpenCL/Exercises-Solutions ..
Я побежал код на моих друзьях нового i7 портативного компьютера с NVidia Geforce 950M и код был выполнен еще медленнее, чем на моем настольном ПК.
Я действительно понимаю, что код не оптимизирован, поэтому любые намеки на глупые вещи, которые я делаю, пожалуйста, обращайтесь к ним. Например, если цикл while через три разные функции ядра выглядит глупо правильным? Я работаю над тем, чтобы реализовать все это внутри ядра и внутри него цикла, что должно повысить производительность?
ОБНОВЛЕНИЕ: Раскройте код OpenCL/PSO на окнах дома снова. Сроки кода до и после цикла while дают WINDOWS более высокую производительность yay!
clock_t Win7 = 0,027 и Mac = 0,036. Использование внешнего .hpp с классом Util :: Timer Win7 продолжалось: 0,026, а Mac - 0,085.
С момента начала основного файла справа перед циклом while (все инициализации) Mac набрал лучше Windows почти в 10 раз, используя как clock_t, так и Util :: Timer. Итак, узкое место, похоже, стоит на инициализации устройства?
попробуйте прочитать это: [link] (http://stackoverflow.com/questions/21134279/difference-in-performance-between-msvc-and-gcc-for-highly-optimized-matrix-multp) – Incomputable
Пожалуйста отправьте ссылку на код. Непонятно, что именно вы выбрали из этого фрагмента кода - вы также синхронизируете инициализацию устройства, компиляцию времени выполнения, распределение/передачу памяти устройства и т. Д.? Это добавит большие накладные расходы к вашим таймингам, которые будут сильно различаться между платформами. – jprice
При сравнении разницы между процессором и графическим процессором у вас есть * как минимум *, чтобы исключить передачу памяти из эталона. Как уже упоминалось выше, разместите свой код. –