小编mar*_*n s的帖子

AVX2中的8位移位操作,零移位

有没有办法_mm_slli_si128在AVX2中重建指令以将__mm256i寄存器移位x个字节?

_mm256_slli_si256似乎只是执行两个_mm_slli_si128上的[127:0]和A [255:128].

左移应该__m256i是这样的:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ..., 32] -> [2, 3, 4, 5, 6, 7, 8, 9, ..., 0]
Run Code Online (Sandbox Code Playgroud)

我在线程中看到可以创建一个_mm256_permutevar8x32_ps32位的移位.但我需要一个更通用的解决方案来换班x字节.有人已经解决了这个问题吗?

c sse simd avx avx2

11
推荐指数
1
解决办法
2363
查看次数

使用SSE4矢量化点积计算

我正在尝试使用SSE4 dot产品改进此代码,但我很难找到解决方案.此函数获取参数qi和tj,其中包含每个80个单元格的浮点数组,然后计算点积.返回值是具有四个点积的向量.所以我想要做的就是并行计算20个值的四个点积.

您知道如何改进此代码吗?

inline __m128 ScalarProd20Vec(__m128* qi, __m128* tj)
{
    __m128 res=_mm_add_ps(_mm_mul_ps(tj[0],qi[0]),_mm_mul_ps(tj[1],qi[1]));
    res=_mm_add_ps(res,_mm_add_ps(_mm_mul_ps(tj[2],qi[2]),_mm_mul_ps(tj[3],qi[3])));
    res=_mm_add_ps(res,_mm_add_ps(_mm_mul_ps(tj[4],qi[4]),_mm_mul_ps(tj[5],qi[5])));
    res=_mm_add_ps(res,_mm_add_ps(_mm_mul_ps(tj[6],qi[6]),_mm_mul_ps(tj[7],qi[7])));
    res=_mm_add_ps(res,_mm_add_ps(_mm_mul_ps(tj[8],qi[8]),_mm_mul_ps(tj[9],qi[9])));
    res=_mm_add_ps(res,_mm_add_ps(_mm_mul_ps(tj[10],qi[10]),_mm_mul_ps(tj[11],qi[11])));
    res=_mm_add_ps(res,_mm_add_ps(_mm_mul_ps(tj[12],qi[12]),_mm_mul_ps(tj[13],qi[13])));
    res=_mm_add_ps(res,_mm_add_ps(_mm_mul_ps(tj[14],qi[14]),_mm_mul_ps(tj[15],qi[15])));
    res=_mm_add_ps(res,_mm_add_ps(_mm_mul_ps(tj[16],qi[16]),_mm_mul_ps(tj[17],qi[17])));
    res=_mm_add_ps(res,_mm_add_ps(_mm_mul_ps(tj[18],qi[18]),_mm_mul_ps(tj[19],qi[19])));
    return res;
}
Run Code Online (Sandbox Code Playgroud)

c performance sse dot-product

10
推荐指数
1
解决办法
3056
查看次数

生成Web服务客户端时Apache发生意外的子元素异常

我正在尝试使用来自axis2(版本1.6.1)的wsdl2java生成一个Web服务客户端.

./wsdl2java.sh -uri http://www.ncbi.nlm.nih.gov/entrez/eutils/soap/v2.0/efetch_snp.wsdl
Run Code Online (Sandbox Code Playgroud)

当我打电话给这项服务时,我得到一个例外.

