OpenCL* for CPU
Ask questions and share information on Intel® SDK for OpenCL™ Applications and OpenCL™ implementations for Intel® CPU.
Announcements
This forum covers OpenCL* for CPU only. OpenCL* for GPU questions can be asked in the GPU Compute Software forum. Intel® FPGA SDK for OpenCL™ questions can be ask in the FPGA Intel® High Level Design forum.
1719 Discussions

Kickstart the GPU clock boost to reach maximum frquency

Stephan1
Beginner
1,321 Views

To whom it may concern:
(Maybe this is not the right forum, or it has been asked before ... )

Background: Power saving on CPU / GPU level like on a mobile device is not required for my application.
My application uses the Intel internal GPU as a high performance coprocessor via OpenCL.
The application actually does handover with lowfrequence kernel calls. And the kernels do not last until next call is given.
Hence the GPU gets not enough workload to raise / boost the GPU clock.
So I face that the OpenCL kernels are not running at potential maximum performance.

Question: Is there a decicated call to kickstart the GPU clock boost to reach maximum clock frequency, even while Intel HD GPU is idle ?
The latency to come to max GPU clock would take my application into account.
Then my kernels would reach maximum performance.

By the way: Is this an issue at all for a Intel HD GPU in a workstation with relaxed power saving constrains ?

Otherwise: I think I need to implement a workaround like:
- Let some low prio dummy kernels run all the time on the GPU to keep the clock at maximum
- Send real work to the GPU with high prio
OR
- collect work and send it as burst
- in the meantime send dummy kernels to keep the GPU busy.


Thanks in advance for the answer. Best regards, Stephan

0 Kudos
1 Solution
Robert_I_Intel
Employee
1,321 Views

Stephan, Biao,

Currently there is no way to fix the Intel GPU frequency without using internal Intel tools, which are not available to general public. One way to ensure that you get a better frequency ramp up is to use High Performance setting in Control Panel\Hardware and Sound\Power Options. Still, the GPU frequency will oscillate dynamically, though in a smaller range.

The other, as you correctly pointed out, is to "warm up" the GPU with the dummy kernels.

View solution in original post

0 Kudos
4 Replies
Biao_W_
Beginner
1,321 Views

I think it is an interesting point, I am also annoying when I do not have power constrain but to exploit the maximum performance

Intel support engineers, please give a clue how to set a fixed frequency for the i-GPU

Best regards

0 Kudos
Robert_I_Intel
Employee
1,322 Views

Stephan, Biao,

Currently there is no way to fix the Intel GPU frequency without using internal Intel tools, which are not available to general public. One way to ensure that you get a better frequency ramp up is to use High Performance setting in Control Panel\Hardware and Sound\Power Options. Still, the GPU frequency will oscillate dynamically, though in a smaller range.

The other, as you correctly pointed out, is to "warm up" the GPU with the dummy kernels.

0 Kudos
Stephan1
Beginner
1,321 Views

Hi Robert.
Thank you for your answer.

Is there an example how to do establish a high / low prio ordering in an  Out of order execution command queue ?

Or is it just as simple as:  Two host threads feed the in-order queue. As those clEnqueueNDRangeKernel are blocking, while one is waiting to finsh its kernel the other has the chance to enter the next kernel call ?

And would this also work for an Out of order queue ?

Best regards, Stephan

0 Kudos
Robert_I_Intel
Employee
1,321 Views

Stephan,

The only thing I can think of how to implement high/low priority ordering queue is to create your own priority queue object that will wrap out of order command queue. As you receive high priority items, you can enqeueu them immediately. The low priority items you can enqueue with the user event dependency, which you signal via clSetUserEvenStatus once there are no incoming high priority items and all your highpriority enqueues signaled completion.

In order queues execute items in order of submission by definition, so until one clEnqueueNDRangeKernel is complete, the other would not start.

 

0 Kudos
Reply