Я делаю свои первые шаги в OpenCL (и CUDA) для моей стажировки. Все хорошо, теперь у меня есть рабочий код OpenCL, но я думаю, что время вычислений слишком велико. Я предполагаю, что я делаю слишком много операций ввода-вывода, но я не знаю, где это может быть.
Код для основного: http://pastebin.com/i4A6kPfn, и для ядра: http://pastebin.com/Wefrqifh Я начинаю измерять время после возвращения segmentPunten(segmentArray, begin, eind);
, и я заканчиваю измерение времени после последнего clEnqueueReadBuffer
.
Время вычислений на Nvidia GT440 составляет 38,6 секунды, на GT555M 35,5, на Athlon II X4 5,6 секунды и на Intel P8600 6 секунд.
Может кто-нибудь объяснить мне это? Почему время вычислений так велико, и какие решения для этого есть?
Что он должен делать: (короткая версия), чтобы вычислить, какую шумовую нагрузку создает проходящий мимо самолет.
длинная версия: есть несколько точек наблюдения (OP), которые являются точками, в которых звук измеряется с самолета, который проходит мимо. Маршрут полета сегментируется на 10 000 сегментов, это делается с помощью функции plotPunten. Двойной цикл for в главном дает ОП координату. Есть два ядра. Первый рассчитывает расстояние от одного OP до одного сегмента. Затем он сохраняется в массиве «afstanden». Второе ядро вычисляет звуковую нагрузку в OP из всех сегментов.