{"action":"created","issue":{"url":"https://api.github.com/repos/gonum/internal/issues/7","labels_url":"https://api.github.com/repos/gonum/internal/issues/7/labels{/name}","comments_url":"https://api.github.com/repos/gonum/internal/issues/7/comments","events_url":"https://api.github.com/repos/gonum/internal/issues/7/events","html_url":"https://github.com/gonum/internal/pull/7","id":86181765,"number":7,"title":"Add AMD64 SSE slice operations","user":{"login":"klauspost","id":5663952,"avatar_url":"https://avatars.githubusercontent.com/u/5663952?v=3","gravatar_id":"","url":"https://api.github.com/users/klauspost","html_url":"https://github.com/klauspost","followers_url":"https://api.github.com/users/klauspost/followers","following_url":"https://api.github.com/users/klauspost/following{/other_user}","gists_url":"https://api.github.com/users/klauspost/gists{/gist_id}","starred_url":"https://api.github.com/users/klauspost/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/klauspost/subscriptions","organizations_url":"https://api.github.com/users/klauspost/orgs","repos_url":"https://api.github.com/users/klauspost/repos","events_url":"https://api.github.com/users/klauspost/events{/privacy}","received_events_url":"https://api.github.com/users/klauspost/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":9,"created_at":"2015-06-08T13:41:29Z","updated_at":"2015-10-28T05:53:33Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/gonum/internal/pulls/7","html_url":"https://github.com/gonum/internal/pull/7","diff_url":"https://github.com/gonum/internal/pull/7.diff","patch_url":"https://github.com/gonum/internal/pull/7.patch"},"body":"This adds assembler functions for common single and double precision operations. The assembler functions usually are more than twice as fast as pure Go operations. The speedups listed in Xslice.go is on a slice with 10000 elements.\r\n\r\nIf you think we should move on with this, I will add tests and license, and whatever you think also may be missing."},"comment":{"url":"https://api.github.com/repos/gonum/internal/issues/comments/151733465","html_url":"https://github.com/gonum/internal/pull/7#issuecomment-151733465","issue_url":"https://api.github.com/repos/gonum/internal/issues/7","id":151733465,"user":{"login":"btracey","id":3680859,"avatar_url":"https://avatars.githubusercontent.com/u/3680859?v=3","gravatar_id":"","url":"https://api.github.com/users/btracey","html_url":"https://github.com/btracey","followers_url":"https://api.github.com/users/btracey/followers","following_url":"https://api.github.com/users/btracey/following{/other_user}","gists_url":"https://api.github.com/users/btracey/gists{/gist_id}","starred_url":"https://api.github.com/users/btracey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/btracey/subscriptions","organizations_url":"https://api.github.com/users/btracey/orgs","repos_url":"https://api.github.com/users/btracey/repos","events_url":"https://api.github.com/users/btracey/events{/privacy}","received_events_url":"https://api.github.com/users/btracey/received_events","type":"User","site_admin":false},"created_at":"2015-10-28T05:53:33Z","updated_at":"2015-10-28T05:53:33Z","body":"As an addendum to that rule, floats should use the assembly functions we get for free. That is, if the function is important enough to have an assembly version for vector, floats should also call it.\r\n\r\nAt present, I do stand by my initial statement. (generalized) Daxpy , Dot, and Scale are fundamental kernels in BLAS level 2 and 3 (and thus lapack and thus matrix). The rest of them make only sparse appearance. Dnrm2 is clearly useful, but it's not any sort of kernel, even in somewhere like optimize that uses it a lot. Possibly Drot, but I doubt it's on any critical path. \r\n\r\nBecause of this, these three functions are clearly useful. They provide an immediate speed boost to \"real\" programs of 2-3x, and were we to extend the assembly to AVX it would be even more. To me this merits the cost of assembly. I'm sure assembly can speed up calling Dasum by a similar amount, but it's not used frequently enough to matter even for linear algebra benchmarks.\r\n\r\nBecause the point is speed, it's worth having the extra complexity of unitary and inc versions. "}}