我正在研究一个算法,可以做很多次相同的操作。由于该操作由一些线性代数(BLAS)组成,因此我将尝试使用GPU进行此操作。opencl命令队列如何工作,我可以问些什么
我写了我的内核,并开始在命令队列上推送内核。由于每次打电话后我都不想等待,我想我会试着用事件串联我的电话,然后开始在队列中推送这些电话。
call kernel1(return event1)
call kernel2(wait for event 1, return event 2)
...
call kernel1000000(vait for event 999999)
现在的问题是,是否所有这一切被推到做驱动程序存储区的队列图形芯片?它对我可以使用的事件的数量或者命令队列的长度有一个限制,我查看过但我一直无法找到它。
我正在使用atMonitor来检查我的GPU的利用率,并且很难将它推到20%以上,这可能是因为我无法以足够快的速度将呼叫推出去吗?我的数据已经存储在GPU上,我传递的所有内容都是实际的通话。
好的,你能告诉我你从哪里知道吗?我试图找出opencl的实际规格,但它并不容易(我正在考虑切换到CUDA)。 你说什么,驱动程序捆绑的命令,并将它们发送到大块的GPU? –
我认为驱动程序根据OpenCL文档clFinish块自动捆绑命令,直到传入的命令队列中的所有命令都已完成执行,因此除非您调用clFinish OpenCL将决定何时执行命令。然而,呼叫clFinish是昂贵的,应该避免,但我仍然会尝试。您是否认为您的GPU可能足够快以执行您的计算,而不需要100%的功率?我唯一能想到的另一件事是OpenCL限制了GPU的使用,所以你的电脑显示屏不会锁定 –