Other than that CUDA and OpenCL are rather similar, these are based on the same concepts. Metal, however, is rather different.
It's not that different, I'd say. Yes, it's a different ecosystem in terms of building apps and a few framework concepts, but that's also the case for CUDA and OpenCL. The kernels can be ported easily since they're also just C-like. So, all in all I'd say that Metal doesn't really differ from OpenCL or CUDA. All three share the same kinds of similarities and differences.
I agree with Bernd; it doesn't make sense to maintain different codepaths for hardware. Apple makes an amazing chip. But there are other amazing chips in our world, and there will be tons more of these in the future. And while cross-platform and open-source-software are fantastic ideas in my opinion, I can see why some corporations may want the opposite, at least for the near-term future.
I'd love to see an "intermediary layer" rise to prominence: something that creates hardware-specific optimized gpu contexts that are needed for a task, and then manages memory and brokers data thru those pipelines. This could be a cross-platform library like WebGPU, or a transcription process with AI or similar. I'm not a big fan of AI, but I can see how it would be useful for such a task. Translation layers are maybe encumbering on performance and difficult to maintain. But transcribing an openCL compute pipeline to metal, cuda, vulkan, and future etc codebases would be so very helpful.
I have a problem I am trying to solve: Running native M* tasks on both the CPU and the GPU. (and yes, I have both "CPU" and "Apple GPU" and "Run CPU versions of applications for which GPU versions are available" selected)
On the application page, I see that Binary Radio Pulsar Search (Arecibo,GBT,A) (BRP4A) has apps for:
1: Mac OS X running on ARM: (blank)
2: Mac OS X running on ARM: apple_gpu-opencl
3: Mac OS X running on ARM: Apple_M-opencl
I am getting GPU tasks for my GPU from #3. But nothing for my CPU. I assume that #1 is CPU and not GPU, but I can't tell for sure from the info on that table. Maybe #1 is not actually CPU?
I think your assessment is correct. Unfortunately you've reached your daily task quota (something we need to tune anyway) so your latest scheduler request won't show what your client actually would have requested. I reset that quota, so please trigger a work request and let me know when that's done.
Also: "Run CPU versions of applications for which GPU versions are available" had been misnamed and obsolete for years. I removed it. Client and scheduler should hopefully handle your case automatically. The log above will tell.
That fixed it! I got tasks for both the CPU and GPU running now. Thanks!
Sorry, those tasks that downloaded were Gamma-ray pulsar search #5 (FGRP5). I had also turned that app on, in trying to see if I could get CPU apps from the other M* app. I forgot. So I unselected Gamma-ray pulsar search #5 (FGRP5), and aborted those 4 tasks. Now when I update the client, I get:
419809 Einstein@Home 8/29/2024 7:39:43 AM Requesting new tasks for CPU
419810 Einstein@Home 8/29/2024 7:39:43 AM [sched_op] CPU work request: 30240.00 seconds; 3.50 devices
419811 Einstein@Home 8/29/2024 7:39:43 AM [sched_op] Apple M1 work request: 0.00 seconds; 0.00 devices
419812 Einstein@Home 8/29/2024 7:39:45 AM Scheduler request completed: got 0 new tasks
419813 Einstein@Home 8/29/2024 7:39:45 AM Server error: feeder not running
Update: After waiting a few minutes, I am now getting:
420200 Einstein@Home 8/29/2024 7:46:37 AM update requested by user
420207 Einstein@Home 8/29/2024 7:46:43 AM [sched_op] sched RPC pending: Requested by user
420208 Einstein@Home 8/29/2024 7:46:43 AM [sched_op] Starting scheduler request
420209 Einstein@Home 8/29/2024 7:46:43 AM Sending scheduler request: Requested by user.
420210 Einstein@Home 8/29/2024 7:46:43 AM Reporting 6 completed tasks
420211 Einstein@Home 8/29/2024 7:46:43 AM Requesting new tasks for CPU
420212 Einstein@Home 8/29/2024 7:46:43 AM [sched_op] CPU work request: 30240.00 seconds; 3.50 devices
420213 Einstein@Home 8/29/2024 7:46:43 AM [sched_op] Apple M1 work request: 0.00 seconds; 0.00 devices
420214 Einstein@Home 8/29/2024 7:46:46 AM Scheduler request completed: got 0 new tasks
420215 Einstein@Home 8/29/2024 7:46:46 AM [sched_op] Server version 611
420216 Einstein@Home 8/29/2024 7:46:46 AM No work sent
420217 Einstein@Home 8/29/2024 7:46:46 AM No work is available for Binary Radio Pulsar Search (Arecibo,GBT,A)
FWIW, my machine has since asked for CPU work, and did receive some. But the client thinks all the tasks received are GPU tasks. So now I have a total of 349 tasks, all for the GPU. Those 349 tasks are 1d 10h worth of work for the GPU, and my cache is set to .1 days. I think my client keeps asking for work, because the CPU threads are idle, and the GPU queue of tasks just keep getting bigger and bigger.
FWIW, this is the client: https://einsteinathome.org/host/13179066
424901 Einstein@Home 8/29/2024 9:01:28 AM [sched_op] Starting scheduler request
424902 Einstein@Home 8/29/2024 9:01:28 AM Sending scheduler request: To report completed tasks.
424903 Einstein@Home 8/29/2024 9:01:28 AM Reporting 1 completed tasks
424904 Einstein@Home 8/29/2024 9:01:28 AM Requesting new tasks for CPU
424905 Einstein@Home 8/29/2024 9:01:28 AM [sched_op] CPU work request: 30240.00 seconds; 3.50 devices
424906 Einstein@Home 8/29/2024 9:01:28 AM [sched_op] Apple M1 work request: 0.00 seconds; 0.00 devices
424907 Einstein@Home 8/29/2024 9:01:31 AM Scheduler request completed: got 39 new tasks
424908 Einstein@Home 8/29/2024 9:01:31 AM [sched_op] Server version 611
424909 Einstein@Home 8/29/2024 9:01:31 AM Project requested delay of 60 seconds
424910 Einstein@Home 8/29/2024 9:01:31 AM [sched_op] estimated total CPU task duration: 0 seconds
424911 Einstein@Home 8/29/2024 9:01:31 AM [sched_op] estimated total Apple M1 task duration: 14783 seconds
424912 Einstein@Home 8/29/2024 9:01:31 AM [sched_op] handle_scheduler_reply(): got ack for task p2030.1724858706.G60.20-03.65.C.b2s0g0.00000_2330_1
424913 Einstein@Home 8/29/2024 9:01:31 AM [sched_op] Deferring communication for 00:01:00
424914 Einstein@Home 8/29/2024 9:01:31 AM [sched_op] Reason: requested by project
I think my client keeps asking for work, because the CPU threads are idle, and the GPU queue of tasks just keep getting bigger and bigger.
I don't think this is the case since the CPU-only requests like the above don't return any, even if your daily quota isn't yet reached.
Quote:
FWIW, my machine has since asked for CPU work, and did receive some. But the client thinks all the tasks received are GPU tasks. So now I have a total of 349 tasks, all for the GPU. Those 349 tasks are 1d 10h worth of work for the GPU, and my cache is set to .1 days.
Are your sure those requests didn't also request more GPU work? Please ignore the cache size issue which might be an independent factor/issue.
I need to ask for your patience here as investigating this is will take some time because we're understaffed at the moment. Rest assured we're on it.
In the last post (227837), you can see it asks for ONLY CPU tasks, and then receives 39 tasks. Those 39 tasks are GPU tasks. I don't think it has ever received any CPU tasks to date.
424905 Einstein@Home 8/29/2024 9:01:28 AM [sched_op] CPU work request: 30240.00 seconds; 3.50 devices
424906 Einstein@Home 8/29/2024 9:01:28 AM [sched_op] Apple M1 work request: 0.00 seconds; 0.00 devices
424907 Einstein@Home 8/29/2024 9:01:31 AM Scheduler request completed: got 39 new tasks
Bernd Machenschalk
)
It's not that different, I'd say. Yes, it's a different ecosystem in terms of building apps and a few framework concepts, but that's also the case for CUDA and OpenCL. The kernels can be ported easily since they're also just C-like. So, all in all I'd say that Metal doesn't really differ from OpenCL or CUDA. All three share the same kinds of similarities and differences.
Oliver
Einstein@Home Project
I agree with Bernd; it
)
I agree with Bernd; it doesn't make sense to maintain different codepaths for hardware. Apple makes an amazing chip. But there are other amazing chips in our world, and there will be tons more of these in the future. And while cross-platform and open-source-software are fantastic ideas in my opinion, I can see why some corporations may want the opposite, at least for the near-term future.
I'd love to see an "intermediary layer" rise to prominence: something that creates hardware-specific optimized gpu contexts that are needed for a task, and then manages memory and brokers data thru those pipelines. This could be a cross-platform library like WebGPU, or a transcription process with AI or similar. I'm not a big fan of AI, but I can see how it would be useful for such a task. Translation layers are maybe encumbering on performance and difficult to maintain. But transcribing an openCL compute pipeline to metal, cuda, vulkan, and future etc codebases would be so very helpful.
chilina wrote: I'd love to
)
Well, OpenCL was meant to be just that but the industry simply dropped it in favor of their own specific platforms...
Einstein@Home Project
I have a problem I am trying
)
I have a problem I am trying to solve: Running native M* tasks on both the CPU and the GPU. (and yes, I have both "CPU" and "Apple GPU" and "Run CPU versions of applications for which GPU versions are available" selected)
On the application page, I see that Binary Radio Pulsar Search (Arecibo,GBT,A) (BRP4A) has apps for:
1: Mac OS X running on ARM: (blank)
2: Mac OS X running on ARM: apple_gpu-opencl
3: Mac OS X running on ARM: Apple_M-opencl
I am getting GPU tasks for my GPU from #3. But nothing for my CPU. I assume that #1 is CPU and not GPU, but I can't tell for sure from the info on that table. Maybe #1 is not actually CPU?
Can someone please explain?
Reno, NV Team: SETI.USA
I think your assessment is
)
I think your assessment is correct. Unfortunately you've reached your daily task quota (something we need to tune anyway) so your latest scheduler request won't show what your client actually would have requested. I reset that quota, so please trigger a work request and let me know when that's done.
Also: "Run CPU versions of applications for which GPU versions are available" had been misnamed and obsolete for years. I removed it. Client and scheduler should hopefully handle your case automatically. The log above will tell.
Cheers
Einstein@Home Project
That fixed it! I got tasks
)
That fixed it! I got tasks for both the CPU and GPU running now. Thanks!Sorry, those tasks that downloaded were Gamma-ray pulsar search #5 (FGRP5). I had also turned that app on, in trying to see if I could get CPU apps from the other M* app. I forgot. So I unselected Gamma-ray pulsar search #5 (FGRP5), and aborted those 4 tasks. Now when I update the client, I get:
419809 Einstein@Home 8/29/2024 7:39:43 AM Requesting new tasks for CPU
419810 Einstein@Home 8/29/2024 7:39:43 AM [sched_op] CPU work request: 30240.00 seconds; 3.50 devices
419811 Einstein@Home 8/29/2024 7:39:43 AM [sched_op] Apple M1 work request: 0.00 seconds; 0.00 devices
419812 Einstein@Home 8/29/2024 7:39:45 AM Scheduler request completed: got 0 new tasks
419813 Einstein@Home 8/29/2024 7:39:45 AM Server error: feeder not running
Update: After waiting a few minutes, I am now getting:
420200 Einstein@Home 8/29/2024 7:46:37 AM update requested by user
420207 Einstein@Home 8/29/2024 7:46:43 AM [sched_op] sched RPC pending: Requested by user
420208 Einstein@Home 8/29/2024 7:46:43 AM [sched_op] Starting scheduler request
420209 Einstein@Home 8/29/2024 7:46:43 AM Sending scheduler request: Requested by user.
420210 Einstein@Home 8/29/2024 7:46:43 AM Reporting 6 completed tasks
420211 Einstein@Home 8/29/2024 7:46:43 AM Requesting new tasks for CPU
420212 Einstein@Home 8/29/2024 7:46:43 AM [sched_op] CPU work request: 30240.00 seconds; 3.50 devices
420213 Einstein@Home 8/29/2024 7:46:43 AM [sched_op] Apple M1 work request: 0.00 seconds; 0.00 devices
420214 Einstein@Home 8/29/2024 7:46:46 AM Scheduler request completed: got 0 new tasks
420215 Einstein@Home 8/29/2024 7:46:46 AM [sched_op] Server version 611
420216 Einstein@Home 8/29/2024 7:46:46 AM No work sent
420217 Einstein@Home 8/29/2024 7:46:46 AM No work is available for Binary Radio Pulsar Search (Arecibo,GBT,A)
Reno, NV Team: SETI.USA
Thanks, something's indeed
)
Thanks, something's indeed fishy there... We're looking into it.
Einstein@Home Project
FWIW, my machine has since
)
FWIW, my machine has since asked for CPU work, and did receive some. But the client thinks all the tasks received are GPU tasks. So now I have a total of 349 tasks, all for the GPU. Those 349 tasks are 1d 10h worth of work for the GPU, and my cache is set to .1 days. I think my client keeps asking for work, because the CPU threads are idle, and the GPU queue of tasks just keep getting bigger and bigger.
FWIW, this is the client: https://einsteinathome.org/host/13179066
424901 Einstein@Home 8/29/2024 9:01:28 AM [sched_op] Starting scheduler request
424902 Einstein@Home 8/29/2024 9:01:28 AM Sending scheduler request: To report completed tasks.
424903 Einstein@Home 8/29/2024 9:01:28 AM Reporting 1 completed tasks
424904 Einstein@Home 8/29/2024 9:01:28 AM Requesting new tasks for CPU
424905 Einstein@Home 8/29/2024 9:01:28 AM [sched_op] CPU work request: 30240.00 seconds; 3.50 devices
424906 Einstein@Home 8/29/2024 9:01:28 AM [sched_op] Apple M1 work request: 0.00 seconds; 0.00 devices
424907 Einstein@Home 8/29/2024 9:01:31 AM Scheduler request completed: got 39 new tasks
424908 Einstein@Home 8/29/2024 9:01:31 AM [sched_op] Server version 611
424909 Einstein@Home 8/29/2024 9:01:31 AM Project requested delay of 60 seconds
424910 Einstein@Home 8/29/2024 9:01:31 AM [sched_op] estimated total CPU task duration: 0 seconds
424911 Einstein@Home 8/29/2024 9:01:31 AM [sched_op] estimated total Apple M1 task duration: 14783 seconds
424912 Einstein@Home 8/29/2024 9:01:31 AM [sched_op] handle_scheduler_reply(): got ack for task p2030.1724858706.G60.20-03.65.C.b2s0g0.00000_2330_1
424913 Einstein@Home 8/29/2024 9:01:31 AM [sched_op] Deferring communication for 00:01:00
424914 Einstein@Home 8/29/2024 9:01:31 AM [sched_op] Reason: requested by project
Reno, NV Team: SETI.USA
Quote:I think my client
)
I don't think this is the case since the CPU-only requests like the above don't return any, even if your daily quota isn't yet reached.
Are your sure those requests didn't also request more GPU work? Please ignore the cache size issue which might be an independent factor/issue.
I need to ask for your patience here as investigating this is will take some time because we're understaffed at the moment. Rest assured we're on it.
Thanks
Einstein@Home Project
In the last post (227837),
)
In the last post (227837), you can see it asks for ONLY CPU tasks, and then receives 39 tasks. Those 39 tasks are GPU tasks. I don't think it has ever received any CPU tasks to date.
424905 Einstein@Home 8/29/2024 9:01:28 AM [sched_op] CPU work request: 30240.00 seconds; 3.50 devices
424906 Einstein@Home 8/29/2024 9:01:28 AM [sched_op] Apple M1 work request: 0.00 seconds; 0.00 devices
424907 Einstein@Home 8/29/2024 9:01:31 AM Scheduler request completed: got 39 new tasks
Reno, NV Team: SETI.USA