From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4041 invoked by alias); 7 Apr 2008 16:05:04 -0000 Received: (qmail 4033 invoked by uid 22791); 7 Apr 2008 16:05:03 -0000 X-Spam-Check-By: sourceware.org Received: from gv-out-0910.google.com (HELO gv-out-0910.google.com) (216.239.58.189) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 07 Apr 2008 16:04:36 +0000 Received: by gv-out-0910.google.com with SMTP id u5so237503gve.10 for ; Mon, 07 Apr 2008 09:04:28 -0700 (PDT) Received: by 10.150.154.5 with SMTP id b5mr2779400ybe.207.1207584257180; Mon, 07 Apr 2008 09:04:17 -0700 (PDT) Received: by 10.150.195.1 with HTTP; Mon, 7 Apr 2008 09:04:17 -0700 (PDT) Message-ID: <3d104d6f0804070904s6d196a02gbe86990152cb33fa@mail.gmail.com> Date: Mon, 07 Apr 2008 16:09:00 -0000 From: "Dario Bahena Tapia" To: "Dario Saccavino" Subject: Re: Why worse performace in euclidean distance with SSE2? Cc: gcc-help@gcc.gnu.org In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <3d104d6f0804070617u47213cc8nbc697dab9dc262b5@mail.gmail.com> X-IsSubscribed: yes Mailing-List: contact gcc-help-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-help-owner@gcc.gnu.org X-SW-Source: 2008-04/txt/msg00077.txt.bz2 Oh you are correct ... that improved a lot. However, it still runs slower than serial version, about 1 second more for the 10,000 data example. Thanks. On Mon, Apr 7, 2008 at 9:08 AM, Dario Saccavino wrote: > Hello Dario, > > I haven't tried your code yet but I think you could get a good boost > if you replace the "sqrt_pd" call with "sqrt_sd", since you only need > the square root of a scalar. > > Dario > > > > > > > > inline static double dist_sse(int i,int j) > > { > > double d; > > __m128d xmm0,xmm1; > > xmm0 =_mm_load_pd(C[i]); > > xmm1 = _mm_load_pd(C[j]); > > xmm0 = _mm_sub_pd(xmm0,xmm1); > > xmm1 = xmm0; > > xmm0 = _mm_mul_pd(xmm0,xmm1); > > xmm1 = _mm_shuffle_pd(xmm0, xmm0, _MM_SHUFFLE2(1, 1)); > > xmm0 = _mm_add_pd(xmm0,xmm1); > > xmm0 = _mm_sqrt_pd(xmm0); > > _mm_store_sd(&d,xmm0); > > return rint(d); > > } > > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5150 invoked by alias); 7 Apr 2008 16:05:53 -0000 Received: (qmail 5133 invoked by uid 22791); 7 Apr 2008 16:05:52 -0000 X-Spam-Check-By: sourceware.org Received: from gv-out-0910.google.com (HELO gv-out-0910.google.com) (216.239.58.189) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 07 Apr 2008 16:05:13 +0000 Received: by gv-out-0910.google.com with SMTP id u5so237503gve.10 for ; Mon, 07 Apr 2008 09:05:12 -0700 (PDT) Received: by 10.150.154.5 with SMTP id b5mr2779400ybe.207.1207584257180; Mon, 07 Apr 2008 09:04:17 -0700 (PDT) Received: by 10.150.195.1 with HTTP; Mon, 7 Apr 2008 09:04:17 -0700 (PDT) Message-ID: <3d104d6f0804070904s6d196a02gbe86990152cb33fa@mail.gmail.com> Date: Mon, 07 Apr 2008 16:41:00 -0000 From: "Dario Bahena Tapia" To: "Dario Saccavino" Subject: Re: Why worse performace in euclidean distance with SSE2? Cc: gcc-help@gcc.gnu.org In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <3d104d6f0804070617u47213cc8nbc697dab9dc262b5@mail.gmail.com> X-IsSubscribed: yes Mailing-List: contact gcc-help-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-help-owner@gcc.gnu.org X-SW-Source: 2008-04/txt/msg00078.txt.bz2 Message-ID: <20080407164100.ZwL-Mqmyj2mDwH8WRxD2rI9CXHhIOLMXGiW74kOXcbw@z> Oh you are correct ... that improved a lot. However, it still runs slower than serial version, about 1 second more for the 10,000 data example. Thanks. On Mon, Apr 7, 2008 at 9:08 AM, Dario Saccavino wrote: > Hello Dario, > > I haven't tried your code yet but I think you could get a good boost > if you replace the "sqrt_pd" call with "sqrt_sd", since you only need > the square root of a scalar. > > Dario > > > > > > > > inline static double dist_sse(int i,int j) > > { > > double d; > > __m128d xmm0,xmm1; > > xmm0 =_mm_load_pd(C[i]); > > xmm1 = _mm_load_pd(C[j]); > > xmm0 = _mm_sub_pd(xmm0,xmm1); > > xmm1 = xmm0; > > xmm0 = _mm_mul_pd(xmm0,xmm1); > > xmm1 = _mm_shuffle_pd(xmm0, xmm0, _MM_SHUFFLE2(1, 1)); > > xmm0 = _mm_add_pd(xmm0,xmm1); > > xmm0 = _mm_sqrt_pd(xmm0); > > _mm_store_sd(&d,xmm0); > > return rint(d); > > } > > >