Metal | Examples for Apple 's Metal APIs | iOS library
kandi X-RAY | Metal Summary
kandi X-RAY | Metal Summary
This repo contains code with examples on how to use Apple's Metal GPU APIs. Some sample code has been created entirely by me, while others have been picked from Github. The latter ones are in this repo because they have been heavily modified, not only to support the latest version of Swift, but also to add support to iOS or macOS (when applicable). Links to the source Github repos or websites are provided.
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of Metal
Metal Key Features
Metal Examples and Code Snippets
Community Discussions
Trending Discussions on Metal
QUESTION
I just got my new MacBook Pro with M1 Max chip and am setting up Python. I've tried several combinational settings to test speed - now I'm quite confused. First put my questions here:
- Why python run natively on M1 Max is greatly (~100%) slower than on my old MacBook Pro 2016 with Intel i5?
- On M1 Max, why there isn't significant speed difference between native run (by miniforge) and run via Rosetta (by anaconda) - which is supposed to be slower ~20%?
- On M1 Max and native run, why there isn't significant speed difference between conda installed Numpy and TensorFlow installed Numpy - which is supposed to be faster?
- On M1 Max, why run in PyCharm IDE is constantly slower ~20% than run from terminal, which doesn't happen on my old Intel Mac.
Evidence supporting my questions is as follows:
Here are the settings I've tried:
1. Python installed by
- Miniforge-arm64, so that python is natively run on M1 Max Chip. (Check from Activity Monitor,
Kind
of python process isApple
). - Anaconda. Then python is run via Rosseta. (Check from Activity Monitor,
Kind
of python process isIntel
).
2. Numpy installed by
conda install numpy
: numpy from original conda-forge channel, or pre-installed with anaconda.- Apple-TensorFlow: with python installed by miniforge, I directly install tensorflow, and numpy will also be installed. It's said that, numpy installed in this way is optimized for Apple M1 and will be faster. Here is the installation commands:
ANSWER
Answered 2021-Dec-06 at 05:53Since the benchmark is running linear algebra routines, what is likely being tested here are the BLAS implementations. A default Anaconda distribution for osx-64 platform is going to come with Intel's MKL implementation; the osx-arm64 platform only has the generic Netlib BLAS and the OpenBLAS implementation options.
For me (MacOS w/ Intel i9), I get the following benchmark results:
BLAS Implmentation Mean Timing (s)mkl
0.95932
blis
1.72059
openblas
2.17023
netlib
5.72782
So, I suspect the old MBP had MKL installed, and the M1 system is installing either Netlib or OpenBLAS. Maybe try figuring out whether Netlib or OpenBLAS are faster on M1, and keep the faster one.
Specifying BLAS ImplementationHere are specifically the different environments I tested:
QUESTION
I have a few large static arrays that are used in a resource constrained embedded system (small microcontroller, bare metal). These are occasionally added to over the course of the project, but all follow that same mathematical formula for population. I could just make a Python script to generate a new header with the needed arrays before compilation, but it would be nicer to have it happen in the pre-processor like you might do with template meta-programming in C++. Is there any relatively easy way to do this in C? I've seen ways to get control structures like while
loops using just the pre-processor, but that seems a bit unnatural to me.
Here is an example of once such map, an approximation to arctan
, in Python, where the parameter a
is used to determine the length and values of the array, and is currently run at a variety of values from about 100 to about 2^14:
ANSWER
Answered 2022-Mar-08 at 22:33Is there any relatively easy way to do this in C?
No.
Stick to a Python script and incorporate it inside your build system. It is normal to generate C code using other scripts. This will be strongly relatively easier than a million lines of C code.
Take a look at M4 or Jinja2 (or PHP) - these macro processors allow sharing code with C source in the same file.
QUESTION
I am getting this error when I try to sign up a user. After this error, I'm still able to sign in with the user it would've created, but it always shows me this upon registration. Please let me know if there's other information you need. Been stumped on this for a few days.
Here is the callback for the error:
...ANSWER
Answered 2022-Jan-03 at 12:08This seems to a be a known issue with Rails 7 and Devise now. To fix it in the meantime simply add the following line to your devise.rb.
config.navigational_formats = ['*/*', :html, :turbo_stream]
QUESTION
I am implementing a simple chatbot using keras and WebSockets. I now have a model that can make a prediction about the user input and send the according answer.
When I do it through command line it works fine, however when I try to send the answer through my WebSocket, the WebSocket doesn't even start anymore.
Here is my working WebSocket code:
...ANSWER
Answered 2022-Feb-16 at 19:53There is no problem with your websocket route. Could you please share how you are triggering this route? Websocket is a different protocol and I'm suspecting that you are using a HTTP client to test websocket. For example in Postman:
HTTP requests are different than websocket requests. So, you should use appropriate client to test websocket.
QUESTION
[Editing this question completely] Thank you , for those who helped in building the Periodic Table successfully . As I completed it , I tried to link it with another of my project E-Search
, which acts like Google and fetches answers , except that it will fetch me the data of the Periodic Table .
But , I got a problem - not with the searching but with the layout . I'm trying to layout the x-scrollbar in my canvas which will display results regarding the search . However , it is not properly done . Can anyone please help ?
Below here is my code :
...ANSWER
Answered 2021-Dec-29 at 20:33I rewrote your code with some better ways to create table. My idea was to pick out the buttons that fell onto a range of type and then loop through those buttons and change its color to those type.
QUESTION
I am trying to use MTLSharedEvent
along with MTLSharedEventListener
to synchronize computation between GPU and CPU, as in example provided by Apple (https://developer.apple.com/documentation/metal/synchronization/synchronizing_events_between_a_gpu_and_the_cpu). Basically what I want to achieve is have work split into 3 parts executed in order, like so:
- GPU computation part 1
- CPU computation based on results from GPU computation part 1
- GPU computation part 2 after CPU computation
My problem is that eventListener
block is always called before command buffer is being scheduled for execution, which make my CPU task execute first in order.
To simplify the case, let’s use simple commands that fill MTLBuffer
with certain values (my original use case is more complicated, as using compute encoders with custom shaders, but behaves the same):
ANSWER
Answered 2022-Jan-11 at 10:53This is perfectly fine that command buffer is committed. In fact if it wouldn't be committed you'll never get to notify
block.
GPU and CPU runs in parallel. So when you use MTLEvent
you don't stop executing CPU code (all the Swift code actually). You just tell GPU in what order to execute GPU code.
So what's happening in your case:
- All your code runs in a single CPU thread without any interruption.
- GPU starts executing command buffer commands only when you call
commit()
. Before it GPU actually don't do anything. You just scheduled command to be performed on GPU but don't perform them. - When GPU executes commands it checks for your
MTLEvent
. It performs part 1, then encodes value1
to event, performs notify block, encodes value2
, performs second GPU block.
But again all the actual GPU work starts only when you call commit()
on command buffer. That's why buffer is already committed in notify block. Because it is performed after commit()
.
QUESTION
I have just set up a kubernetes cluster on bare metal using kubeadm, Flannel and MetalLB. Next step for me is to install ArgoCD.
I installed the ArgoCD yaml from the "Getting Started" page and logged in.
When adding my Git repositories ArgoCD gives me very weird error messages: The error message seems to suggest that ArgoCD for some reason is resolving github.com to my public IP address (I am not exposing SSH, therefore connection refused).
I can not find any reason why it would do this. When using https:// instead of SSH I get the same result, but on port 443.
I have put a dummy pod in the same namespace as ArgoCD and made some DNS queries. These queries resolved correctly.
What makes ArgoCD think that github.com resolves to my public IP address?
EDIT:
I have also checked for network policies in the argocd namespace and found no policy that was restricting egress.
I have had this working on clusters in the same network previously and have not changed my router firewall since then.
...ANSWER
Answered 2022-Jan-08 at 21:04That looks like argoproj/argo-cd issue 1510, where the initial diagnostic was that the cluster is blocking outbound connections to GitHub. And it suggested to check the egress configuration.
Yet, the issue was resolved with an ingress rule configuration:
need to define in
values.yaml
.
argo-cd
default provide subdomain but in our case it was/argocd
QUESTION
Recently, Apple has released a library to use Metal directly using C++. The example that I've found online (https://github.com/moritzhof/metal-cpp-examples), works if I copy the source code and follow the steps outlined by Apple (https://developer.apple.com/metal/cpp/) in Xcode. I don't use the included Xcode project files, to avoid any "hidden" settings.
Now I'm trying to get the same example to build using CMake, with this CMakeLists.txt:
...ANSWER
Answered 2022-Jan-08 at 16:39All .metal files in an Xcode project that builds an application are compiled and built into a single default library.
_device->newDefaultLibrary()
return a new library object that contains the functions from the default library. This method returns nil if the default library cannot be found.
Since you are not using Xcode, you should manually compile Metal Shading Language source code and build a Metal library.
Then, at runtime, call the newLibrary(filePath, &error)
method to retrieve and access your library as a MTL::Library
object.
QUESTION
If we look at the minimal example below,
...ANSWER
Answered 2022-Jan-08 at 01:16One way is to create a custom target and add a custom command to it that will generate your mylib.metallib
QUESTION
This follows as a result of experimenting on Compiler Explorer as to ascertain the compiler's (rustc's) behaviour when it comes to the log2()
/leading_zeros()
and similar functions. I came across this result with seems exceedingly both bizarre and concerning:
Code:
...ANSWER
Answered 2021-Dec-26 at 01:56Old x86-64 CPUs don't support lzcnt
, so rustc/llvm won't emit it by default. (They would execute it as bsr
but the behavior is not identical.)
Use -C target-feature=+lzcnt
to enable it. Try.
More generally, you may wish to use -C target-cpu=XXX
to enable all the features of a specific CPU model. Use rustc --print target-cpus
for a list.
In particular, -C target-cpu=native
will generate code for the CPU that rustc itself is running on, e.g. if you will run the code on the same machine where you are compiling it.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install Metal
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page