org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {http://www.ncbi.nlm.nih.gov/soap/eutils/efetch_snp}Rs

    try {
        EFetchSnpServiceStub fetchService = new EFetchSnpServiceStub();
        EFetchSnpServiceStub.EFetchRequest reqIdSnp = new EFetchSnpServiceStub.EFetchRequest();
        reqIdSnp.setId("193925233");
        EFetchSnpServiceStub.EFetchResult resIdSnp = fetchService.run_eFetch(reqIdSnp);
    } catch (Exception e) {
        System.out.println(e.toString());
    }   
Run Code Online (Sandbox Code Playgroud)

但是,使用soaptest,我可以在结果中看到Rs Tag.

<Rs rsId="193925233" snpClass="snp" snpType="notwithdrawn" molType="genomic" bitField="050000000005000000000100" taxId="3702">
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个异常?WSDL不在我的控制之下.

java axis2 web-services exception

7
推荐指数
1
解决办法
2万
查看次数

ResultSetExtractor中getInt的性能问题

我在ResultSetExtractor中调用getInt时遇到了性能问题.GetInt被称为20000次.一次通话费用为0.15毫秒,总体成本为24秒,同时在探查器内部运行.执行SQL语句大约需要8秒钟(通过Primary-Key访问).我使用mysql驱动程序版本5.1.13,mysql服务器5.1.44和spring-jdbc-3.1.1你有想法提高性能吗?

    mut.getMutEffect()[0]=(rs.getInt("leffect_a") != 0);
    mut.getMutEffect()[1]=(rs.getInt("leffect_c") != 0);
    ...
    mut.getMutEffect()[19]=(rs.getInt("leffect_y") != 0);
    mut.getMutReliability()[0]=rs.getInt("lreliability_a");
    ...
    mut.getMutReliability()[19]=rs.getInt("lreliability_y");
Run Code Online (Sandbox Code Playgroud)

我的计划看起来像这样

CREATE TABLE mutation (
 ...
 leffect_a BIT NOT NULL,
 lreliability_a TINYINT UNSIGNED NOT NULL,
 ...
 leffect_y BIT NOT NULL,
 lreliability_y TINYINT UNSIGNED NOT NULL,
 ...
) ENGINE=MyISAM;
Run Code Online (Sandbox Code Playgroud)

编辑:在getInt中调用methode getIntWithOverflowCheck,这看起来很昂贵.是否有可能完成这项检查?

java mysql performance spring jdbc

6
推荐指数
1
解决办法
732
查看次数

仅使用SSE2提取SSE混洗32位值

我试图以有效的方式从128位寄存器中提取4个字节.问题是每个值都是32位{120,0,0,0,55,0,0,0,42,0,0,0,120,0,0,0}.我想将128位转换为32位形式{120,55,42,120}.

"原始"代码如下所示:

__m128i byte_result_vec={120,0,0,0,55,0,0,0,42,0,0,0,120,0,0,0};
unsigned char * byte_result_array=(unsigned char*)&byte_result_vec;
result_array[x]=byte_result_array[0];
result_array[x+1]=byte_result_array[4];
result_array[x+2]=byte_result_array[8];
result_array[x+3]=byte_result_array[12];  
Run Code Online (Sandbox Code Playgroud)

我的SSSE3代码是:

unsigned int * byte_result_array=...;
__m128i byte_result_vec={120,0,0,0,55,0,0,0,42,0,0,0,120,0,0,0};
const __m128i eight_bit_shuffle_mask=_mm_set_epi8(1,1,1,1,1,1,1,1,1,1,1,1,0,4,8,12);    
byte_result_vec=_mm_shuffle_epi8(byte_result_vec,eight_bit_shuffle_mask);
unsigned int * byte_result_array=(unsigned int*)&byte_result_vec;
result_array[x]=byte_result_array[0];
Run Code Online (Sandbox Code Playgroud)

我怎样才能有效地使用SSE2.SSSE3或SSE4有更好的版本吗?

c optimization sse

6
推荐指数
1
解决办法
1692
查看次数

提高在C中合并两个文件的IO性能

我写了一个函数,它将两个大文件(file1,file2)合并到一个新文件(outputFile)中.每个文件都是基于行的格式,而条目以\ 0字节分隔.两个文件都具有相同数量的空字节.

一个包含两个条目的示例文件可能如下所示 A\nB\n\0C\nZ\nB\n\0

   Input:
   file1: A\nB\0C\nZ\nB\n\0
   file2: BBA\nAB\0T\nASDF\nQ\n\0
   Output
   outputFile: A\nB\nBBA\nAB\0C\nZ\nB\nT\nASDF\nQ\n\0

FILE * outputFile = fopen(...);
setvbuf ( outputFile  , NULL , _IOFBF , 1024*1024*1024 )
FILE * file1 = fopen(...); 
FILE * file2 = fopen(...); 
int c1, c2;
while((c1=fgetc(file1)) != EOF) {
    if(c1 == '\0'){
        while((c2=fgetc(file2)) != EOF && c2 != '\0') {
            fwrite(&c2, sizeof(char), 1, outputFile);
        }
        char nullByte = '\0';
        fwrite(&nullByte, sizeof(char), 1, outputFile);
    }else{
        fwrite(&c1, sizeof(char), 1, outputFile);
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法提高这个功能的IO性能?我 …

c io performance

6
推荐指数
1
解决办法
215
查看次数

Jersey restful service communication(IncompatibleClassChangeError)

我在JDK 1.6 http服务器上创建了一个基于jersey 1.12的宁静服务外观.当我在eclipse中启动我的应用程序时,一切正常.我可以毫无困难地与外观进行通信,但是当我使用启动脚本通过控制台启动应用程序时,我在访问服务时遇到了IncompatibleClassChangeError.

我能够缩小问题的范围.问题在于发送响应.因为我可以正常地与服务通信(请求被处理)但我没有得到回复.你对此有什么线索吗?

启动脚本

#!/usr/bin/env bash
libpath=
for i in $(ls lib/*|grep ".jar"); do 
    libpath=$( echo "$i:$libpath"); 
done
java -cp "$(echo $libpath)build/jar/myjar.jar" org.....Startup
Run Code Online (Sandbox Code Playgroud)

将被抛出的异常

WARNUNG: Class org....facade.ServiceFacadeImpl is ignored as an instance is registered in the set of singletons
Call getMutationList: NP_005378
Exception in thread "pool-1-thread-1" java.lang.IncompatibleClassChangeError: Class javax.ws.rs.core.Response$Status does not implement the requested interface javax.ws.rs.core.Response$StatusType
Run Code Online (Sandbox Code Playgroud)

我的门面的一部分

@GET
@Path("/mutations/{id}/{from}/{size}")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public MutationPosContainer getMutationList(@PathParam("id") String id,
        @PathParam("from") Integer from, @PathParam("size") Integer size) {
    ...
    if (posContainer …
Run Code Online (Sandbox Code Playgroud)

java rest jersey simplehttpserver

5
推荐指数
1
解决办法
5346
查看次数

优化从AVX2寄存器中提取64位值

我尝试从__m256i寄存器中提取64位.我当前提取功能的示例:

             byte     31                    16 15                    0
byte_result_vec        000D  000C  000B  000A   000H  000G  000F  000E

_mm256_packs_epi32 ->  0D0C  0B0A  0D0C  0B0A   0H0G  0F0E  0H0G  0F0E

_mm256_packus_epi16 -> DCBA  DCBA  DCBA  DCBA   HGFE  HGFE  HGFE  HGFE
                                         ^^^^                     ^^^^
_mm256_castsi256_si128   -> HGFE  HGFE  HGFE  HGFE

_mm256_extracti128_si256 -> DCBA  DCBA  DCBA  DCBA

_mm_cvtsi128_si32(byte_result_vec1) ->  ABCD

_mm_cvtsi128_si32(byte_result_vec2) ->  EFGH
Run Code Online (Sandbox Code Playgroud)

下面的代码将4x8位移到寄存器位置0-3,而不是提取32位.

        byte_result_vec = _mm256_packs_epi32(byte_result_vec, byte_result_vec);
        byte_result_vec = _mm256_packus_epi16(byte_result_vec, byte_result_vec);
        __m128i byte_result_vec1 = _mm256_castsi256_si128(byte_result_vec);
        __m128i byte_result_vec2 = _mm256_extracti128_si256(byte_result_vec,1);
        const int res1 = _mm_cvtsi128_si32(byte_result_vec1);
        const int res2 …
Run Code Online (Sandbox Code Playgroud)

c sse avx avx2

5
推荐指数
1
解决办法
1494
查看次数

sse2浮点乘法

我试图将一些代码从FANN Lib(用C语言编写的神经网络)移植到SSE2.但是SSE2的性能比普通代码差.使用我的SSE2实现运行一次运行需要5.50分钟而不需要5.20分钟.

SSE2怎么能比正常运行慢?可能是因为_mm_set_ps?我使用Apple LLVM编译器(XCode 4)编译代码(所有SSE扩展标志都打开,优化级别为-Os).

没有SSE2的代码

                neuron_sum +=
                fann_mult(weights[i], neurons[i].value) +
                fann_mult(weights[i + 1], neurons[i + 1].value) +
                fann_mult(weights[i + 2], neurons[i + 2].value) +
                fann_mult(weights[i + 3], neurons[i + 3].value);
Run Code Online (Sandbox Code Playgroud)

SSE2代码

                __m128 a_line=_mm_loadu_ps(&weights[i]);
                __m128 b_line=_mm_set_ps(neurons[i+3].value,neurons[i+2].value,neurons[i+1].value,neurons[i].value);
                __m128 c_line=_mm_mul_ps(a_line, b_line);
                neuron_sum+=c_line[0]+c_line[1]+c_line[2]+c_line[3];
Run Code Online (Sandbox Code Playgroud)

c performance sse2 fann

3
推荐指数
1
解决办法
1832
查看次数

在Mavericks上编译AVX2程序

我尝试使用gcc版本4.9.0 20131201在Mac OS 10.9上编译虚拟AVX2程序

//dummy program
#include <immintrin.h> // AVX2
#include <stdio.h>
int main(int argc, char* argv[]) {
   __m256i reg =  _mm256_set1_epi8(1);
   __m256i result = _mm256_max_epu8(reg,reg);
   printf("%d",((int *)&result)[0]);
}
Run Code Online (Sandbox Code Playgroud)

我用这个命令编译

gcc -mavx -O0 test.C

我收到这个错误

In function 'int main(int, char**)':
avx2intrin.h:373:1: 
error: inlining failed in call to always_inline 
'__m256i _mm256_max_epu8(__m256i, __m256i)': target specific option mismatch
 _mm256_max_epu8 (__m256i __A, __m256i __B)
Run Code Online (Sandbox Code Playgroud)

_mm256_max_epu8使用always_inline属性.这是问题吗?

如果我用O3编译,我也会遇到问题.

我究竟做错了什么?

c c++ gcc avx avx2

3
推荐指数
1
解决办法
4066
查看次数

SSE无符号/有符号减法16位寄存器

我有一个__m128i寄存器(向量A),其内容为16位值:

{100,26,26,26,26,26,26,100} // A Vector
Run Code Online (Sandbox Code Playgroud)

现在我减去矢量

{82,82,82,82,82,82,82,82}
Run Code Online (Sandbox Code Playgroud)

随着指示

_mm_sub_epi16(a_vec,_mm_set1_epi16(82)) 
Run Code Online (Sandbox Code Playgroud)

预期结果应为以下向量

{18,-56,-56,-56,-56,-56,-56,18}
Run Code Online (Sandbox Code Playgroud)

但我明白了

{18,65480,65480,65480,65480,65480,65480,18}
Run Code Online (Sandbox Code Playgroud)

如何解决向量被视为已签名?

A Vector由此指令创建:

__m128i a_vec = _mm_srli_epi16(_mm_unpacklo_epi8(score_vec_8bit, score_vec_8bit), 8)
Run Code Online (Sandbox Code Playgroud)

c performance sse

2
推荐指数
1
解决办法
465
查看次数

标签 统计

c ×8

performance ×5

sse ×5

avx ×3

avx2 ×3

java ×3

axis2 ×1

c++ ×1

dot-product ×1

exception ×1

fann ×1

gcc ×1

io ×1

jdbc ×1

jersey ×1

mysql ×1

optimization ×1

rest ×1

simd ×1

simplehttpserver ×1

spring ×1

sse2 ×1

web-services ×1