Выполнение программы занимает почти столько же времени на процессоре, сколько на GPU - PullRequest
1 голос
/ 23 марта 2012

Программа для поиска простых чисел с использованием OpenCL 1.1 дала следующие тесты:

Устройство: CPU

В реальном времени: ок. 3 сек Пользовательское время: прибл. 32 сек

Устройство: Графический процессор

В реальном времени - ок. 37 сек Пользовательское время - ок. 32 с

Почему время выполнения на GPU не меньше, чем на CPU? Не происходит ли распараллеливание данных / задач?

Характеристики системы: 64-разрядная система CentOS 5.3 с двумя видеокартами ATI Radeon 5970 + процессор Intel Core i7 (12 ядер)

1 Ответ

1 голос
/ 23 марта 2012

Ваше ядро ​​довольно неэффективно, у меня есть скорректированное ниже для вашего рассмотрения.Что касается того, почему он работает лучше на устройстве с процессором ...

  1. Используя ваш алгоритм, для выполнения рабочих элементов требуется разное количество времени.Они будут занимать больше времени, так как тестируемые числа увеличиваются.Рабочая группа в графическом процессоре не будет завершена до тех пор, пока все ее элементы не будут завершены, а некоторые аппаратные средства останутся бездействующими, пока не будет выполнен последний элемент.В процессоре он ведет себя больше как цикл, повторяющийся над элементами ядра, поэтому разница в циклах, необходимых для вычисления каждого элемента, не окажет существенного влияния на производительность.
  2. 'A' не используется ядром.Это не должно быть скопировано, если это не используется.Похоже, вы хотели протестировать A [i], а не сам «i».

Я думаю, что GPU будет намного лучше при вычислениях простых чисел на основе FFT или даже ситового алгоритма.

{
    int t;
    int i = get_global_id(0);
    int end = sqrt(i);

    if(i%2){
        B[i] = 0;
    }else{
        B[i] = 1; //assuming only that it should be non-zero
    }
    for ( t = 3; (t<=end)&&(B[i] > 0) ; t+=2 ) {
        if ( i % t == 0 ) {
            B[ i ] = 0;
        }
    }
}
...