Я хочу измерить производительность (чтение времени выполнения) моего кода ядра на разных устройствах, а именно на процессорах и графических процессорах. Код ядра, который я написал это:Вычислить время выполнения кода ядра в OpenCL C
__kernel void dataParallel(__global int* A)
{
sleep(10);
A[0]=2;
A[1]=3;
A[2]=5;
int pnp;//pnp=probable next prime
int pprime;//previous prime
int i,j;
for(i=3;i<500;i++)
{
j=0;
pprime=A[i-1];
pnp=pprime+2;
while((j<i) && A[j]<=sqrt((float)pnp))
{
if(pnp%A[j]==0)
{
pnp+=2;
j=0;
}
j++;
}
A[i]=pnp;
}
}
Однако мне сказали, что это не представляется возможным использовать сон() в коде ядра. Если это правда, тогда кто-то может объяснить причину, и если это не так, расскажите, как это реализовать.
Кроме того, поскольку я сказал, что хочу сравнить производительность моего процессора и графических процессоров, одним из способов достижения этого является вычисление времени выполнения кода ядра на разных устройствах, а если есть другой способ с помощью которого я мог бы заставить код запускать на всех устройствах одновременно, тогда мне просто нужно было бы указать соответствующее время окончания выполнения и это послужило бы цели! Является ли это возможным?
Аппаратные детали:
GPU: AMD FirePro W7000, NVIDIA TESLA C2075 CPU: Intel (R) Xeon (R) CPU X5660 @ 2.80GHZn
Что делает функция 'sleep()' связана с измерением производительности? – talonmies
У меня мог бы быть поток спать за 30 секунд и начать выполнение кода ядра на всех трех устройствах. Если время выполнения составляет 90 секунд (для 3 устройств), это означает, что код будет выполняться серийно и не параллельно, как и предполагалось, если время выполнения несколько выше 30 секунд, тогда мой код выполняется параллельно на всех трех устройствах , – ikk
@talonmies вы могли бы предложить лучший способ достичь этого. Thnx – ikk